From bf26be279c0aa5fe0e8ad3f219885f0de489ca37 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 12 Jan 2024 16:25:21 +0100 Subject: [PATCH 001/253] poc: test purify-ts and effect --- pocs/fp-libraries/.eslintrc.json | 3 + pocs/fp-libraries/.gitignore | 36 + pocs/fp-libraries/README.md | 36 + pocs/fp-libraries/app/common/global.css | 3 + pocs/fp-libraries/app/common/page.module.css | 31 + pocs/fp-libraries/app/common/types.ts | 26 + pocs/fp-libraries/app/effect/page.tsx | 67 + pocs/fp-libraries/app/effect/utils.ts | 70 + pocs/fp-libraries/app/favicon.ico | Bin 0 -> 25931 bytes pocs/fp-libraries/app/globals.css | 107 + pocs/fp-libraries/app/layout.tsx | 22 + pocs/fp-libraries/app/page.module.css | 229 ++ pocs/fp-libraries/app/page.tsx | 107 + pocs/fp-libraries/app/purify-ts/page.tsx | 68 + pocs/fp-libraries/app/purify-ts/utils.ts | 70 + pocs/fp-libraries/next.config.js | 4 + pocs/fp-libraries/package-lock.json | 3728 ++++++++++++++++++ pocs/fp-libraries/package.json | 26 + pocs/fp-libraries/public/next.svg | 1 + pocs/fp-libraries/public/vercel.svg | 1 + pocs/fp-libraries/tsconfig.json | 27 + 21 files changed, 4662 insertions(+) create mode 100644 pocs/fp-libraries/.eslintrc.json create mode 100644 pocs/fp-libraries/.gitignore create mode 100644 pocs/fp-libraries/README.md create mode 100644 pocs/fp-libraries/app/common/global.css create mode 100644 pocs/fp-libraries/app/common/page.module.css create mode 100644 pocs/fp-libraries/app/common/types.ts create mode 100644 pocs/fp-libraries/app/effect/page.tsx create mode 100644 pocs/fp-libraries/app/effect/utils.ts create mode 100644 pocs/fp-libraries/app/favicon.ico create mode 100644 pocs/fp-libraries/app/globals.css create mode 100644 pocs/fp-libraries/app/layout.tsx create mode 100644 pocs/fp-libraries/app/page.module.css create mode 100644 pocs/fp-libraries/app/page.tsx create mode 100644 pocs/fp-libraries/app/purify-ts/page.tsx create mode 100644 pocs/fp-libraries/app/purify-ts/utils.ts create mode 100644 pocs/fp-libraries/next.config.js create mode 100644 pocs/fp-libraries/package-lock.json create mode 100644 pocs/fp-libraries/package.json create mode 100644 pocs/fp-libraries/public/next.svg create mode 100644 pocs/fp-libraries/public/vercel.svg create mode 100644 pocs/fp-libraries/tsconfig.json diff --git a/pocs/fp-libraries/.eslintrc.json b/pocs/fp-libraries/.eslintrc.json new file mode 100644 index 000000000..bffb357a7 --- /dev/null +++ b/pocs/fp-libraries/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/pocs/fp-libraries/.gitignore b/pocs/fp-libraries/.gitignore new file mode 100644 index 000000000..fd3dbb571 --- /dev/null +++ b/pocs/fp-libraries/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/pocs/fp-libraries/README.md b/pocs/fp-libraries/README.md new file mode 100644 index 000000000..c4033664f --- /dev/null +++ b/pocs/fp-libraries/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/pocs/fp-libraries/app/common/global.css b/pocs/fp-libraries/app/common/global.css new file mode 100644 index 000000000..74916a9fc --- /dev/null +++ b/pocs/fp-libraries/app/common/global.css @@ -0,0 +1,3 @@ +body { + min-height: fit-content; +} diff --git a/pocs/fp-libraries/app/common/page.module.css b/pocs/fp-libraries/app/common/page.module.css new file mode 100644 index 000000000..ef3bde0ad --- /dev/null +++ b/pocs/fp-libraries/app/common/page.module.css @@ -0,0 +1,31 @@ +.main, +.searchMain { + display: flex; + align-items: center; + justify-content: center; + padding: 20px; +} + +.sub { + flex-direction: column; +} + +.searchMain { + justify-content: space-around; +} + +.search { + flex-grow: 1; + padding: 5px; + outline: none; + border-radius: 5px; +} + +.button { + padding: 5px; + background-color: #f0c; + color: white; + border-color: #f0c; + margin-left: 20px; + border-radius: 5px; +} diff --git a/pocs/fp-libraries/app/common/types.ts b/pocs/fp-libraries/app/common/types.ts new file mode 100644 index 000000000..09c969416 --- /dev/null +++ b/pocs/fp-libraries/app/common/types.ts @@ -0,0 +1,26 @@ +export class PokeApiError { + readonly _tag = "PokeApiError"; + message: string; + constructor(message: string) { + this.message = message; + } +} + +export interface MoveMeta { + move: { + name: string; + url: string; + }; +} + +export interface Pokemon { + id: number; + name: string; + moves: MoveMeta[]; +} + +export interface Move { + name: string; + power: number; + pp: number; +} diff --git a/pocs/fp-libraries/app/effect/page.tsx b/pocs/fp-libraries/app/effect/page.tsx new file mode 100644 index 000000000..7894b85c3 --- /dev/null +++ b/pocs/fp-libraries/app/effect/page.tsx @@ -0,0 +1,67 @@ +"use client"; + +import { SyntheticEvent, useRef, useState } from "react"; +import { Move } from "../common/types"; +import "../common/global.css"; +import styles from "../common/page.module.css"; +import { findStrongestMoveGen } from "./utils"; +import { Effect } from "effect"; + +export default function Page() { + const inputRef = useRef(null); + const [result, setResult] = useState(); + const [pokemon, setPokemon] = useState(); + + const onClick = async ( + e: SyntheticEvent + ) => { + e.preventDefault(); + if (!inputRef?.current?.value) return; + + Effect.runPromise(findStrongestMoveGen(inputRef.current.value)) + .then((move) => { + setResult(move); + setPokemon(inputRef?.current?.value); + }) + .catch((reason): void => { + console.log(reason); + setResult(null); + setPokemon(""); + }); + }; + + return ( + <> +
+

Effect Example

+
+
+ + +
+ {result ? ( +
+

Result

+
+
    +
  • + Name: {pokemon} +
  • +
  • + Move name: {result.name.split("-").join(" ")} +
  • +
  • + Power: {result.power} +
  • +
  • + PP: {result.pp} +
  • +
+
+
+ ) : null} + + ); +} diff --git a/pocs/fp-libraries/app/effect/utils.ts b/pocs/fp-libraries/app/effect/utils.ts new file mode 100644 index 000000000..29b787239 --- /dev/null +++ b/pocs/fp-libraries/app/effect/utils.ts @@ -0,0 +1,70 @@ +import { Effect, pipe } from "effect"; +import { Move, PokeApiError, Pokemon } from "../common/types"; + +const POKEAPI_BASE = "https://pokeapi.co/api/v2"; +const POKEMON_DOMAIN = "pokemon"; + +export const fetchPokemonData = (pokemon: string) => + Effect.tryPromise({ + try: async () => { + const url = `${POKEAPI_BASE}/${POKEMON_DOMAIN}/${pokemon}`; + const res = await fetch(url); + const json = await res.json(); + return json as Pokemon; + }, + catch: (err) => + new PokeApiError(`Could not find informations for ${pokemon}`), + }); + +export const fetchMove = (url: string) => + Effect.tryPromise({ + try: async () => { + const res = await fetch(url); + const json = await res.json(); + return json as Move; + }, + catch: (err) => new PokeApiError("could not get move"), + }); + +export const findStrongest = (moves: Move[]): Move => + moves.reduce( + (acc, { power, pp, name }) => { + if (power > acc.power) { + return { + power, + pp, + name, + }; + } + + return acc; + }, + { power: 0, pp: 0, name: "" } + ); + +export const findStrongestMove = (search: string) => + pipe( + // Fetch all the Pokemon + fetchPokemonData(search), + // Get all the moves + Effect.map((a) => a.moves), + // Using flatMap as we return another layer of Effect + Effect.flatMap((moves) => { + const seq = moves.map((m) => m.move.url); + // Like Promise.all but with better concurrency options, also handles Effect + return Effect.all(seq.map((s) => fetchMove(s))); + }), + // Find + Effect.map(findStrongest) + ); + +export const findStrongestMoveGen = (pokemon: string) => + Effect.gen(function* (_) { + const pokemons = yield* _(fetchPokemonData(pokemon)); + const movesData = pokemons.moves; + const moves = yield* _( + Effect.all(movesData.map((move) => fetchMove(move.move.url))) + ); + const move = findStrongest(moves); + return move; + }); diff --git a/pocs/fp-libraries/app/favicon.ico b/pocs/fp-libraries/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/pocs/fp-libraries/app/globals.css b/pocs/fp-libraries/app/globals.css new file mode 100644 index 000000000..e1b5c67fa --- /dev/null +++ b/pocs/fp-libraries/app/globals.css @@ -0,0 +1,107 @@ +:root { + --max-width: 1100px; + --border-radius: 12px; + --font-mono: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", + "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", + "Fira Mono", "Droid Sans Mono", "Courier New", monospace; + + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; + --background-end-rgb: 255, 255, 255; + + --primary-glow: conic-gradient( + from 180deg at 50% 50%, + #16abff33 0deg, + #0885ff33 55deg, + #54d6ff33 120deg, + #0071ff33 160deg, + transparent 360deg + ); + --secondary-glow: radial-gradient( + rgba(255, 255, 255, 1), + rgba(255, 255, 255, 0) + ); + + --tile-start-rgb: 239, 245, 249; + --tile-end-rgb: 228, 232, 233; + --tile-border: conic-gradient( + #00000080, + #00000040, + #00000030, + #00000020, + #00000010, + #00000010, + #00000080 + ); + + --callout-rgb: 238, 240, 241; + --callout-border-rgb: 172, 175, 176; + --card-rgb: 180, 185, 188; + --card-border-rgb: 131, 134, 135; +} + +@media (prefers-color-scheme: dark) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + + --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); + --secondary-glow: linear-gradient( + to bottom right, + rgba(1, 65, 255, 0), + rgba(1, 65, 255, 0), + rgba(1, 65, 255, 0.3) + ); + + --tile-start-rgb: 2, 13, 46; + --tile-end-rgb: 2, 5, 19; + --tile-border: conic-gradient( + #ffffff80, + #ffffff40, + #ffffff30, + #ffffff20, + #ffffff10, + #ffffff10, + #ffffff80 + ); + + --callout-rgb: 20, 20, 20; + --callout-border-rgb: 108, 108, 108; + --card-rgb: 100, 100, 100; + --card-border-rgb: 200, 200, 200; + } +} + +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} + +html, +body { + max-width: 100vw; + overflow-x: hidden; +} + +body { + color: rgb(var(--foreground-rgb)); + /* background: linear-gradient( + to bottom, + transparent, + rgb(var(--background-end-rgb)) + ) + rgb(var(--background-start-rgb)); */ +} + +a { + color: inherit; + text-decoration: none; +} + +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } +} diff --git a/pocs/fp-libraries/app/layout.tsx b/pocs/fp-libraries/app/layout.tsx new file mode 100644 index 000000000..40e027fbe --- /dev/null +++ b/pocs/fp-libraries/app/layout.tsx @@ -0,0 +1,22 @@ +import type { Metadata } from 'next' +import { Inter } from 'next/font/google' +import './globals.css' + +const inter = Inter({ subsets: ['latin'] }) + +export const metadata: Metadata = { + title: 'Create Next App', + description: 'Generated by create next app', +} + +export default function RootLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} diff --git a/pocs/fp-libraries/app/page.module.css b/pocs/fp-libraries/app/page.module.css new file mode 100644 index 000000000..6676d2c66 --- /dev/null +++ b/pocs/fp-libraries/app/page.module.css @@ -0,0 +1,229 @@ +.main { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + padding: 6rem; + min-height: 100vh; +} + +.description { + display: inherit; + justify-content: inherit; + align-items: inherit; + font-size: 0.85rem; + max-width: var(--max-width); + width: 100%; + z-index: 2; + font-family: var(--font-mono); +} + +.description a { + display: flex; + justify-content: center; + align-items: center; + gap: 0.5rem; +} + +.description p { + position: relative; + margin: 0; + padding: 1rem; + background-color: rgba(var(--callout-rgb), 0.5); + border: 1px solid rgba(var(--callout-border-rgb), 0.3); + border-radius: var(--border-radius); +} + +.code { + font-weight: 700; + font-family: var(--font-mono); +} + +.grid { + display: grid; + grid-template-columns: repeat(4, minmax(25%, auto)); + max-width: 100%; + width: var(--max-width); +} + +.card { + padding: 1rem 1.2rem; + border-radius: var(--border-radius); + background: rgba(var(--card-rgb), 0); + border: 1px solid rgba(var(--card-border-rgb), 0); + transition: background 200ms, border 200ms; +} + +.card span { + display: inline-block; + transition: transform 200ms; +} + +.card h2 { + font-weight: 600; + margin-bottom: 0.7rem; +} + +.card p { + margin: 0; + opacity: 0.6; + font-size: 0.9rem; + line-height: 1.5; + max-width: 30ch; +} + +.center { + display: flex; + justify-content: center; + align-items: center; + position: relative; + padding: 4rem 0; +} + +.center::before { + background: var(--secondary-glow); + border-radius: 50%; + width: 480px; + height: 360px; + margin-left: -400px; +} + +.center::after { + background: var(--primary-glow); + width: 240px; + height: 180px; + z-index: -1; +} + +.center::before, +.center::after { + content: ''; + left: 50%; + position: absolute; + filter: blur(45px); + transform: translateZ(0); +} + +.logo { + position: relative; +} +/* Enable hover only on non-touch devices */ +@media (hover: hover) and (pointer: fine) { + .card:hover { + background: rgba(var(--card-rgb), 0.1); + border: 1px solid rgba(var(--card-border-rgb), 0.15); + } + + .card:hover span { + transform: translateX(4px); + } +} + +@media (prefers-reduced-motion) { + .card:hover span { + transform: none; + } +} + +/* Mobile */ +@media (max-width: 700px) { + .content { + padding: 4rem; + } + + .grid { + grid-template-columns: 1fr; + margin-bottom: 120px; + max-width: 320px; + text-align: center; + } + + .card { + padding: 1rem 2.5rem; + } + + .card h2 { + margin-bottom: 0.5rem; + } + + .center { + padding: 8rem 0 6rem; + } + + .center::before { + transform: none; + height: 300px; + } + + .description { + font-size: 0.8rem; + } + + .description a { + padding: 1rem; + } + + .description p, + .description div { + display: flex; + justify-content: center; + position: fixed; + width: 100%; + } + + .description p { + align-items: center; + inset: 0 0 auto; + padding: 2rem 1rem 1.4rem; + border-radius: 0; + border: none; + border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); + background: linear-gradient( + to bottom, + rgba(var(--background-start-rgb), 1), + rgba(var(--callout-rgb), 0.5) + ); + background-clip: padding-box; + backdrop-filter: blur(24px); + } + + .description div { + align-items: flex-end; + pointer-events: none; + inset: auto 0 0; + padding: 2rem; + height: 200px; + background: linear-gradient( + to bottom, + transparent 0%, + rgb(var(--background-end-rgb)) 40% + ); + z-index: 1; + } +} + +/* Tablet and Smaller Desktop */ +@media (min-width: 701px) and (max-width: 1120px) { + .grid { + grid-template-columns: repeat(2, 50%); + } +} + +@media (prefers-color-scheme: dark) { + .vercelLogo { + filter: invert(1); + } + + .logo { + filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); + } +} + +@keyframes rotate { + from { + transform: rotate(360deg); + } + to { + transform: rotate(0deg); + } +} diff --git a/pocs/fp-libraries/app/page.tsx b/pocs/fp-libraries/app/page.tsx new file mode 100644 index 000000000..31066944d --- /dev/null +++ b/pocs/fp-libraries/app/page.tsx @@ -0,0 +1,107 @@ +import Image from "next/image"; +import styles from "./page.module.css"; + +export default function Home() { + return ( +
+
+

Pokedex

+ + +
+
+

+ Get started by editing  + app/page.tsx +

+ +
+ +
+ Next.js Logo +
+ + +
+ ); +} diff --git a/pocs/fp-libraries/app/purify-ts/page.tsx b/pocs/fp-libraries/app/purify-ts/page.tsx new file mode 100644 index 000000000..a34610b94 --- /dev/null +++ b/pocs/fp-libraries/app/purify-ts/page.tsx @@ -0,0 +1,68 @@ +"use client"; + +import { SyntheticEvent, useRef, useState } from "react"; +import { Move } from "../common/types"; +import "../common/global.css"; +import styles from "../common/page.module.css"; +import { findStrongestMove } from "./utils"; + +export default function Page() { + const inputRef = useRef(null); + const [result, setResult] = useState(); + const [pokemon, setPokemon] = useState(); + + const onClick = async ( + e: SyntheticEvent + ) => { + e.preventDefault(); + if (!inputRef?.current?.value) return; + + const p = await findStrongestMove(inputRef?.current?.value); + if (p.isLeft()) { + console.log("we got an error"); + setResult(null); + setPokemon(""); + } + + if (p.isRight()) { + const extracted = p.extract(); + setResult(extracted); + setPokemon(inputRef?.current?.value); + } + }; + + return ( + <> +
+

Purify Ts Example

+
+
+ + +
+ {result ? ( +
+

Result

+
+
    +
  • + Name: {pokemon} +
  • +
  • + Move name: {result.name.split("-").join(" ")} +
  • +
  • + Power: {result.power} +
  • +
  • + PP: {result.pp} +
  • +
+
+
+ ) : null} + + ); +} diff --git a/pocs/fp-libraries/app/purify-ts/utils.ts b/pocs/fp-libraries/app/purify-ts/utils.ts new file mode 100644 index 000000000..e262e80dd --- /dev/null +++ b/pocs/fp-libraries/app/purify-ts/utils.ts @@ -0,0 +1,70 @@ +import { Either } from "purify-ts"; +import { EitherAsync } from "purify-ts/EitherAsync"; +import { Move, MoveMeta, PokeApiError, Pokemon } from "../common/types"; + +const POKEAPI_BASE = "https://pokeapi.co/api/v2"; +const POKEMON_DOMAIN = "pokemon"; + +export const fetchPokemonData = ( + pokemon: string +): EitherAsync => + EitherAsync(async ({ throwE }) => { + const url = `${POKEAPI_BASE}/${POKEMON_DOMAIN}/${pokemon}`; + try { + const res = await fetch(url); + const json = await res.json(); + return json; + } catch (reason: unknown) { + throwE(new PokeApiError(`Could not find informations for ${pokemon}`)); + } + }); + +export const fetchMove = (url: string): EitherAsync => + EitherAsync(async ({ throwE }) => { + try { + const res = await fetch(url); + const json = res.json(); + return json; + } catch (reason: unknown) { + throwE(new PokeApiError("could not get move")); + } + }); + +export const findStrongest = (moves: Move[]) => + moves.reduce( + (acc, { power, pp, name }) => { + if (power > acc.power) { + return { + power, + pp, + name, + }; + } + + return acc; + }, + { power: 0, pp: 0, name: "" } + ); + +export const findStrongestMove = (search: string) => + // Fetch Pokemon + EitherAsync.fromPromise(() => fetchPokemonData(search)) + // Get all the moves + .map((pokemon) => pokemon.moves) + + // Using chain bebause we are returning another level of Either here, it's the `flatMap` of purify-ts + .chain(async (moves) => { + // Creating an array or URLs + const seq = moves.map((m) => m.move.url); + // Like Promise.all but handles Either + return EitherAsync.all(seq.map((s) => fetchMove(s))); + }) + + // OR + // .map(async (moves) => { + // // Like Promise.all but only returns Right (success) + // return EitherAsync.rights(moves.map((m) => fetchMove(m.move.url))); + // }) + + // Find strongest moves (reduced value) + .map(findStrongest); diff --git a/pocs/fp-libraries/next.config.js b/pocs/fp-libraries/next.config.js new file mode 100644 index 000000000..767719fc4 --- /dev/null +++ b/pocs/fp-libraries/next.config.js @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {} + +module.exports = nextConfig diff --git a/pocs/fp-libraries/package-lock.json b/pocs/fp-libraries/package-lock.json new file mode 100644 index 000000000..4dfdfcf88 --- /dev/null +++ b/pocs/fp-libraries/package-lock.json @@ -0,0 +1,3728 @@ +{ + "name": "poc-fp-libs", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "poc-fp-libs", + "version": "0.1.0", + "dependencies": { + "effect": "^2.0.3", + "next": "14.0.4", + "purify-ts": "^2.0.3", + "react": "^18", + "react-dom": "^18" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "eslint": "^8", + "eslint-config-next": "14.0.4", + "typescript": "^5" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@next/env": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.4.tgz", + "integrity": "sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.4.tgz", + "integrity": "sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.4.tgz", + "integrity": "sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.4.tgz", + "integrity": "sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.4.tgz", + "integrity": "sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.4.tgz", + "integrity": "sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.4.tgz", + "integrity": "sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.4.tgz", + "integrity": "sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.4.tgz", + "integrity": "sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.4.tgz", + "integrity": "sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.4.tgz", + "integrity": "sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz", + "integrity": "sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", + "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.47", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", + "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.18", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", + "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "dev": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.1.tgz", + "integrity": "sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.18.1", + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/typescript-estree": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.1.tgz", + "integrity": "sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.1.tgz", + "integrity": "sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.1.tgz", + "integrity": "sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz", + "integrity": "sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.18.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, + "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" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/effect": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/effect/-/effect-2.0.3.tgz", + "integrity": "sha512-I/XvcbHypegNFWCr/arbfIR6pA+8JpSqv9wS4xOrgXypQMRj8H3wRorTcUiPmcQ0e6Ko67CdI2XZpjx7z0Ev/A==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "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.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "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.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.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.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", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.4.tgz", + "integrity": "sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "14.0.4", + "@rushstack/eslint-patch": "^1.3.3", + "@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.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "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" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/next": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/next/-/next-14.0.4.tgz", + "integrity": "sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==", + "dependencies": { + "@next/env": "14.0.4", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.0.4", + "@next/swc-darwin-x64": "14.0.4", + "@next/swc-linux-arm64-gnu": "14.0.4", + "@next/swc-linux-arm64-musl": "14.0.4", + "@next/swc-linux-x64-gnu": "14.0.4", + "@next/swc-linux-x64-musl": "14.0.4", + "@next/swc-win32-arm64-msvc": "14.0.4", + "@next/swc-win32-ia32-msvc": "14.0.4", + "@next/swc-win32-x64-msvc": "14.0.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/purify-ts": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/purify-ts/-/purify-ts-2.0.3.tgz", + "integrity": "sha512-RiPOlX4L+eggnbEdwGV34t7iRSPK5d37nKPZXSu8G5mTUhxbEjPpThRFuEV4GL/T6zEJQ+ZeiuNoBk61VJvszg==", + "dependencies": { + "@types/json-schema": "7.0.15" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/pocs/fp-libraries/package.json b/pocs/fp-libraries/package.json new file mode 100644 index 000000000..5626da65e --- /dev/null +++ b/pocs/fp-libraries/package.json @@ -0,0 +1,26 @@ +{ + "name": "poc-fp-libs", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "effect": "^2.0.3", + "next": "14.0.4", + "purify-ts": "^2.0.3", + "react": "^18", + "react-dom": "^18" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "eslint": "^8", + "eslint-config-next": "14.0.4", + "typescript": "^5" + } +} diff --git a/pocs/fp-libraries/public/next.svg b/pocs/fp-libraries/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/pocs/fp-libraries/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pocs/fp-libraries/public/vercel.svg b/pocs/fp-libraries/public/vercel.svg new file mode 100644 index 000000000..d2f842227 --- /dev/null +++ b/pocs/fp-libraries/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pocs/fp-libraries/tsconfig.json b/pocs/fp-libraries/tsconfig.json new file mode 100644 index 000000000..204de1d85 --- /dev/null +++ b/pocs/fp-libraries/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "es2015", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} From 1bbd444e9e245cdab83b80fe113908e404382a1a Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 12 Jan 2024 17:45:29 +0100 Subject: [PATCH 002/253] poc: add error handling to examples --- pocs/fp-libraries/app/effect/page.tsx | 33 +++++++++++++++++------- pocs/fp-libraries/app/effect/utils.ts | 2 +- pocs/fp-libraries/app/purify-ts/page.tsx | 16 ++++++++++-- pocs/fp-libraries/app/purify-ts/utils.ts | 3 +-- 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/pocs/fp-libraries/app/effect/page.tsx b/pocs/fp-libraries/app/effect/page.tsx index 7894b85c3..71d0f4e4f 100644 --- a/pocs/fp-libraries/app/effect/page.tsx +++ b/pocs/fp-libraries/app/effect/page.tsx @@ -11,6 +11,7 @@ export default function Page() { const inputRef = useRef(null); const [result, setResult] = useState(); const [pokemon, setPokemon] = useState(); + const [error, setError] = useState(); const onClick = async ( e: SyntheticEvent @@ -18,16 +19,20 @@ export default function Page() { e.preventDefault(); if (!inputRef?.current?.value) return; - Effect.runPromise(findStrongestMoveGen(inputRef.current.value)) - .then((move) => { - setResult(move); - setPokemon(inputRef?.current?.value); - }) - .catch((reason): void => { - console.log(reason); - setResult(null); - setPokemon(""); - }); + Effect.runPromise( + findStrongestMoveGen(inputRef.current.value).pipe( + Effect.catchAll((err) => { + setResult(null); + setPokemon(""); + setError(err.message); + return Effect.fail(err); + }) + ) + ).then((move) => { + setResult(move); + setPokemon(inputRef?.current?.value); + setError(null); + }); }; return ( @@ -41,6 +46,14 @@ export default function Page() { Search + {error ? ( +
+

Error

+
+

{error}

+
+
+ ) : null} {result ? (

Result

diff --git a/pocs/fp-libraries/app/effect/utils.ts b/pocs/fp-libraries/app/effect/utils.ts index 29b787239..7e35fbdd8 100644 --- a/pocs/fp-libraries/app/effect/utils.ts +++ b/pocs/fp-libraries/app/effect/utils.ts @@ -23,7 +23,7 @@ export const fetchMove = (url: string) => const json = await res.json(); return json as Move; }, - catch: (err) => new PokeApiError("could not get move"), + catch: (err) => new PokeApiError(`could not get move: ${err}`), }); export const findStrongest = (moves: Move[]): Move => diff --git a/pocs/fp-libraries/app/purify-ts/page.tsx b/pocs/fp-libraries/app/purify-ts/page.tsx index a34610b94..8f78c9351 100644 --- a/pocs/fp-libraries/app/purify-ts/page.tsx +++ b/pocs/fp-libraries/app/purify-ts/page.tsx @@ -10,6 +10,7 @@ export default function Page() { const inputRef = useRef(null); const [result, setResult] = useState(); const [pokemon, setPokemon] = useState(); + const [error, setError] = useState(); const onClick = async ( e: SyntheticEvent @@ -20,14 +21,17 @@ export default function Page() { const p = await findStrongestMove(inputRef?.current?.value); if (p.isLeft()) { console.log("we got an error"); + const errorExtracted = p.extract(); + setError(errorExtracted.message); setResult(null); setPokemon(""); } if (p.isRight()) { - const extracted = p.extract(); - setResult(extracted); + const valueExtracted = p.extract(); + setResult(valueExtracted); setPokemon(inputRef?.current?.value); + setError(null); } }; @@ -42,6 +46,14 @@ export default function Page() { Search + {error ? ( +
+

Error

+
+

{error}

+
+
+ ) : null} {result ? (

Result

diff --git a/pocs/fp-libraries/app/purify-ts/utils.ts b/pocs/fp-libraries/app/purify-ts/utils.ts index e262e80dd..7835cee6e 100644 --- a/pocs/fp-libraries/app/purify-ts/utils.ts +++ b/pocs/fp-libraries/app/purify-ts/utils.ts @@ -1,6 +1,5 @@ -import { Either } from "purify-ts"; import { EitherAsync } from "purify-ts/EitherAsync"; -import { Move, MoveMeta, PokeApiError, Pokemon } from "../common/types"; +import { Move, PokeApiError, Pokemon } from "../common/types"; const POKEAPI_BASE = "https://pokeapi.co/api/v2"; const POKEMON_DOMAIN = "pokemon"; From bb09b4e325cac5eab18de1f47ac7e2ddc1a88450 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 15 Dec 2023 17:09:37 +0100 Subject: [PATCH 003/253] chore: init sample app with simple ble discovery --- apps/sample/.gitignore | 23 + apps/sample/README.md | 46 + apps/sample/package-lock.json | 17678 +++++++++++++++++++++++++++ apps/sample/package.json | 46 + apps/sample/pnpm-lock.yaml | 10562 ++++++++++++++++ apps/sample/public/favicon.ico | Bin 0 -> 3870 bytes apps/sample/public/index.html | 43 + apps/sample/public/logo192.png | Bin 0 -> 5347 bytes apps/sample/public/logo512.png | Bin 0 -> 9664 bytes apps/sample/public/manifest.json | 25 + apps/sample/public/robots.txt | 3 + apps/sample/src/App.css | 38 + apps/sample/src/App.test.tsx | 9 + apps/sample/src/App.tsx | 75 + apps/sample/src/index.css | 13 + apps/sample/src/index.tsx | 19 + apps/sample/src/logo.svg | 1 + apps/sample/src/react-app-env.d.ts | 1 + apps/sample/src/reportWebVitals.ts | 15 + apps/sample/src/setupTests.ts | 5 + apps/sample/tsconfig.json | 26 + 21 files changed, 28628 insertions(+) create mode 100644 apps/sample/.gitignore create mode 100644 apps/sample/README.md create mode 100644 apps/sample/package-lock.json create mode 100644 apps/sample/package.json create mode 100644 apps/sample/pnpm-lock.yaml create mode 100644 apps/sample/public/favicon.ico create mode 100644 apps/sample/public/index.html create mode 100644 apps/sample/public/logo192.png create mode 100644 apps/sample/public/logo512.png create mode 100644 apps/sample/public/manifest.json create mode 100644 apps/sample/public/robots.txt create mode 100644 apps/sample/src/App.css create mode 100644 apps/sample/src/App.test.tsx create mode 100644 apps/sample/src/App.tsx create mode 100644 apps/sample/src/index.css create mode 100644 apps/sample/src/index.tsx create mode 100644 apps/sample/src/logo.svg create mode 100644 apps/sample/src/react-app-env.d.ts create mode 100644 apps/sample/src/reportWebVitals.ts create mode 100644 apps/sample/src/setupTests.ts create mode 100644 apps/sample/tsconfig.json diff --git a/apps/sample/.gitignore b/apps/sample/.gitignore new file mode 100644 index 000000000..4d29575de --- /dev/null +++ b/apps/sample/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/apps/sample/README.md b/apps/sample/README.md new file mode 100644 index 000000000..b87cb0044 --- /dev/null +++ b/apps/sample/README.md @@ -0,0 +1,46 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.\ +You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/apps/sample/package-lock.json b/apps/sample/package-lock.json new file mode 100644 index 000000000..fc0ceed0f --- /dev/null +++ b/apps/sample/package-lock.json @@ -0,0 +1,17678 @@ +{ + "name": "sample", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "sample", + "version": "0.1.0", + "dependencies": { + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.68", + "@types/react": "^18.2.45", + "@types/react-dom": "^18.2.17", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-scripts": "5.0.1", + "typescript": "^4.9.5", + "web-vitals": "^2.1.4" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", + "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", + "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.6", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", + "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", + "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", + "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", + "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", + "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.6.tgz", + "integrity": "sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", + "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", + "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", + "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", + "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", + "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz", + "integrity": "sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", + "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", + "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.6.tgz", + "integrity": "sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==", + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.6.tgz", + "integrity": "sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.4", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.5", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", + "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-react-display-name": "^7.23.3", + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "node_modules/@babel/runtime": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", + "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "node_modules/@csstools/normalize.css": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", + "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", + "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", + "dependencies": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz", + "integrity": "sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@testing-library/dom": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", + "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "peer": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", + "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/react/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/react/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/react/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@testing-library/react/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.9.tgz", + "integrity": "sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/node": { + "version": "16.18.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.68.tgz", + "integrity": "sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==" + }, + "node_modules/@types/node-forge": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", + "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==" + }, + "node_modules/@types/qs": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "node_modules/@types/react": { + "version": "18.2.45", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz", + "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.17", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz", + "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", + "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "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" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", + "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", + "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.4", + "core-js-compat": "^3.33.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", + "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001570", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", + "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-js": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", + "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", + "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.34.0.tgz", + "integrity": "sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, + "node_modules/cssdb": { + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.9.1.tgz", + "integrity": "sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ] + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.613", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz", + "integrity": "sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "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.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "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.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.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.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", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.4.tgz", + "integrity": "sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", + "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "safe-array-concat": "^1.0.0" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "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" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/postcss-svgo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/react-dev-utils/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "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" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", + "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/tailwindcss": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", + "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", + "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/apps/sample/package.json b/apps/sample/package.json new file mode 100644 index 000000000..5519db774 --- /dev/null +++ b/apps/sample/package.json @@ -0,0 +1,46 @@ +{ + "name": "@ledgerhq/device-sdk-sample", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.68", + "@types/react": "^18.2.45", + "@types/react-dom": "^18.2.17", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-scripts": "5.0.1", + "typescript": "^4.9.5", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@types/web-bluetooth": "^0.0.20" + } +} diff --git a/apps/sample/pnpm-lock.yaml b/apps/sample/pnpm-lock.yaml new file mode 100644 index 000000000..eb09d37f5 --- /dev/null +++ b/apps/sample/pnpm-lock.yaml @@ -0,0 +1,10562 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@testing-library/jest-dom': + specifier: ^5.17.0 + version: 5.17.0 + '@testing-library/react': + specifier: ^13.4.0 + version: 13.4.0(react-dom@18.2.0)(react@18.2.0) + '@testing-library/user-event': + specifier: ^13.5.0 + version: 13.5.0(@testing-library/dom@9.3.3) + '@types/jest': + specifier: ^27.5.2 + version: 27.5.2 + '@types/node': + specifier: ^16.18.68 + version: 16.18.68 + '@types/react': + specifier: ^18.2.45 + version: 18.2.45 + '@types/react-dom': + specifier: ^18.2.17 + version: 18.2.17 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + react-scripts: + specifier: 5.0.1 + version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(react@18.2.0)(typescript@4.9.5) + typescript: + specifier: ^4.9.5 + version: 4.9.5 + web-vitals: + specifier: ^2.1.4 + version: 2.1.4 + +devDependencies: + '@types/web-bluetooth': + specifier: ^0.0.20 + version: 0.0.20 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: false + + /@adobe/css-tools@4.3.2: + resolution: {integrity: sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==} + dev: false + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: false + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + dev: false + + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.12.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: false + + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: false + + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/core@7.23.6: + resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helpers': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.55.0): + resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.55.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + dev: false + + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + dev: false + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.2 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: false + + /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: false + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.6): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: false + + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.6): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.6): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: false + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: false + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + dev: false + + /@babel/helpers@7.23.6: + resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: false + + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-proposal-decorators@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.6): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + dev: false + + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.23.6): + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + dev: false + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.6): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: false + + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + dev: false + + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.6): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.6): + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/types': 7.23.6 + dev: false + + /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + dev: false + + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-runtime@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/preset-env@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.6) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.6) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) + core-js-compat: 3.34.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.6): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.6 + esutils: 2.0.3 + dev: false + + /@babel/preset-react@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.6) + dev: false + + /@babel/preset-typescript@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) + dev: false + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: false + + /@babel/runtime@7.23.6: + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + dev: false + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + dev: false + + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: false + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: false + + /@csstools/normalize.css@12.0.0: + resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} + dev: false + + /@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.32): + resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /@csstools/postcss-color-function@1.1.1(postcss@8.4.32): + resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.32): + resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.32): + resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /@csstools/postcss-nested-calc@1.0.0(postcss@8.4.32): + resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.32): + resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.32): + resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.32): + resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.32): + resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} + engines: {node: ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-unset-value@1.0.2(postcss@8.4.32): + resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + dev: false + + /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.13): + resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.10 + dependencies: + postcss-selector-parser: 6.0.13 + dev: false + + /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.55.0 + eslint-visitor-keys: 3.4.3 + dev: false + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: false + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@eslint/js@8.55.0: + resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: false + + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: false + + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: false + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: false + + /@jest/console@27.5.1: + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + chalk: 4.1.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + dev: false + + /@jest/console@28.1.3: + resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 16.18.68 + chalk: 4.1.2 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + slash: 3.0.0 + dev: false + + /@jest/core@27.5.1: + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 27.5.1 + jest-config: 27.5.1 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 + micromatch: 4.0.5 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: false + + /@jest/environment@27.5.1: + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + jest-mock: 27.5.1 + dev: false + + /@jest/fake-timers@27.5.1: + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 16.18.68 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 + dev: false + + /@jest/globals@27.5.1: + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 + dev: false + + /@jest/reporters@27.5.1: + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + jest-haste-map: 27.5.1 + jest-resolve: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 8.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@jest/schemas@28.1.3: + resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@sinclair/typebox': 0.24.51 + dev: false + + /@jest/source-map@27.5.1: + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.11 + source-map: 0.6.1 + dev: false + + /@jest/test-result@27.5.1: + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/types': 27.5.1 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: false + + /@jest/test-result@28.1.3: + resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/console': 28.1.3 + '@jest/types': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: false + + /@jest/test-sequencer@27.5.1: + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-runtime: 27.5.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@jest/transform@27.5.1: + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.23.6 + '@jest/types': 27.5.1 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.9.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@jest/types@27.5.1: + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 16.18.68 + '@types/yargs': 16.0.9 + chalk: 4.1.2 + dev: false + + /@jest/types@28.1.3: + resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 16.18.68 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + dev: false + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + dev: false + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + dev: false + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: false + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + + /@leichtgewicht/ip-codec@2.0.4: + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + dev: false + + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + dependencies: + eslint-scope: 5.1.1 + dev: false + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: false + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: false + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: false + + /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0): + resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <5.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.34.0 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.4.0 + loader-utils: 2.0.4 + react-refresh: 0.11.0 + schema-utils: 3.3.0 + source-map: 0.7.4 + webpack: 5.89.0 + webpack-dev-server: 4.15.1(webpack@5.89.0) + dev: false + + /@rollup/plugin-babel@5.3.1(@babel/core@7.23.6)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: false + + /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 2.79.1 + dev: false + + /@rollup/plugin-replace@2.4.2(rollup@2.79.1): + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + magic-string: 0.25.9 + rollup: 2.79.1 + dev: false + + /@rollup/pluginutils@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: false + + /@rushstack/eslint-patch@1.6.1: + resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} + dev: false + + /@sinclair/typebox@0.24.51: + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + dev: false + + /@sinonjs/commons@1.8.6: + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + dependencies: + type-detect: 4.0.8 + dev: false + + /@sinonjs/fake-timers@8.1.0: + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + dependencies: + '@sinonjs/commons': 1.8.6 + dev: false + + /@surma/rollup-plugin-off-main-thread@2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + dependencies: + ejs: 3.1.9 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.10 + dev: false + + /@svgr/babel-plugin-add-jsx-attribute@5.4.0: + resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-remove-jsx-attribute@5.4.0: + resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1: + resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1: + resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-svg-dynamic-title@5.4.0: + resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-svg-em-dimensions@5.4.0: + resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-transform-react-native-svg@5.4.0: + resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-transform-svg-component@5.5.0: + resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-preset@5.5.0: + resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} + engines: {node: '>=10'} + dependencies: + '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 + '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 + '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 + '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 + '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 + '@svgr/babel-plugin-transform-svg-component': 5.5.0 + dev: false + + /@svgr/core@5.5.0: + resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} + engines: {node: '>=10'} + dependencies: + '@svgr/plugin-jsx': 5.5.0 + camelcase: 6.3.0 + cosmiconfig: 7.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@svgr/hast-util-to-babel-ast@5.5.0: + resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} + engines: {node: '>=10'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@svgr/plugin-jsx@5.5.0: + resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.23.6 + '@svgr/babel-preset': 5.5.0 + '@svgr/hast-util-to-babel-ast': 5.5.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@svgr/plugin-svgo@5.5.0: + resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} + engines: {node: '>=10'} + dependencies: + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + svgo: 1.3.2 + dev: false + + /@svgr/webpack@5.5.0: + resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.23.6) + '@babel/preset-env': 7.23.6(@babel/core@7.23.6) + '@babel/preset-react': 7.23.3(@babel/core@7.23.6) + '@svgr/core': 5.5.0 + '@svgr/plugin-jsx': 5.5.0 + '@svgr/plugin-svgo': 5.5.0 + loader-utils: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@testing-library/dom@8.20.1: + resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} + engines: {node: '>=12'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/runtime': 7.23.6 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: false + + /@testing-library/dom@9.3.3: + resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} + engines: {node: '>=14'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/runtime': 7.23.6 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: false + + /@testing-library/jest-dom@5.17.0: + resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} + engines: {node: '>=8', npm: '>=6', yarn: '>=1'} + dependencies: + '@adobe/css-tools': 4.3.2 + '@babel/runtime': 7.23.6 + '@types/testing-library__jest-dom': 5.14.9 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.5.16 + lodash: 4.17.21 + redent: 3.0.0 + dev: false + + /@testing-library/react@13.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} + engines: {node: '>=12'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@babel/runtime': 7.23.6 + '@testing-library/dom': 8.20.1 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@testing-library/user-event@13.5.0(@testing-library/dom@9.3.3): + resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + dependencies: + '@babel/runtime': 7.23.6 + '@testing-library/dom': 9.3.3 + dev: false + + /@tootallnate/once@1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: false + + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: false + + /@types/aria-query@5.0.4: + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + dev: false + + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + dependencies: + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + '@types/babel__generator': 7.6.7 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.4 + dev: false + + /@types/babel__generator@7.6.7: + resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + dependencies: + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + dev: false + + /@types/babel__traverse@7.20.4: + resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 16.18.68 + dev: false + + /@types/bonjour@3.5.13: + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + dependencies: + '@types/node': 16.18.68 + dev: false + + /@types/connect-history-api-fallback@1.5.4: + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + dependencies: + '@types/express-serve-static-core': 4.17.41 + '@types/node': 16.18.68 + dev: false + + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 16.18.68 + dev: false + + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + dependencies: + '@types/eslint': 8.44.9 + '@types/estree': 1.0.5 + dev: false + + /@types/eslint@8.44.9: + resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: false + + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: false + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: false + + /@types/express-serve-static-core@4.17.41: + resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} + dependencies: + '@types/node': 16.18.68 + '@types/qs': 6.9.10 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: false + + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.17.41 + '@types/qs': 6.9.10 + '@types/serve-static': 1.15.5 + dev: false + + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + dependencies: + '@types/node': 16.18.68 + dev: false + + /@types/html-minifier-terser@6.1.0: + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + dev: false + + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: false + + /@types/http-proxy@1.17.14: + resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} + dependencies: + '@types/node': 16.18.68 + dev: false + + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: false + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: false + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: false + + /@types/jest@27.5.2: + resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} + dependencies: + jest-matcher-utils: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: false + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: false + + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: false + + /@types/mime@3.0.4: + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + dev: false + + /@types/node-forge@1.3.10: + resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} + dependencies: + '@types/node': 16.18.68 + dev: false + + /@types/node@16.18.68: + resolution: {integrity: sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==} + dev: false + + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: false + + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + dev: false + + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + dev: false + + /@types/q@1.5.8: + resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} + dev: false + + /@types/qs@6.9.10: + resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} + dev: false + + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: false + + /@types/react-dom@18.2.17: + resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} + dependencies: + '@types/react': 18.2.45 + dev: false + + /@types/react@18.2.45: + resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} + dependencies: + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 + csstype: 3.1.3 + dev: false + + /@types/resolve@1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 16.18.68 + dev: false + + /@types/retry@0.12.0: + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + dev: false + + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + dev: false + + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + dev: false + + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 16.18.68 + dev: false + + /@types/serve-index@1.9.4: + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + dependencies: + '@types/express': 4.17.21 + dev: false + + /@types/serve-static@1.15.5: + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/mime': 3.0.4 + '@types/node': 16.18.68 + dev: false + + /@types/sockjs@0.3.36: + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + dependencies: + '@types/node': 16.18.68 + dev: false + + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: false + + /@types/testing-library__jest-dom@5.14.9: + resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} + dependencies: + '@types/jest': 27.5.2 + dev: false + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + dev: false + + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: true + + /@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + dependencies: + '@types/node': 16.18.68 + dev: false + + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: false + + /@types/yargs@16.0.9: + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: false + + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: false + + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.55.0)(typescript@4.9.5): + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.55.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) + debug: 4.3.4 + eslint: 8.55.0 + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/experimental-utils@5.62.0(eslint@8.55.0)(typescript@4.9.5): + resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) + eslint: 8.55.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@4.9.5): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + debug: 4.3.4 + eslint: 8.55.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: false + + /@typescript-eslint/type-utils@5.62.0(eslint@8.55.0)(typescript@4.9.5): + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) + debug: 4.3.4 + eslint: 8.55.0 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/utils@5.62.0(eslint@8.55.0)(typescript@4.9.5): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + eslint: 8.55.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: false + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: false + + /@webassemblyjs/ast@1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: false + + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: false + + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: false + + /@webassemblyjs/helper-buffer@1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + dev: false + + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: false + + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: false + + /@webassemblyjs/helper-wasm-section@1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + dev: false + + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: false + + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: false + + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: false + + /@webassemblyjs/wasm-edit@1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 + dev: false + + /@webassemblyjs/wasm-gen@1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: false + + /@webassemblyjs/wasm-opt@1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + dev: false + + /@webassemblyjs/wasm-parser@1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: false + + /@webassemblyjs/wast-printer@1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@xtuc/long': 4.2.2 + dev: false + + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: false + + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: false + + /abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + dev: false + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /acorn-globals@6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + dev: false + + /acorn-import-assertions@1.9.0(acorn@8.11.2): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.11.2 + dev: false + + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + dev: false + + /acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: false + + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + dev: false + + /adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + dependencies: + loader-utils: 2.0.4 + regex-parser: 2.2.11 + dev: false + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /ajv-formats@2.1.1(ajv@8.12.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: false + + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: false + + /ajv-keywords@5.1.0(ajv@8.12.0): + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + dependencies: + ajv: 8.12.0 + fast-deep-equal: 3.1.3 + dev: false + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: false + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: false + + /ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: false + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: false + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: false + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: false + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: false + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: false + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: false + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: false + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: false + + /aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + dependencies: + deep-equal: 2.2.3 + dev: false + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: false + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: false + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + + /array-flatten@2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + dev: false + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: false + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: false + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: false + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: false + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: false + + /array.prototype.reduce@1.0.6: + resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: false + + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: false + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: false + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: false + + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: false + + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: false + + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: false + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: false + + /autoprefixer@10.4.16(postcss@8.4.32): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001570 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: false + + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: false + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: false + + /babel-jest@27.5.1(@babel/core@7.23.6): + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.23.6 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.5.1(@babel/core@7.23.6) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-loader@8.3.0(@babel/core@7.23.6)(webpack@5.89.0): + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.23.6 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.89.0 + dev: false + + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.22.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-jest-hoist@27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.4 + dev: false + + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.23.6 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + dev: false + + /babel-plugin-named-asset-import@0.3.8(@babel/core@7.23.6): + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 + dependencies: + '@babel/core': 7.23.6 + dev: false + + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.6): + resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.6): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + core-js-compat: 3.34.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.6): + resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-react-remove-prop-types@0.4.24: + resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} + dev: false + + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + dev: false + + /babel-preset-jest@27.5.1(@babel/core@7.23.6): + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + dev: false + + /babel-preset-react-app@10.0.1: + resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-decorators': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.6) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.6) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-runtime': 7.23.6(@babel/core@7.23.6) + '@babel/preset-env': 7.23.6(@babel/core@7.23.6) + '@babel/preset-react': 7.23.3(@babel/core@7.23.6) + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/runtime': 7.23.6 + babel-plugin-macros: 3.1.0 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + transitivePeerDependencies: + - supports-color + dev: false + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: false + + /batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + dev: false + + /bfj@7.1.0: + resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} + engines: {node: '>= 8.0.0'} + dependencies: + bluebird: 3.7.2 + check-types: 11.2.3 + hoopy: 0.1.4 + jsonpath: 1.1.1 + tryer: 1.0.1 + dev: false + + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: false + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false + + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: false + + /body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /bonjour-service@1.1.1: + resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} + dependencies: + array-flatten: 2.1.2 + dns-equal: 1.0.0 + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + dev: false + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: false + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: false + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: false + + /browser-process-hrtime@1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + dev: false + + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001570 + electron-to-chromium: 1.4.613 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: false + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: false + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: false + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: false + + /bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: false + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: false + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: false + + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.2 + dev: false + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: false + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: false + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: false + + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001570 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: false + + /caniuse-lite@1.0.30001570: + resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + dev: false + + /case-sensitive-paths-webpack-plugin@2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} + engines: {node: '>=4'} + dev: false + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: false + + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: false + + /char-regex@2.0.1: + resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} + engines: {node: '>=12.20'} + dev: false + + /check-types@11.2.3: + resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} + dev: false + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: false + + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: false + + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + dev: false + + /clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + dependencies: + source-map: 0.6.1 + dev: false + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: false + + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: false + + /coa@2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} + engines: {node: '>= 4.0'} + dependencies: + '@types/q': 1.5.8 + chalk: 2.4.2 + q: 1.5.1 + dev: false + + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: false + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: false + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: false + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: false + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: false + + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: false + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: false + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: false + + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: false + + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: false + + /common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: false + + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: false + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: false + + /confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: false + + /connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + dev: false + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: false + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: false + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /core-js-compat@3.34.0: + resolution: {integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==} + dependencies: + browserslist: 4.22.2 + dev: false + + /core-js-pure@3.34.0: + resolution: {integrity: sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==} + requiresBuild: true + dev: false + + /core-js@3.34.0: + resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==} + requiresBuild: true + dev: false + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + + /cosmiconfig@6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: false + + /crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: false + + /css-blank-pseudo@3.0.3(postcss@8.4.32): + resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /css-declaration-sorter@6.4.1(postcss@8.4.32): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.32 + dev: false + + /css-has-pseudo@3.0.4(postcss@8.4.32): + resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /css-loader@6.8.1(webpack@5.89.0): + resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.32) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.32) + postcss-modules-scope: 3.0.0(postcss@8.4.32) + postcss-modules-values: 4.0.0(postcss@8.4.32) + postcss-value-parser: 4.2.0 + semver: 7.5.4 + webpack: 5.89.0 + dev: false + + /css-minimizer-webpack-plugin@3.4.1(webpack@5.89.0): + resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@parcel/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + dependencies: + cssnano: 5.1.15(postcss@8.4.32) + jest-worker: 27.5.1 + postcss: 8.4.32 + schema-utils: 4.2.0 + serialize-javascript: 6.0.1 + source-map: 0.6.1 + webpack: 5.89.0 + dev: false + + /css-prefers-color-scheme@6.0.3(postcss@8.4.32): + resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + dev: false + + /css-select-base-adapter@0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} + dev: false + + /css-select@2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} + dependencies: + boolbase: 1.0.0 + css-what: 3.4.2 + domutils: 1.7.0 + nth-check: 1.0.2 + dev: false + + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: false + + /css-tree@1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.4 + source-map: 0.6.1 + dev: false + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: false + + /css-what@3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} + engines: {node: '>= 6'} + dev: false + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + + /css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: false + + /cssdb@7.9.1: + resolution: {integrity: sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==} + dev: false + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /cssnano-preset-default@5.2.14(postcss@8.4.32): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.32) + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-calc: 8.2.4(postcss@8.4.32) + postcss-colormin: 5.3.1(postcss@8.4.32) + postcss-convert-values: 5.1.3(postcss@8.4.32) + postcss-discard-comments: 5.1.2(postcss@8.4.32) + postcss-discard-duplicates: 5.1.0(postcss@8.4.32) + postcss-discard-empty: 5.1.1(postcss@8.4.32) + postcss-discard-overridden: 5.1.0(postcss@8.4.32) + postcss-merge-longhand: 5.1.7(postcss@8.4.32) + postcss-merge-rules: 5.1.4(postcss@8.4.32) + postcss-minify-font-values: 5.1.0(postcss@8.4.32) + postcss-minify-gradients: 5.1.1(postcss@8.4.32) + postcss-minify-params: 5.1.4(postcss@8.4.32) + postcss-minify-selectors: 5.2.1(postcss@8.4.32) + postcss-normalize-charset: 5.1.0(postcss@8.4.32) + postcss-normalize-display-values: 5.1.0(postcss@8.4.32) + postcss-normalize-positions: 5.1.1(postcss@8.4.32) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.32) + postcss-normalize-string: 5.1.0(postcss@8.4.32) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.32) + postcss-normalize-unicode: 5.1.1(postcss@8.4.32) + postcss-normalize-url: 5.1.0(postcss@8.4.32) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.32) + postcss-ordered-values: 5.1.3(postcss@8.4.32) + postcss-reduce-initial: 5.1.2(postcss@8.4.32) + postcss-reduce-transforms: 5.1.0(postcss@8.4.32) + postcss-svgo: 5.1.0(postcss@8.4.32) + postcss-unique-selectors: 5.1.1(postcss@8.4.32) + dev: false + + /cssnano-utils@3.1.0(postcss@8.4.32): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /cssnano@5.1.15(postcss@8.4.32): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.32) + lilconfig: 2.1.0 + postcss: 8.4.32 + yaml: 1.10.2 + dev: false + + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: false + + /cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: false + + /cssom@0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + dev: false + + /cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + dev: false + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: false + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: false + + /data-urls@2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + dev: false + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: false + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + + /decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: false + + /dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: false + + /deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.2 + is-arguments: 1.1.1 + is-array-buffer: 3.0.2 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: false + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: false + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: false + + /default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + dependencies: + execa: 5.1.1 + dev: false + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: false + + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: false + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: false + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: false + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: false + + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false + + /detect-port-alt@1.1.6: + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} + hasBin: true + dependencies: + address: 1.2.2 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + dev: false + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: false + + /diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: false + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: false + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: false + + /dns-equal@1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + dev: false + + /dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': 2.0.4 + dev: false + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: false + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: false + + /dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dev: false + + /dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + dependencies: + utila: 0.4.0 + dev: false + + /dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + dev: false + + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: false + + /domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: false + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: false + + /domexception@2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead + dependencies: + webidl-conversions: 5.0.0 + dev: false + + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: false + + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: false + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: false + + /dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dev: false + + /dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + dev: false + + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: false + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: false + + /electron-to-chromium@1.4.613: + resolution: {integrity: sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==} + dev: false + + /emittery@0.10.2: + resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} + engines: {node: '>=12'} + dev: false + + /emittery@0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: false + + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: false + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: false + + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: false + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: false + + /error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + dev: false + + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + 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.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + 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.13 + dev: false + + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: false + + /es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.2 + is-set: 2.0.2 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: false + + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: false + + /es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + dev: false + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + dev: false + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: false + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: false + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: false + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: false + + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: false + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: false + + /escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + dev: false + + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: false + + /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(jest@27.5.1)(typescript@4.9.5): + resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} + engines: {node: '>=14.0.0'} + peerDependencies: + eslint: ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.55.0) + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.55.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.55.0)(typescript@4.9.5) + babel-preset-react-app: 10.0.1 + confusing-browser-globals: 1.0.11 + eslint: 8.55.0 + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.55.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.55.0)(jest@27.5.1)(typescript@4.9.5) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.55.0) + eslint-plugin-react: 7.33.2(eslint@8.55.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.55.0) + eslint-plugin-testing-library: 5.11.1(eslint@8.55.0)(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - jest + - supports-color + dev: false + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.55.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.55.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0): + resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@babel/plugin-syntax-flow': ^7.14.5 + '@babel/plugin-transform-react-jsx': ^7.14.9 + eslint: ^8.1.0 + dependencies: + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + eslint: 8.55.0 + lodash: 4.17.21 + string-natural-compare: 3.0.1 + dev: false + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.55.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.55.0)(typescript@4.9.5) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.55.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.55.0)(jest@27.5.1)(typescript@4.9.5): + resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.55.0)(typescript@4.9.5) + '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) + eslint: 8.55.0 + jest: 27.5.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.55.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.6 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.15 + eslint: 8.55.0 + hasown: 2.0.0 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + dev: false + + /eslint-plugin-react-hooks@4.6.0(eslint@8.55.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.55.0 + dev: false + + /eslint-plugin-react@7.33.2(eslint@8.55.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.55.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: false + + /eslint-plugin-testing-library@5.11.1(eslint@8.55.0)(typescript@4.9.5): + resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) + eslint: 8.55.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: false + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: false + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: false + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /eslint-webpack-plugin@3.2.0(eslint@8.55.0)(webpack@5.89.0): + resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + webpack: ^5.0.0 + dependencies: + '@types/eslint': 8.44.9 + eslint: 8.55.0 + jest-worker: 28.1.3 + micromatch: 4.0.5 + normalize-path: 3.0.0 + schema-utils: 4.2.0 + webpack: 5.89.0 + dev: false + + /eslint@8.55.0: + resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.55.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + dev: false + + /esprima@1.2.2: + resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: false + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: false + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: false + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: false + + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: false + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: false + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: false + + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: false + + /expect@27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-get-type: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + dev: false + + /express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: false + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: false + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: false + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: false + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: false + + /faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: 0.7.4 + dev: false + + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: false + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: false + + /file-loader@6.2.0(webpack@5.89.0): + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.89.0 + dev: false + + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: false + + /filesize@8.0.7: + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} + dev: false + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: false + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: false + + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: false + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: false + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: false + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: false + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: false + + /follow-redirects@1.15.3: + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: false + + /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.55.0)(typescript@4.9.5)(webpack@5.89.0): + resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@babel/code-frame': 7.23.5 + '@types/json-schema': 7.0.15 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 6.0.0 + deepmerge: 4.3.1 + eslint: 8.55.0 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.5.3 + minimatch: 3.1.2 + schema-utils: 2.7.0 + semver: 7.5.4 + tapable: 1.1.3 + typescript: 4.9.5 + webpack: 5.89.0 + dev: false + + /form-data@3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: false + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + + /fs-monkey@1.0.5: + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} + dev: false + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: false + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: false + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: false + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: false + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: false + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: false + + /get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: false + + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: false + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: false + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: false + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: false + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: false + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: false + + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: false + + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: false + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: false + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: false + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: false + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: false + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: false + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: false + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: false + + /gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: false + + /handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: false + + /harmony-reflect@1.6.2: + resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} + dev: false + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: false + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: false + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: false + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + dev: false + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: false + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: false + + /hoopy@0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} + engines: {node: '>= 6.0.0'} + dev: false + + /hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.8 + wbuf: 1.7.3 + dev: false + + /html-encoding-sniffer@2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + dependencies: + whatwg-encoding: 1.0.5 + dev: false + + /html-entities@2.4.0: + resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} + dev: false + + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: false + + /html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.26.0 + dev: false + + /html-webpack-plugin@5.5.4(webpack@5.89.0): + resolution: {integrity: sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==} + engines: {node: '>=10.13.0'} + peerDependencies: + webpack: ^5.20.0 + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + webpack: 5.89.0 + dev: false + + /htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + dev: false + + /http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: false + + /http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: false + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + dev: false + + /http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /http-proxy-middleware@2.0.6(@types/express@4.17.21): + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + dependencies: + '@types/express': 4.17.21 + '@types/http-proxy': 1.17.14 + http-proxy: 1.18.1 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.5 + transitivePeerDependencies: + - debug + dev: false + + /http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.3 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + dev: false + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: false + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /icss-utils@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + dev: false + + /idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + dev: false + + /identity-obj-proxy@3.0.0: + resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} + engines: {node: '>=4'} + dependencies: + harmony-reflect: 1.6.2 + dev: false + + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + dev: false + + /immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: false + + /import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: false + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: false + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: false + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: false + + /inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + dev: false + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: false + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: false + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + engines: {node: '>= 10'} + dev: false + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: false + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: false + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: false + + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: false + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: false + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: false + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: false + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: false + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: false + + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.5 + dev: false + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: false + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: false + + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: false + + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: false + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: false + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: false + + /is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: false + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: false + + /is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: false + + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: false + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: false + + /is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: false + + /is-root@2.1.0: + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} + dev: false + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: false + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: false + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: false + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + dev: false + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: false + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: false + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: false + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: false + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: false + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: false + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: false + + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: false + + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.23.6 + '@babel/parser': 7.23.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: false + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: false + + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: false + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: false + + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: false + + /jest-changed-files@27.5.1: + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + execa: 5.1.1 + throat: 6.0.2 + dev: false + + /jest-circus@27.5.1: + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-cli@27.5.1: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.1.0 + jest-config: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + prompts: 2.4.2 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: false + + /jest-config@27.5.1: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@jest/test-sequencer': 27.5.1 + '@jest/types': 27.5.1 + babel-jest: 27.5.1(@babel/core@7.23.6) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-get-type: 27.5.1 + jest-jasmine2: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runner: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 27.5.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: false + + /jest-diff@27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-docblock@27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + detect-newline: 3.1.0 + dev: false + + /jest-each@27.5.1: + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + jest-get-type: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-environment-jsdom@27.5.1: + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + jest-mock: 27.5.1 + jest-util: 27.5.1 + jsdom: 16.7.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: false + + /jest-environment-node@27.5.1: + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + jest-mock: 27.5.1 + jest-util: 27.5.1 + dev: false + + /jest-get-type@27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: false + + /jest-haste-map@27.5.1: + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/graceful-fs': 4.1.9 + '@types/node': 16.18.68 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 27.5.1 + jest-serializer: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /jest-jasmine2@27.5.1: + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + chalk: 4.1.2 + co: 4.6.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-leak-detector@27.5.1: + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-matcher-utils@27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-message-util@27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 27.5.1 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: false + + /jest-message-util@28.1.3: + resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 28.1.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 28.1.3 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: false + + /jest-mock@27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + dev: false + + /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 27.5.1 + dev: false + + /jest-regex-util@27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: false + + /jest-regex-util@28.0.2: + resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: false + + /jest-resolve-dependencies@27.5.1: + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-regex-util: 27.5.1 + jest-snapshot: 27.5.1 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-resolve@27.5.1: + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) + jest-util: 27.5.1 + jest-validate: 27.5.1 + resolve: 1.22.8 + resolve.exports: 1.1.1 + slash: 3.0.0 + dev: false + + /jest-runner@27.5.1: + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + chalk: 4.1.2 + emittery: 0.8.1 + graceful-fs: 4.2.11 + jest-docblock: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-haste-map: 27.5.1 + jest-leak-detector: 27.5.1 + jest-message-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runtime: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + source-map-support: 0.5.21 + throat: 6.0.2 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: false + + /jest-runtime@27.5.1: + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/globals': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + execa: 5.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-serializer@27.5.1: + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/node': 16.18.68 + graceful-fs: 4.2.11 + dev: false + + /jest-snapshot@27.5.1: + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.23.6 + '@babel/generator': 7.23.6 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__traverse': 7.20.4 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + chalk: 4.1.2 + expect: 27.5.1 + graceful-fs: 4.2.11 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + jest-haste-map: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + natural-compare: 1.4.0 + pretty-format: 27.5.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-util@27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: false + + /jest-util@28.1.3: + resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 16.18.68 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: false + + /jest-validate@27.5.1: + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 27.5.1 + leven: 3.1.0 + pretty-format: 27.5.1 + dev: false + + /jest-watch-typeahead@1.1.0(jest@27.5.1): + resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + jest: ^27.0.0 || ^28.0.0 + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest: 27.5.1 + jest-regex-util: 28.0.2 + jest-watcher: 28.1.3 + slash: 4.0.0 + string-length: 5.0.1 + strip-ansi: 7.1.0 + dev: false + + /jest-watcher@27.5.1: + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.68 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest-util: 27.5.1 + string-length: 4.0.2 + dev: false + + /jest-watcher@28.1.3: + resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 16.18.68 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.10.2 + jest-util: 28.1.3 + string-length: 4.0.2 + dev: false + + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 16.18.68 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: false + + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 16.18.68 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: false + + /jest-worker@28.1.3: + resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@types/node': 16.18.68 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: false + + /jest@27.5.1: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + import-local: 3.1.0 + jest-cli: 27.5.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: false + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: false + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: false + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: false + + /jsdom@16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.11.2 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.4.3 + domexception: 2.0.1 + escodegen: 2.1.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.9 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: false + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: false + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: false + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: false + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: false + + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: false + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: false + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: false + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /jsonpath@1.1.1: + resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} + dependencies: + esprima: 1.2.2 + static-eval: 2.0.2 + underscore: 1.12.1 + dev: false + + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: false + + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.1.7 + dev: false + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: false + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: false + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: false + + /klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + dev: false + + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: false + + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + dependencies: + language-subtag-registry: 0.3.22 + dev: false + + /launch-editor@2.6.1: + resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} + dependencies: + picocolors: 1.0.0 + shell-quote: 1.8.1 + dev: false + + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: false + + /levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: false + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: false + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: false + + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + dev: false + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: false + + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: false + + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: false + + /loader-utils@3.2.1: + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} + dev: false + + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: false + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: false + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: false + + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: false + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: false + + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: false + + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: false + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.2 + dev: false + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: false + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: false + + /lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + dev: false + + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: false + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: false + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: false + + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: false + + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: false + + /mdn-data@2.0.4: + resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} + dev: false + + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.5 + dev: false + + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: false + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: false + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: false + + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: false + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: false + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: false + + /mini-css-extract-plugin@2.7.6(webpack@5.89.0): + resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + schema-utils: 4.2.0 + webpack: 5.89.0 + dev: false + + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: false + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: false + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: false + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + dependencies: + dns-packet: 5.6.1 + thunky: 1.1.0 + dev: false + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: false + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: false + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: false + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: false + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + dev: false + + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: false + + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: false + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: false + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: false + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: false + + /nth-check@1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + dependencies: + boolbase: 1.0.0 + dev: false + + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: false + + /nwsapi@2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + dev: false + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: false + + /object-is@1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + dev: false + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: false + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: false + + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: false + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: false + + /object.getownpropertydescriptors@2.1.7: + resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} + engines: {node: '>= 0.8'} + dependencies: + array.prototype.reduce: 1.0.6 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + safe-array-concat: 1.0.1 + dev: false + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + dev: false + + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: false + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: false + + /obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: false + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: false + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: false + + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + dev: false + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: false + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: false + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: false + + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: false + + /p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + dev: false + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: false + + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + dev: false + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: false + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: false + + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: false + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: false + + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: false + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: false + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: false + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: false + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: false + + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: false + + /performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: false + + /picocolors@0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + dev: false + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: false + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: false + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: false + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: false + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: false + + /pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + dependencies: + find-up: 3.0.0 + dev: false + + /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.32): + resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-browser-comments@4.0.0(browserslist@4.22.2)(postcss@8.4.32): + resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} + engines: {node: '>=8'} + peerDependencies: + browserslist: '>=4' + postcss: '>=8' + dependencies: + browserslist: 4.22.2 + postcss: 8.4.32 + dev: false + + /postcss-calc@8.2.4(postcss@8.4.32): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-clamp@4.1.0(postcss@8.4.32): + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-functional-notation@4.2.4(postcss@8.4.32): + resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-hex-alpha@8.0.4(postcss@8.4.32): + resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-rebeccapurple@7.1.1(postcss@8.4.32): + resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-colormin@5.3.1(postcss@8.4.32): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-convert-values@5.1.3(postcss@8.4.32): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-media@8.0.2(postcss@8.4.32): + resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-properties@12.1.11(postcss@8.4.32): + resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-selectors@6.0.3(postcss@8.4.32): + resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-dir-pseudo-class@6.0.5(postcss@8.4.32): + resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-discard-comments@5.1.2(postcss@8.4.32): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-discard-duplicates@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-discard-empty@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-discard-overridden@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-double-position-gradients@3.1.2(postcss@8.4.32): + resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-env-function@4.0.6(postcss@8.4.32): + resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-flexbugs-fixes@5.0.2(postcss@8.4.32): + resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} + peerDependencies: + postcss: ^8.1.4 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-focus-visible@6.0.4(postcss@8.4.32): + resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-focus-within@5.0.4(postcss@8.4.32): + resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-font-variant@5.0.0(postcss@8.4.32): + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-gap-properties@3.0.5(postcss@8.4.32): + resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-image-set-function@4.0.7(postcss@8.4.32): + resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-import@15.1.0(postcss@8.4.32): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: false + + /postcss-initial@4.0.1(postcss@8.4.32): + resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-js@4.0.1(postcss@8.4.32): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.32 + dev: false + + /postcss-lab-function@4.2.1(postcss@8.4.32): + resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-load-config@4.0.2(postcss@8.4.32): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.0.0 + postcss: 8.4.32 + yaml: 2.3.4 + dev: false + + /postcss-loader@6.2.1(postcss@8.4.32)(webpack@5.89.0): + resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + dependencies: + cosmiconfig: 7.1.0 + klona: 2.0.6 + postcss: 8.4.32 + semver: 7.5.4 + webpack: 5.89.0 + dev: false + + /postcss-logical@5.0.4(postcss@8.4.32): + resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-media-minmax@5.0.0(postcss@8.4.32): + resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-merge-longhand@5.1.7(postcss@8.4.32): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.32) + dev: false + + /postcss-merge-rules@5.1.4(postcss@8.4.32): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-minify-font-values@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-gradients@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-params@5.1.4(postcss@8.4.32): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-selectors@5.2.1(postcss@8.4.32): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-modules-extract-imports@3.0.0(postcss@8.4.32): + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-modules-local-by-default@4.0.3(postcss@8.4.32): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-modules-scope@3.0.0(postcss@8.4.32): + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-modules-values@4.0.0(postcss@8.4.32): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.32) + postcss: 8.4.32 + dev: false + + /postcss-nested@6.0.1(postcss@8.4.32): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-nesting@10.2.0(postcss@8.4.32): + resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-normalize-charset@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-normalize-display-values@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-positions@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-string@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-unicode@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-url@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-whitespace@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize@10.0.1(browserslist@4.22.2)(postcss@8.4.32): + resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} + engines: {node: '>= 12'} + peerDependencies: + browserslist: '>= 4' + postcss: '>= 8' + dependencies: + '@csstools/normalize.css': 12.0.0 + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-browser-comments: 4.0.0(browserslist@4.22.2)(postcss@8.4.32) + sanitize.css: 13.0.0 + dev: false + + /postcss-opacity-percentage@1.1.3(postcss@8.4.32): + resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-ordered-values@5.1.3(postcss@8.4.32): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-overflow-shorthand@3.0.4(postcss@8.4.32): + resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-page-break@3.0.4(postcss@8.4.32): + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-place@7.0.5(postcss@8.4.32): + resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-preset-env@7.8.3(postcss@8.4.32): + resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.32) + '@csstools/postcss-color-function': 1.1.1(postcss@8.4.32) + '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.32) + '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.32) + '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.32) + '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.32) + '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.32) + '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.32) + '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.32) + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.32) + '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.32) + '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.32) + '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.32) + autoprefixer: 10.4.16(postcss@8.4.32) + browserslist: 4.22.2 + css-blank-pseudo: 3.0.3(postcss@8.4.32) + css-has-pseudo: 3.0.4(postcss@8.4.32) + css-prefers-color-scheme: 6.0.3(postcss@8.4.32) + cssdb: 7.9.1 + postcss: 8.4.32 + postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.32) + postcss-clamp: 4.1.0(postcss@8.4.32) + postcss-color-functional-notation: 4.2.4(postcss@8.4.32) + postcss-color-hex-alpha: 8.0.4(postcss@8.4.32) + postcss-color-rebeccapurple: 7.1.1(postcss@8.4.32) + postcss-custom-media: 8.0.2(postcss@8.4.32) + postcss-custom-properties: 12.1.11(postcss@8.4.32) + postcss-custom-selectors: 6.0.3(postcss@8.4.32) + postcss-dir-pseudo-class: 6.0.5(postcss@8.4.32) + postcss-double-position-gradients: 3.1.2(postcss@8.4.32) + postcss-env-function: 4.0.6(postcss@8.4.32) + postcss-focus-visible: 6.0.4(postcss@8.4.32) + postcss-focus-within: 5.0.4(postcss@8.4.32) + postcss-font-variant: 5.0.0(postcss@8.4.32) + postcss-gap-properties: 3.0.5(postcss@8.4.32) + postcss-image-set-function: 4.0.7(postcss@8.4.32) + postcss-initial: 4.0.1(postcss@8.4.32) + postcss-lab-function: 4.2.1(postcss@8.4.32) + postcss-logical: 5.0.4(postcss@8.4.32) + postcss-media-minmax: 5.0.0(postcss@8.4.32) + postcss-nesting: 10.2.0(postcss@8.4.32) + postcss-opacity-percentage: 1.1.3(postcss@8.4.32) + postcss-overflow-shorthand: 3.0.4(postcss@8.4.32) + postcss-page-break: 3.0.4(postcss@8.4.32) + postcss-place: 7.0.5(postcss@8.4.32) + postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.32) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.32) + postcss-selector-not: 6.0.1(postcss@8.4.32) + postcss-value-parser: 4.2.0 + dev: false + + /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.32): + resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-reduce-initial@5.1.2(postcss@8.4.32): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + postcss: 8.4.32 + dev: false + + /postcss-reduce-transforms@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.32): + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-selector-not@6.0.1(postcss@8.4.32): + resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: false + + /postcss-svgo@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: false + + /postcss-unique-selectors@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false + + /postcss@7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + dev: false + + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + + /prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: false + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: false + + /pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: false + + /pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} + dependencies: + lodash: 4.17.21 + renderkid: 3.0.0 + dev: false + + /pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: false + + /pretty-format@28.1.3: + resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: false + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + + /promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: false + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: false + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: false + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: false + + /q@1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + dev: false + + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: false + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: false + + /raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + dependencies: + performance-now: 2.1.0 + dev: false + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /react-app-polyfill@3.0.0: + resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} + engines: {node: '>=14'} + dependencies: + core-js: 3.34.0 + object-assign: 4.1.1 + promise: 8.3.0 + raf: 3.4.1 + regenerator-runtime: 0.13.11 + whatwg-fetch: 3.6.20 + dev: false + + /react-dev-utils@12.0.1(eslint@8.55.0)(typescript@4.9.5)(webpack@5.89.0): + resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=2.7' + webpack: '>=4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/code-frame': 7.23.5 + address: 1.2.2 + browserslist: 4.22.2 + chalk: 4.1.2 + cross-spawn: 7.0.3 + detect-port-alt: 1.1.6 + escape-string-regexp: 4.0.0 + filesize: 8.0.7 + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.55.0)(typescript@4.9.5)(webpack@5.89.0) + global-modules: 2.0.0 + globby: 11.1.0 + gzip-size: 6.0.0 + immer: 9.0.21 + is-root: 2.1.0 + loader-utils: 3.2.1 + open: 8.4.2 + pkg-up: 3.1.0 + prompts: 2.4.2 + react-error-overlay: 6.0.11 + recursive-readdir: 2.2.3 + shell-quote: 1.8.1 + strip-ansi: 6.0.1 + text-table: 0.2.0 + typescript: 4.9.5 + webpack: 5.89.0 + transitivePeerDependencies: + - eslint + - supports-color + - vue-template-compiler + dev: false + + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-error-overlay@6.0.11: + resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} + dev: false + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: false + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: false + + /react-refresh@0.11.0: + resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} + engines: {node: '>=0.10.0'} + dev: false + + /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(react@18.2.0)(typescript@4.9.5): + resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} + engines: {node: '>=14.0.0'} + hasBin: true + peerDependencies: + eslint: '*' + react: '>= 16' + typescript: ^3.2.1 || ^4 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0) + '@svgr/webpack': 5.5.0 + babel-jest: 27.5.1(@babel/core@7.23.6) + babel-loader: 8.3.0(@babel/core@7.23.6)(webpack@5.89.0) + babel-plugin-named-asset-import: 0.3.8(@babel/core@7.23.6) + babel-preset-react-app: 10.0.1 + bfj: 7.1.0 + browserslist: 4.22.2 + camelcase: 6.3.0 + case-sensitive-paths-webpack-plugin: 2.4.0 + css-loader: 6.8.1(webpack@5.89.0) + css-minimizer-webpack-plugin: 3.4.1(webpack@5.89.0) + dotenv: 10.0.0 + dotenv-expand: 5.1.0 + eslint: 8.55.0 + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(jest@27.5.1)(typescript@4.9.5) + eslint-webpack-plugin: 3.2.0(eslint@8.55.0)(webpack@5.89.0) + file-loader: 6.2.0(webpack@5.89.0) + fs-extra: 10.1.0 + html-webpack-plugin: 5.5.4(webpack@5.89.0) + identity-obj-proxy: 3.0.0 + jest: 27.5.1 + jest-resolve: 27.5.1 + jest-watch-typeahead: 1.1.0(jest@27.5.1) + mini-css-extract-plugin: 2.7.6(webpack@5.89.0) + postcss: 8.4.32 + postcss-flexbugs-fixes: 5.0.2(postcss@8.4.32) + postcss-loader: 6.2.1(postcss@8.4.32)(webpack@5.89.0) + postcss-normalize: 10.0.1(browserslist@4.22.2)(postcss@8.4.32) + postcss-preset-env: 7.8.3(postcss@8.4.32) + prompts: 2.4.2 + react: 18.2.0 + react-app-polyfill: 3.0.0 + react-dev-utils: 12.0.1(eslint@8.55.0)(typescript@4.9.5)(webpack@5.89.0) + react-refresh: 0.11.0 + resolve: 1.22.8 + resolve-url-loader: 4.0.0 + sass-loader: 12.6.0(webpack@5.89.0) + semver: 7.5.4 + source-map-loader: 3.0.2(webpack@5.89.0) + style-loader: 3.3.3(webpack@5.89.0) + tailwindcss: 3.3.6 + terser-webpack-plugin: 5.3.9(webpack@5.89.0) + typescript: 4.9.5 + webpack: 5.89.0 + webpack-dev-server: 4.15.1(webpack@5.89.0) + webpack-manifest-plugin: 4.1.1(webpack@5.89.0) + workbox-webpack-plugin: 6.6.0(webpack@5.89.0) + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - '@parcel/css' + - '@swc/core' + - '@types/babel__core' + - '@types/webpack' + - bufferutil + - canvas + - clean-css + - csso + - debug + - esbuild + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - fibers + - node-notifier + - node-sass + - rework + - rework-visit + - sass + - sass-embedded + - sockjs-client + - supports-color + - ts-node + - type-fest + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-hot-middleware + - webpack-plugin-serve + dev: false + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: false + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + dependencies: + minimatch: 3.1.2 + dev: false + + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: false + + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: false + + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: false + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: false + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + dev: false + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.6 + dev: false + + /regex-parser@2.2.11: + resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} + dev: false + + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: false + + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: false + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: false + + /relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: false + + /renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 6.0.1 + dev: false + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false + + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: false + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: false + + /resolve-url-loader@4.0.0: + resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} + engines: {node: '>=8.9'} + peerDependencies: + rework: 1.0.1 + rework-visit: 1.0.0 + peerDependenciesMeta: + rework: + optional: true + rework-visit: + optional: true + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 7.0.39 + source-map: 0.6.1 + dev: false + + /resolve.exports@1.1.1: + resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + engines: {node: '>=10'} + dev: false + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + + /retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: false + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: false + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: false + + /rollup-plugin-terser@7.0.2(rollup@2.79.1): + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.23.5 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.26.0 + dev: false + + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: false + + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: false + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-regex: 1.1.4 + dev: false + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /sanitize.css@13.0.0: + resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} + dev: false + + /sass-loader@12.6.0(webpack@5.89.0): + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + klona: 2.0.6 + neo-async: 2.6.2 + webpack: 5.89.0 + dev: false + + /sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: false + + /saxes@5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + dependencies: + xmlchars: 2.2.0 + dev: false + + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /schema-utils@2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: false + + /schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: false + + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: false + + /schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) + dev: false + + /select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: false + + /selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + dependencies: + '@types/node-forge': 1.3.10 + node-forge: 1.3.1 + dev: false + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: false + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: false + + /serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + dependencies: + randombytes: 2.1.0 + dev: false + + /serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: false + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: false + + /setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: false + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: false + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: false + + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: false + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + dev: false + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: false + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: false + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: false + + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: false + + /sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + dev: false + + /source-list-map@2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: false + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map-loader@3.0.2(webpack@5.89.0): + resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + abab: 2.0.6 + iconv-lite: 0.6.3 + source-map-js: 1.0.2 + webpack: 5.89.0 + dev: false + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: false + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: false + + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: false + + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: false + + /spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.4 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.2 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: false + + /spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.4 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false + + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: false + + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: false + + /stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: false + + /static-eval@2.0.2: + resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} + dependencies: + escodegen: 1.14.3 + dev: false + + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.6 + dev: false + + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: false + + /string-length@5.0.1: + resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} + engines: {node: '>=12.20'} + dependencies: + char-regex: 2.0.1 + strip-ansi: 7.1.0 + dev: false + + /string-natural-compare@3.0.1: + resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: false + + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 + side-channel: 1.0.4 + dev: false + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: false + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: false + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: false + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + dev: false + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: false + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: false + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: false + + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: false + + /strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + dev: false + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: false + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: false + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: false + + /style-loader@3.3.3(webpack@5.89.0): + resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + webpack: 5.89.0 + dev: false + + /stylehacks@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: false + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: false + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: false + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: false + + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: false + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: false + + /svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + dev: false + + /svgo@1.3.2: + resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} + engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true + dependencies: + chalk: 2.4.2 + coa: 2.0.2 + css-select: 2.1.0 + css-select-base-adapter: 0.1.1 + css-tree: 1.0.0-alpha.37 + csso: 4.2.0 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + object.values: 1.1.7 + sax: 1.2.4 + stable: 0.1.8 + unquote: 1.1.1 + util.promisify: 1.0.1 + dev: false + + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: false + + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: false + + /tailwindcss@3.3.6: + resolution: {integrity: sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.32 + postcss-import: 15.1.0(postcss@8.4.32) + postcss-js: 4.0.1(postcss@8.4.32) + postcss-load-config: 4.0.2(postcss@8.4.32) + postcss-nested: 6.0.1(postcss@8.4.32) + postcss-selector-parser: 6.0.13 + resolve: 1.22.8 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: false + + /tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: false + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: false + + /temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + dev: false + + /tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: false + + /terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + dev: false + + /terser-webpack-plugin@5.3.9(webpack@5.89.0): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.26.0 + webpack: 5.89.0 + dev: false + + /terser@5.26.0: + resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.11.2 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: false + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: false + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: false + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: false + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: false + + /throat@6.0.2: + resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} + dev: false + + /thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: false + + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: false + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: false + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: false + + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.1 + dev: false + + /tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + dependencies: + punycode: 2.3.1 + dev: false + + /tryer@1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} + dev: false + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: false + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: false + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + + /tsutils@3.21.0(typescript@4.9.5): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.9.5 + dev: false + + /type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: false + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: false + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: false + + /type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + dev: false + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: false + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: false + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: false + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: false + + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: false + + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: false + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: false + + /underscore@1.12.1: + resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} + dev: false + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: false + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: false + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: false + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: false + + /unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: false + + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: false + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: false + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /unquote@1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + dev: false + + /upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: false + + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: false + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: false + + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /util.promisify@1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.3 + has-symbols: 1.0.3 + object.getownpropertydescriptors: 2.1.7 + dev: false + + /utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + dev: false + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /v8-to-istanbul@8.1.1: + resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + engines: {node: '>=10.12.0'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 1.9.0 + source-map: 0.7.4 + dev: false + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + + /w3c-hr-time@1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + dependencies: + browser-process-hrtime: 1.0.0 + dev: false + + /w3c-xmlserializer@2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + dependencies: + xml-name-validator: 3.0.0 + dev: false + + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: false + + /watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: false + + /wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: false + + /web-vitals@2.1.4: + resolution: {integrity: sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==} + dev: false + + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: false + + /webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + dev: false + + /webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + dev: false + + /webpack-dev-middleware@5.3.3(webpack@5.89.0): + resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.2.0 + webpack: 5.89.0 + dev: false + + /webpack-dev-server@4.15.1(webpack@5.89.0): + resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.5 + '@types/sockjs': 0.3.36 + '@types/ws': 8.5.10 + ansi-html-community: 0.0.8 + bonjour-service: 1.1.1 + chokidar: 3.5.3 + colorette: 2.0.20 + compression: 1.7.4 + connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 + express: 4.18.2 + graceful-fs: 4.2.11 + html-entities: 2.4.0 + http-proxy-middleware: 2.0.6(@types/express@4.17.21) + ipaddr.js: 2.1.0 + launch-editor: 2.6.1 + open: 8.4.2 + p-retry: 4.6.2 + rimraf: 3.0.2 + schema-utils: 4.2.0 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack: 5.89.0 + webpack-dev-middleware: 5.3.3(webpack@5.89.0) + ws: 8.15.1 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: false + + /webpack-manifest-plugin@4.1.1(webpack@5.89.0): + resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} + engines: {node: '>=12.22.0'} + peerDependencies: + webpack: ^4.44.2 || ^5.47.0 + dependencies: + tapable: 2.2.1 + webpack: 5.89.0 + webpack-sources: 2.3.1 + dev: false + + /webpack-sources@1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: false + + /webpack-sources@2.3.1: + resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} + engines: {node: '>=10.13.0'} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: false + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: false + + /webpack@5.89.0: + resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.11.2 + acorn-import-assertions: 1.9.0(acorn@8.11.2) + browserslist: 4.22.2 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.4.1 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9(webpack@5.89.0) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: false + + /websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: false + + /websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: false + + /whatwg-encoding@1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + dependencies: + iconv-lite: 0.4.24 + dev: false + + /whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + dev: false + + /whatwg-mimetype@2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + dev: false + + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: false + + /whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + dev: false + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: false + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: false + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: false + + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: false + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: false + + /workbox-background-sync@6.6.0: + resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + dev: false + + /workbox-broadcast-update@6.6.0: + resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-build@6.6.0: + resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) + '@babel/core': 7.23.6 + '@babel/preset-env': 7.23.6(@babel/core@7.23.6) + '@babel/runtime': 7.23.6 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.6)(rollup@2.79.1) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.12.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-terser: 7.0.2(rollup@2.79.1) + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 6.6.0 + workbox-broadcast-update: 6.6.0 + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-google-analytics: 6.6.0 + workbox-navigation-preload: 6.6.0 + workbox-precaching: 6.6.0 + workbox-range-requests: 6.6.0 + workbox-recipes: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + workbox-streams: 6.6.0 + workbox-sw: 6.6.0 + workbox-window: 6.6.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: false + + /workbox-cacheable-response@6.6.0: + resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} + deprecated: workbox-background-sync@6.6.0 + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-core@6.6.0: + resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} + dev: false + + /workbox-expiration@6.6.0: + resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + dev: false + + /workbox-google-analytics@6.6.0: + resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} + dependencies: + workbox-background-sync: 6.6.0 + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: false + + /workbox-navigation-preload@6.6.0: + resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-precaching@6.6.0: + resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: false + + /workbox-range-requests@6.6.0: + resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-recipes@6.6.0: + resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} + dependencies: + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-precaching: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: false + + /workbox-routing@6.6.0: + resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-strategies@6.6.0: + resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-streams@6.6.0: + resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + dev: false + + /workbox-sw@6.6.0: + resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} + dev: false + + /workbox-webpack-plugin@6.6.0(webpack@5.89.0): + resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: ^4.4.0 || ^5.9.0 + dependencies: + fast-json-stable-stringify: 2.1.0 + pretty-bytes: 5.6.0 + upath: 1.2.0 + webpack: 5.89.0 + webpack-sources: 1.4.3 + workbox-build: 6.6.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: false + + /workbox-window@6.6.0: + resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 6.6.0 + dev: false + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false + + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: false + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.15.1: + resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /xml-name-validator@3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + dev: false + + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: false + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: false + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: false + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: false + + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: false + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: false + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: false diff --git a/apps/sample/public/favicon.ico b/apps/sample/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a11777cc471a4344702741ab1c8a588998b1311a GIT binary patch literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ literal 0 HcmV?d00001 diff --git a/apps/sample/public/index.html b/apps/sample/public/index.html new file mode 100644 index 000000000..aa069f27c --- /dev/null +++ b/apps/sample/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/apps/sample/public/logo192.png b/apps/sample/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/apps/sample/public/manifest.json b/apps/sample/public/manifest.json new file mode 100644 index 000000000..080d6c77a --- /dev/null +++ b/apps/sample/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/apps/sample/public/robots.txt b/apps/sample/public/robots.txt new file mode 100644 index 000000000..e9e57dc4d --- /dev/null +++ b/apps/sample/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/apps/sample/src/App.css b/apps/sample/src/App.css new file mode 100644 index 000000000..74b5e0534 --- /dev/null +++ b/apps/sample/src/App.css @@ -0,0 +1,38 @@ +.App { + text-align: center; +} + +.App-logo { + height: 40vmin; + pointer-events: none; +} + +@media (prefers-reduced-motion: no-preference) { + .App-logo { + animation: App-logo-spin infinite 20s linear; + } +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} + +@keyframes App-logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/apps/sample/src/App.test.tsx b/apps/sample/src/App.test.tsx new file mode 100644 index 000000000..2a68616d9 --- /dev/null +++ b/apps/sample/src/App.test.tsx @@ -0,0 +1,9 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/apps/sample/src/App.tsx b/apps/sample/src/App.tsx new file mode 100644 index 000000000..4165a3055 --- /dev/null +++ b/apps/sample/src/App.tsx @@ -0,0 +1,75 @@ +import './App.css'; +import {useCallback, useState} from "react"; + +function App() { + const [devices, setDevices] = useState>([]); + const [getDeviceError, setGetDeviceError] = useState(""); + const [requestDeviceError, setRequestDeviceError] = useState(""); + + const requestDevice = useCallback(async () => { + try { + setRequestDeviceError(""); + const device = await navigator.bluetooth.requestDevice({ + acceptAllDevices: true + }); + setDevices([device]) + } catch (error) { + setRequestDeviceError((error as Error).message); + setDevices([]); + console.error(error); + } + }, []) + + const getDevices = useCallback(async () => { + try { + setGetDeviceError(""); + const devices = await navigator.bluetooth.getDevices(); + setDevices(devices); + if (!devices.length) { + throw new Error("getDevices got 0 devices"); + } + } catch (error) { + setGetDeviceError((error as Error).message); + setDevices([]); + console.error(error); + await requestDevice(); + } + }, []) + return ( + + ); +} + +export default App; \ No newline at end of file diff --git a/apps/sample/src/index.css b/apps/sample/src/index.css new file mode 100644 index 000000000..ec2585e8c --- /dev/null +++ b/apps/sample/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/apps/sample/src/index.tsx b/apps/sample/src/index.tsx new file mode 100644 index 000000000..032464fb6 --- /dev/null +++ b/apps/sample/src/index.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; + +const root = ReactDOM.createRoot( + document.getElementById('root') as HTMLElement +); +root.render( + + + +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/apps/sample/src/logo.svg b/apps/sample/src/logo.svg new file mode 100644 index 000000000..9dfc1c058 --- /dev/null +++ b/apps/sample/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/sample/src/react-app-env.d.ts b/apps/sample/src/react-app-env.d.ts new file mode 100644 index 000000000..6431bc5fc --- /dev/null +++ b/apps/sample/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/apps/sample/src/reportWebVitals.ts b/apps/sample/src/reportWebVitals.ts new file mode 100644 index 000000000..49a2a16e0 --- /dev/null +++ b/apps/sample/src/reportWebVitals.ts @@ -0,0 +1,15 @@ +import { ReportHandler } from 'web-vitals'; + +const reportWebVitals = (onPerfEntry?: ReportHandler) => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/apps/sample/src/setupTests.ts b/apps/sample/src/setupTests.ts new file mode 100644 index 000000000..8f2609b7b --- /dev/null +++ b/apps/sample/src/setupTests.ts @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/apps/sample/tsconfig.json b/apps/sample/tsconfig.json new file mode 100644 index 000000000..a273b0cfc --- /dev/null +++ b/apps/sample/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": [ + "src" + ] +} From 8a885b1f257b99bf010c63b60bf7a5c60b9f21e8 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 15 Dec 2023 17:11:34 +0100 Subject: [PATCH 004/253] chore: init packages folders structure --- packages/core/.eslintrc.js | 4 + packages/core/.gitignore | 0 packages/core/package.json | 26 + packages/core/pnpm-lock.yaml | 700 ++++ packages/core/scripts/add-feature.mjs | 22 + packages/core/src/api/.gitkeep | 0 packages/core/src/api/DeviceSdk.ts | 11 + packages/core/src/api/DeviceSdkBuilder.ts | 12 + packages/core/src/api/index.ts | 4 + packages/core/src/common/.gitkeep | 0 packages/core/src/device-action/.gitkeep | 0 packages/core/src/index.ts | 1 + packages/core/src/shared/entities/.gitkeep | 0 packages/core/src/shared/utils/.gitkeep | 0 packages/core/src/transport/.gitkeep | 0 packages/core/src/transport/Transport.ts | 7 + .../core/src/transport/ble/BleTransport.ts | 9 + packages/core/src/transport/ble/bleModule.ts | 3 + packages/core/src/transport/model/Response.ts | 4 + .../core/src/transport/transportsModule.ts | 0 packages/core/tests/.gitkeep | 0 packages/core/tsconfig.json | 7 + packages/eslint-config-dsdk/library.js | 34 + packages/eslint-config-dsdk/package.json | 11 + packages/eslint-config-dsdk/pnpm-lock.yaml | 3118 +++++++++++++++++ packages/signer/.eslintrc.js | 4 + packages/signer/package.json | 24 + packages/signer/src/.gitkeep | 0 packages/signer/tests/.gitkeep | 0 packages/signer/tsconfig.json | 7 + packages/trusted-apps/.eslintrc.js | 4 + packages/trusted-apps/package.json | 24 + packages/trusted-apps/src/.gitkeep | 0 packages/trusted-apps/tests/.gitkeep | 0 packages/trusted-apps/tsconfig.json | 7 + packages/ui/.eslintrc.js | 4 + packages/ui/package.json | 24 + packages/ui/src/.gitkeep | 0 packages/ui/tests/.gitkeep | 0 packages/ui/tsconfig.json | 7 + 40 files changed, 4078 insertions(+) create mode 100644 packages/core/.eslintrc.js create mode 100644 packages/core/.gitignore create mode 100644 packages/core/package.json create mode 100644 packages/core/pnpm-lock.yaml create mode 100644 packages/core/scripts/add-feature.mjs create mode 100644 packages/core/src/api/.gitkeep create mode 100644 packages/core/src/api/DeviceSdk.ts create mode 100644 packages/core/src/api/DeviceSdkBuilder.ts create mode 100644 packages/core/src/api/index.ts create mode 100644 packages/core/src/common/.gitkeep create mode 100644 packages/core/src/device-action/.gitkeep create mode 100644 packages/core/src/index.ts create mode 100644 packages/core/src/shared/entities/.gitkeep create mode 100644 packages/core/src/shared/utils/.gitkeep create mode 100644 packages/core/src/transport/.gitkeep create mode 100644 packages/core/src/transport/Transport.ts create mode 100644 packages/core/src/transport/ble/BleTransport.ts create mode 100644 packages/core/src/transport/ble/bleModule.ts create mode 100644 packages/core/src/transport/model/Response.ts create mode 100644 packages/core/src/transport/transportsModule.ts create mode 100644 packages/core/tests/.gitkeep create mode 100644 packages/core/tsconfig.json create mode 100644 packages/eslint-config-dsdk/library.js create mode 100644 packages/eslint-config-dsdk/package.json create mode 100644 packages/eslint-config-dsdk/pnpm-lock.yaml create mode 100644 packages/signer/.eslintrc.js create mode 100644 packages/signer/package.json create mode 100644 packages/signer/src/.gitkeep create mode 100644 packages/signer/tests/.gitkeep create mode 100644 packages/signer/tsconfig.json create mode 100644 packages/trusted-apps/.eslintrc.js create mode 100644 packages/trusted-apps/package.json create mode 100644 packages/trusted-apps/src/.gitkeep create mode 100644 packages/trusted-apps/tests/.gitkeep create mode 100644 packages/trusted-apps/tsconfig.json create mode 100644 packages/ui/.eslintrc.js create mode 100644 packages/ui/package.json create mode 100644 packages/ui/src/.gitkeep create mode 100644 packages/ui/tests/.gitkeep create mode 100644 packages/ui/tsconfig.json diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js new file mode 100644 index 000000000..eb4c5f43a --- /dev/null +++ b/packages/core/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ["dsdk/next"], +}; \ No newline at end of file diff --git a/packages/core/.gitignore b/packages/core/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 000000000..14c24e06e --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,26 @@ +{ + "name": "@ledgerhq/device-sdk-core", + "version": "1.0.0", + "license": "MIT", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "/lib" + ], + "scripts": { + "build": "tsc --noEmit", + "feature": "zx scripts/add-feature.mjs", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "peerDependencies": { + "reflect-metadata": "^0.2.1", + "tsyringe": "^4.8.0" + }, + "devDependencies": { + "@types/eslint": "^8.44.9", + "@types/node": "^20.10.5", + "eslint": "^8.56.0", + "eslint-config-dsdk": "workspace:*", + "typescript": "^5.3.3" + } +} diff --git a/packages/core/pnpm-lock.yaml b/packages/core/pnpm-lock.yaml new file mode 100644 index 000000000..4dbd7edbb --- /dev/null +++ b/packages/core/pnpm-lock.yaml @@ -0,0 +1,700 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + '@types/eslint': + specifier: ^8.44.9 + version: 8.44.9 + '@types/node': + specifier: ^20.10.5 + version: 20.10.5 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + typescript: + specifier: ^5.3.3 + version: 5.3.3 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@types/eslint@8.44.9: + resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: true + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/node@20.10.5: + resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/packages/core/scripts/add-feature.mjs b/packages/core/scripts/add-feature.mjs new file mode 100644 index 000000000..8e51c6b2a --- /dev/null +++ b/packages/core/scripts/add-feature.mjs @@ -0,0 +1,22 @@ +#!/usr/bin/env zx +import { basename } from 'path'; + +const features = argv._; + +if (!features.length) { + await console.error(`Usage: ${basename(__filename)} [ ...]`); + process.exit(1); +} + +within(async () => { + cd('src'); + for (const feature of features) { + const rootFolderName = `${feature}-feature`; + await $`mkdir ${rootFolderName}`; + within(async () => { + cd(rootFolderName); + await $`mkdir entities data use-cases repository`; + await $`touch entities/.gitkeep data/.gitkeep use-cases/.gitkeep repository/.gitkeep`; + }) + } +}) diff --git a/packages/core/src/api/.gitkeep b/packages/core/src/api/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts new file mode 100644 index 000000000..36baf7f47 --- /dev/null +++ b/packages/core/src/api/DeviceSdk.ts @@ -0,0 +1,11 @@ +export class DeviceSdk { + + /** @internal */ + constructor(){ + + } + + scan() { + + } +} \ No newline at end of file diff --git a/packages/core/src/api/DeviceSdkBuilder.ts b/packages/core/src/api/DeviceSdkBuilder.ts new file mode 100644 index 000000000..86bbca4e0 --- /dev/null +++ b/packages/core/src/api/DeviceSdkBuilder.ts @@ -0,0 +1,12 @@ +import {DeviceSdk} from "./DeviceSdk" + +export class LedgerDeviceSdkBuilder { + + //props + constructor() { + } + + build(): DeviceSdk { + return new DeviceSdk() + } +} \ No newline at end of file diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts new file mode 100644 index 000000000..c2912d19e --- /dev/null +++ b/packages/core/src/api/index.ts @@ -0,0 +1,4 @@ +'use strict' + +export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder" +export { DeviceSdk } from "./DeviceSdk" diff --git a/packages/core/src/common/.gitkeep b/packages/core/src/common/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/src/device-action/.gitkeep b/packages/core/src/device-action/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts new file mode 100644 index 000000000..3318fdbc9 --- /dev/null +++ b/packages/core/src/index.ts @@ -0,0 +1 @@ +export * from './api' diff --git a/packages/core/src/shared/entities/.gitkeep b/packages/core/src/shared/entities/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/src/shared/utils/.gitkeep b/packages/core/src/shared/utils/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/src/transport/.gitkeep b/packages/core/src/transport/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/src/transport/Transport.ts b/packages/core/src/transport/Transport.ts new file mode 100644 index 000000000..6930c4a71 --- /dev/null +++ b/packages/core/src/transport/Transport.ts @@ -0,0 +1,7 @@ +import {Response} from "./model/Response" +import { bletransport } from "./ble/bleModule" + + +export interface Transport { + send(apduHex: String): Response | undefined; +} \ No newline at end of file diff --git a/packages/core/src/transport/ble/BleTransport.ts b/packages/core/src/transport/ble/BleTransport.ts new file mode 100644 index 000000000..5a5146e56 --- /dev/null +++ b/packages/core/src/transport/ble/BleTransport.ts @@ -0,0 +1,9 @@ +import { Transport } from "../Transport" +import { Response } from "../model/Response" + + +export default class BleTransport implements Transport { + send(apduHex: String): Response| undefined { + return undefined + } +} diff --git a/packages/core/src/transport/ble/bleModule.ts b/packages/core/src/transport/ble/bleModule.ts new file mode 100644 index 000000000..f0c05f360 --- /dev/null +++ b/packages/core/src/transport/ble/bleModule.ts @@ -0,0 +1,3 @@ +import BleTransport from "./BleTransport" + +export { BleTransport } \ No newline at end of file diff --git a/packages/core/src/transport/model/Response.ts b/packages/core/src/transport/model/Response.ts new file mode 100644 index 000000000..3644e8373 --- /dev/null +++ b/packages/core/src/transport/model/Response.ts @@ -0,0 +1,4 @@ + +export class Response { + +} \ No newline at end of file diff --git a/packages/core/src/transport/transportsModule.ts b/packages/core/src/transport/transportsModule.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/tests/.gitkeep b/packages/core/tests/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json new file mode 100644 index 000000000..54c91c599 --- /dev/null +++ b/packages/core/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./lib" + }, + "include": ["src/**/*", "jest.config.ts", "tests/**/*"] +} \ No newline at end of file diff --git a/packages/eslint-config-dsdk/library.js b/packages/eslint-config-dsdk/library.js new file mode 100644 index 000000000..c4a07ff7f --- /dev/null +++ b/packages/eslint-config-dsdk/library.js @@ -0,0 +1,34 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: ["eslint:recommended", "prettier", "eslint-config-turbo"], + plugins: ["only-warn"], + globals: { + React: true, + JSX: true, + }, + env: { + node: true, + }, + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + "node_modules/", + "dist/", + ], + overrides: [ + { + files: ["*.js?(x)", "*.ts?(x)"], + }, + ], +}; \ No newline at end of file diff --git a/packages/eslint-config-dsdk/package.json b/packages/eslint-config-dsdk/package.json new file mode 100644 index 000000000..dad83384c --- /dev/null +++ b/packages/eslint-config-dsdk/package.json @@ -0,0 +1,11 @@ +{ + "name": "eslint-config-dsdk", + "license": "MIT", + "version": "0.0.0", + "private": true, + "files": ["library.js"], + "devDependencies": { + "@vercel/style-guide": "^5.1.0", + "eslint-config-turbo": "^1.10.12" + } +} \ No newline at end of file diff --git a/packages/eslint-config-dsdk/pnpm-lock.yaml b/packages/eslint-config-dsdk/pnpm-lock.yaml new file mode 100644 index 000000000..d9e4d1b0d --- /dev/null +++ b/packages/eslint-config-dsdk/pnpm-lock.yaml @@ -0,0 +1,3118 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + '@vercel/style-guide': + specifier: ^4.0.2 + version: 4.0.2(eslint@8.56.0)(typescript@5.3.3) + eslint-config-turbo: + specifier: ^1.10.12 + version: 1.11.2(eslint@8.56.0) + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.23.6: + resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helpers': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.56.0): + resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.56.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + dev: true + + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + dev: true + + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.2 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers@7.23.6: + resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@babel/runtime@7.23.6: + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: true + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + dev: true + + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true + + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + dev: true + + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + dependencies: + eslint-scope: 5.1.1 + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.2 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + dev: true + + /@rushstack/eslint-patch@1.6.1: + resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true + + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + dev: true + + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.56.0 + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.56.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/type-utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.56.0 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + eslint: 8.56.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /@vercel/style-guide@4.0.2(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-FroL+oOePzhw7n/I+f7zr4WNroGHT/+2TlW6WH9+CVSjMNsEyu7Qstj2mI5gWIBjT1Y2ZImKPppCzI2cIYmNZw==} + engines: {node: '>=16'} + peerDependencies: + '@next/eslint-plugin-next': ^12.3.0 + eslint: ^8.24.0 + prettier: ^2.7.0 + typescript: ^4.8.0 + peerDependenciesMeta: + '@next/eslint-plugin-next': + optional: true + eslint: + optional: true + prettier: + optional: true + typescript: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-config-prettier: 8.10.0(eslint@8.56.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-playwright: 0.11.2(eslint-plugin-jest@27.6.0)(eslint@8.56.0) + eslint-plugin-react: 7.33.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + eslint-plugin-testing-library: 5.11.1(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 43.0.2(eslint@8.56.0) + prettier-plugin-packagejson: 2.4.7 + typescript: 5.3.3 + transitivePeerDependencies: + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true + + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: true + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true + + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: true + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: true + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.52 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001570 + electron-to-chromium: 1.4.614 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: true + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /caniuse-lite@1.0.30001570: + resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: true + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + dev: true + + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + dev: true + + /electron-to-chromium@1.4.614: + resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} + dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + 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.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + 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.13 + dev: true + + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: true + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-prettier@8.10.0(eslint@8.56.0): + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-config-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + eslint: 8.56.0 + eslint-plugin-turbo: 1.11.2(eslint@8.56.0) + dev: true + + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + dependencies: + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.56.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + escape-string-regexp: 1.0.5 + eslint: 8.56.0 + ignore: 5.3.0 + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.6 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.15 + eslint: 8.56.0 + hasown: 2.0.0 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + dev: true + + /eslint-plugin-playwright@0.11.2(eslint-plugin-jest@27.6.0)(eslint@8.56.0): + resolution: {integrity: sha512-uRLRLk7uTzc8NE6t4wBU8dijQwHvC66R/h7xwdM779jsJjMUtSmeaB8ayRkkpfwi+UU5BEfwvDANwmE+ccMVDw==} + peerDependencies: + eslint: '>=7' + eslint-plugin-jest: '>=24' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + dependencies: + eslint: 8.56.0 + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(typescript@5.3.3) + dev: true + + /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-plugin-react@7.33.2(eslint@8.56.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.56.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: true + + /eslint-plugin-testing-library@5.11.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + dev: true + + /eslint-plugin-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + dotenv: 16.0.3 + eslint: 8.56.0 + dev: true + + /eslint-plugin-unicorn@43.0.2(eslint@8.56.0): + resolution: {integrity: sha512-DtqZ5mf/GMlfWoz1abIjq5jZfaFuHzGBZYIeuJfEoKKGWRHr2JiJR+ea+BF7Wx2N1PPRoT/2fwgiK1NnmNE3Hg==} + engines: {node: '>=14.18'} + peerDependencies: + eslint: '>=8.18.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.56.0 + eslint-utils: 3.0.0(eslint@8.56.0) + esquery: 1.5.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + safe-regex: 2.1.1 + semver: 7.5.4 + strip-indent: 3.0.0 + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils@3.0.0(eslint@8.56.0): + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + 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 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + dev: true + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: true + + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.1.7 + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true + + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + dev: true + + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-plugin-packagejson@2.4.7: + resolution: {integrity: sha512-/n1HGcBbuJyTlD3tb2/tW1mT5WIR6FCo+bAijHF6pNoSBf8YoxoskawjSY2ku9/8d6mdzci7oMchziI7CYEWYg==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true + dependencies: + sort-package-json: 2.6.0 + synckit: 0.8.6 + dev: true + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: true + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true + + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + + /resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-regex: 1.1.4 + dev: true + + /safe-regex@2.1.1: + resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} + dependencies: + regexp-tree: 0.1.27 + dev: true + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true + + /sort-package-json@2.6.0: + resolution: {integrity: sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==} + hasBin: true + dependencies: + detect-indent: 7.0.1 + detect-newline: 4.0.1 + get-stdin: 9.0.0 + git-hooks-list: 3.1.0 + globby: 13.2.2 + is-plain-obj: 4.1.0 + sort-object-keys: 1.1.3 + dev: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + dev: true + + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 + side-channel: 1.0.4 + dev: true + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /synckit@0.8.6: + resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 + dev: true + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + + /tsutils@3.21.0(typescript@5.3.3): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.3.3 + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: true + + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: true + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/packages/signer/.eslintrc.js b/packages/signer/.eslintrc.js new file mode 100644 index 000000000..eb4c5f43a --- /dev/null +++ b/packages/signer/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ["dsdk/next"], +}; \ No newline at end of file diff --git a/packages/signer/package.json b/packages/signer/package.json new file mode 100644 index 000000000..ea7bf3b31 --- /dev/null +++ b/packages/signer/package.json @@ -0,0 +1,24 @@ +{ + "name": "@ledgerhq/device-sdk-signer", + "version": "1.0.0", + "license": "MIT", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "/lib" + ], + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "peerDependencies": { + "reflect-metadata": "^0.2.1", + "tsyringe": "^4.8.0" + }, + "devDependencies": { + "@types/eslint": "^8.44.9", + "@types/node": "^20.10.5", + "eslint": "^8.56.0", + "typescript": "^5.3.3", + "eslint-config-dsdk": "workspace:*" + } +} diff --git a/packages/signer/src/.gitkeep b/packages/signer/src/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/signer/tests/.gitkeep b/packages/signer/tests/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/signer/tsconfig.json b/packages/signer/tsconfig.json new file mode 100644 index 000000000..54c91c599 --- /dev/null +++ b/packages/signer/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./lib" + }, + "include": ["src/**/*", "jest.config.ts", "tests/**/*"] +} \ No newline at end of file diff --git a/packages/trusted-apps/.eslintrc.js b/packages/trusted-apps/.eslintrc.js new file mode 100644 index 000000000..eb4c5f43a --- /dev/null +++ b/packages/trusted-apps/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ["dsdk/next"], +}; \ No newline at end of file diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json new file mode 100644 index 000000000..2b1c250c7 --- /dev/null +++ b/packages/trusted-apps/package.json @@ -0,0 +1,24 @@ +{ + "name": "@ledgerhq/device-sdk-trusted-apps", + "version": "1.0.0", + "license": "MIT", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "/lib" + ], + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "peerDependencies": { + "reflect-metadata": "^0.2.1", + "tsyringe": "^4.8.0" + }, + "devDependencies": { + "@types/eslint": "^8.44.9", + "@types/node": "^20.10.5", + "eslint": "^8.56.0", + "typescript": "^5.3.3", + "eslint-config-dsdk": "workspace:*" + } +} diff --git a/packages/trusted-apps/src/.gitkeep b/packages/trusted-apps/src/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/trusted-apps/tests/.gitkeep b/packages/trusted-apps/tests/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/trusted-apps/tsconfig.json b/packages/trusted-apps/tsconfig.json new file mode 100644 index 000000000..54c91c599 --- /dev/null +++ b/packages/trusted-apps/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./lib" + }, + "include": ["src/**/*", "jest.config.ts", "tests/**/*"] +} \ No newline at end of file diff --git a/packages/ui/.eslintrc.js b/packages/ui/.eslintrc.js new file mode 100644 index 000000000..eb4c5f43a --- /dev/null +++ b/packages/ui/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ["dsdk/next"], +}; \ No newline at end of file diff --git a/packages/ui/package.json b/packages/ui/package.json new file mode 100644 index 000000000..707814c55 --- /dev/null +++ b/packages/ui/package.json @@ -0,0 +1,24 @@ +{ + "name": "@ledgerhq/device-sdk-ui", + "version": "1.0.0", + "license": "MIT", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "/lib" + ], + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "peerDependencies": { + "reflect-metadata": "^0.2.1", + "tsyringe": "^4.8.0" + }, + "devDependencies": { + "@types/eslint": "^8.44.9", + "@types/node": "^20.10.5", + "eslint": "^8.56.0", + "typescript": "^5.3.3", + "eslint-config-dsdk": "workspace:*" + } +} diff --git a/packages/ui/src/.gitkeep b/packages/ui/src/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ui/tests/.gitkeep b/packages/ui/tests/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json new file mode 100644 index 000000000..54c91c599 --- /dev/null +++ b/packages/ui/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./lib" + }, + "include": ["src/**/*", "jest.config.ts", "tests/**/*"] +} \ No newline at end of file From ab76bcbfc79f9a97cb746fb4eeaab4c796a1882f Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 15 Dec 2023 17:13:15 +0100 Subject: [PATCH 005/253] chore: init turbo monorepo --- .github/workflows/main.yml | 32 + .github/workflows/size.yml | 12 + package.json | 27 + pnpm-lock.yaml | 11468 +++++++++++++++++++++++++++++++++++ pnpm-workspace.yaml | 3 + tsconfig.base.json | 28 + turbo.json | 17 + 7 files changed, 11587 insertions(+) create mode 100644 .github/workflows/main.yml create mode 100644 .github/workflows/size.yml create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 tsconfig.base.json create mode 100644 turbo.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..7b7cb9b8d --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,32 @@ +name: CI +on: [push] +jobs: + build: + name: Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }} + + runs-on: ${{ matrix.os }} + strategy: + matrix: + node: ['10.x', '12.x', '14.x'] + os: ubuntu-latest + + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Use Node ${{ matrix.node }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + + - name: Install deps and build (with cache) + uses: bahmutov/npm-install@v1 + + - name: Lint + run: yarn lint + + - name: Test + run: pnpm test --ci --coverage --maxWorkers=2 + + - name: Build + run: yarn build diff --git a/.github/workflows/size.yml b/.github/workflows/size.yml new file mode 100644 index 000000000..6021cda3e --- /dev/null +++ b/.github/workflows/size.yml @@ -0,0 +1,12 @@ +name: size +on: [pull_request] +jobs: + size: + runs-on: ubuntu-latest + env: + CI_JOB_NUMBER: 1 + steps: + - uses: actions/checkout@v1 + - uses: andresz1/size-limit-action@v1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/package.json b/package.json new file mode 100644 index 000000000..75340822e --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "@ledgerhq/device-sdk", + "version": "1.0.0", + "license": "MIT", + "scripts": { + "build": "turbo build", + "core": "turbo --filter @ledgerhq/device-sdk-core", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "devDependencies": { + "eslint": "^8.56.0", + "eslint-config-dsdk": "workspace:*", + "path": "^0.12.7", + "turbo": "^1.11.2", + "zx": "^7.2.3" + }, + "lint-staged": { + "*.ts": [ + "eslint --fix", + "prettier --write" + ] + }, + "packageManager": "pnpm@8.8.0", + "engines": { + "node": ">=18" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 000000000..9be956fd9 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,11468 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + .: + devDependencies: + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-config-dsdk: + specifier: workspace:* + version: link:packages/eslint-config + path: + specifier: ^0.12.7 + version: 0.12.7 + turbo: + specifier: ^1.11.2 + version: 1.11.2 + zx: + specifier: ^7.2.3 + version: 7.2.3 + + apps/sample: + dependencies: + '@testing-library/jest-dom': + specifier: ^5.17.0 + version: 5.17.0 + '@testing-library/react': + specifier: ^13.4.0 + version: 13.4.0(react-dom@18.2.0)(react@18.2.0) + '@testing-library/user-event': + specifier: ^13.5.0 + version: 13.5.0(@testing-library/dom@9.3.3) + '@types/jest': + specifier: ^27.5.2 + version: 27.5.2 + '@types/node': + specifier: ^16.18.68 + version: 16.18.68 + '@types/react': + specifier: ^18.2.45 + version: 18.2.45 + '@types/react-dom': + specifier: ^18.2.17 + version: 18.2.18 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + react-scripts: + specifier: 5.0.1 + version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(react@18.2.0)(typescript@4.9.5) + typescript: + specifier: ^4.9.5 + version: 4.9.5 + web-vitals: + specifier: ^2.1.4 + version: 2.1.4 + devDependencies: + '@types/web-bluetooth': + specifier: ^0.0.20 + version: 0.0.20 + + packages/device-sdk-core: + dependencies: + reflect-metadata: + specifier: ^0.2.1 + version: 0.2.1 + tsyringe: + specifier: ^4.8.0 + version: 4.8.0 + devDependencies: + '@types/eslint': + specifier: ^8.44.9 + version: 8.44.9 + '@types/node': + specifier: ^20.10.5 + version: 20.10.5 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-config-dsdk: + specifier: workspace:* + version: link:../eslint-config + typescript: + specifier: ^5.3.3 + version: 5.3.3 + + packages/device-sdk-signer: + devDependencies: + '@types/eslint': + specifier: ^8.44.9 + version: 8.44.9 + '@types/node': + specifier: ^20.10.5 + version: 20.10.5 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-config-dsdk: + specifier: workspace:* + version: link:../eslint-config + typescript: + specifier: ^5.3.3 + version: 5.3.3 + + packages/device-sdk-trusted-apps: + devDependencies: + '@types/eslint': + specifier: ^8.44.9 + version: 8.44.9 + '@types/node': + specifier: ^20.10.5 + version: 20.10.5 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-config-dsdk: + specifier: workspace:* + version: link:../eslint-config + typescript: + specifier: ^5.3.3 + version: 5.3.3 + + packages/device-sdk-ui: + devDependencies: + '@types/eslint': + specifier: ^8.44.9 + version: 8.44.9 + '@types/node': + specifier: ^20.10.5 + version: 20.10.5 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-config-dsdk: + specifier: workspace:* + version: link:../eslint-config + typescript: + specifier: ^5.3.3 + version: 5.3.3 + + packages/eslint-config: + devDependencies: + '@vercel/style-guide': + specifier: ^5.1.0 + version: 5.1.0(eslint@8.56.0)(typescript@5.3.3) + eslint-config-turbo: + specifier: ^1.10.12 + version: 1.11.2(eslint@8.56.0) + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + /@adobe/css-tools@4.3.2: + resolution: {integrity: sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==} + dev: false + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: false + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.12.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: false + + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + + /@babel/core@7.23.6: + resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helpers': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.56.0): + resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.56.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: false + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.6): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: false + + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.6): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.6): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: false + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: false + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + dev: false + + /@babel/helpers@7.23.6: + resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + transitivePeerDependencies: + - supports-color + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-proposal-decorators@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.6): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + dev: false + + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.23.6): + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + dev: false + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.6): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: false + + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + dev: false + + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.6): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.6): + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/types': 7.23.6 + dev: false + + /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + dev: false + + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-runtime@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + dev: false + + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/preset-env@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.6) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.6) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) + core-js-compat: 3.34.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.6): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.6 + esutils: 2.0.3 + dev: false + + /@babel/preset-react@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.6) + dev: false + + /@babel/preset-typescript@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) + dev: false + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: false + + /@babel/runtime@7.23.6: + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: false + + /@csstools/normalize.css@12.0.0: + resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} + dev: false + + /@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.32): + resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /@csstools/postcss-color-function@1.1.1(postcss@8.4.32): + resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.32): + resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.32): + resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /@csstools/postcss-nested-calc@1.0.0(postcss@8.4.32): + resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.32): + resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.32): + resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.32): + resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.32): + resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} + engines: {node: ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-unset-value@1.0.2(postcss@8.4.32): + resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + dev: false + + /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.13): + resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.10 + dependencies: + postcss-selector-parser: 6.0.13 + dev: false + + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: false + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: false + + /@jest/console@27.5.1: + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + dev: false + + /@jest/console@28.1.3: + resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 20.10.5 + chalk: 4.1.2 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + slash: 3.0.0 + dev: false + + /@jest/core@27.5.1: + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 27.5.1 + jest-config: 27.5.1 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 + micromatch: 4.0.5 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: false + + /@jest/environment@27.5.1: + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + jest-mock: 27.5.1 + dev: false + + /@jest/fake-timers@27.5.1: + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 20.10.5 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 + dev: false + + /@jest/globals@27.5.1: + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 + dev: false + + /@jest/reporters@27.5.1: + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + jest-haste-map: 27.5.1 + jest-resolve: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 8.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@jest/schemas@28.1.3: + resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@sinclair/typebox': 0.24.51 + dev: false + + /@jest/source-map@27.5.1: + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.11 + source-map: 0.6.1 + dev: false + + /@jest/test-result@27.5.1: + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/types': 27.5.1 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: false + + /@jest/test-result@28.1.3: + resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/console': 28.1.3 + '@jest/types': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: false + + /@jest/test-sequencer@27.5.1: + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-runtime: 27.5.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@jest/transform@27.5.1: + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.23.6 + '@jest/types': 27.5.1 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.9.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@jest/types@27.5.1: + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.10.5 + '@types/yargs': 16.0.9 + chalk: 4.1.2 + dev: false + + /@jest/types@28.1.3: + resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.10.5 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + dev: false + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + dev: false + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@leichtgewicht/ip-codec@2.0.4: + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + dev: false + + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true + + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + dev: true + + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + dependencies: + eslint-scope: 5.1.1 + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.2 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + dev: true + + /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0): + resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <5.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.34.0 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.4.0 + loader-utils: 2.0.4 + react-refresh: 0.11.0 + schema-utils: 3.3.0 + source-map: 0.7.4 + webpack: 5.89.0 + webpack-dev-server: 4.15.1(webpack@5.89.0) + dev: false + + /@rollup/plugin-babel@5.3.1(@babel/core@7.23.6)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: false + + /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 2.79.1 + dev: false + + /@rollup/plugin-replace@2.4.2(rollup@2.79.1): + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + magic-string: 0.25.9 + rollup: 2.79.1 + dev: false + + /@rollup/pluginutils@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: false + + /@rushstack/eslint-patch@1.6.1: + resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} + + /@sinclair/typebox@0.24.51: + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + dev: false + + /@sinonjs/commons@1.8.6: + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + dependencies: + type-detect: 4.0.8 + dev: false + + /@sinonjs/fake-timers@8.1.0: + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + dependencies: + '@sinonjs/commons': 1.8.6 + dev: false + + /@surma/rollup-plugin-off-main-thread@2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + dependencies: + ejs: 3.1.9 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.10 + dev: false + + /@svgr/babel-plugin-add-jsx-attribute@5.4.0: + resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-remove-jsx-attribute@5.4.0: + resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1: + resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1: + resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-svg-dynamic-title@5.4.0: + resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-svg-em-dimensions@5.4.0: + resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-transform-react-native-svg@5.4.0: + resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-transform-svg-component@5.5.0: + resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-preset@5.5.0: + resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} + engines: {node: '>=10'} + dependencies: + '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 + '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 + '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 + '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 + '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 + '@svgr/babel-plugin-transform-svg-component': 5.5.0 + dev: false + + /@svgr/core@5.5.0: + resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} + engines: {node: '>=10'} + dependencies: + '@svgr/plugin-jsx': 5.5.0 + camelcase: 6.3.0 + cosmiconfig: 7.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@svgr/hast-util-to-babel-ast@5.5.0: + resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} + engines: {node: '>=10'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@svgr/plugin-jsx@5.5.0: + resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.23.6 + '@svgr/babel-preset': 5.5.0 + '@svgr/hast-util-to-babel-ast': 5.5.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@svgr/plugin-svgo@5.5.0: + resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} + engines: {node: '>=10'} + dependencies: + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + svgo: 1.3.2 + dev: false + + /@svgr/webpack@5.5.0: + resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.23.6) + '@babel/preset-env': 7.23.6(@babel/core@7.23.6) + '@babel/preset-react': 7.23.3(@babel/core@7.23.6) + '@svgr/core': 5.5.0 + '@svgr/plugin-jsx': 5.5.0 + '@svgr/plugin-svgo': 5.5.0 + loader-utils: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@testing-library/dom@8.20.1: + resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} + engines: {node: '>=12'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/runtime': 7.23.6 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: false + + /@testing-library/dom@9.3.3: + resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} + engines: {node: '>=14'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/runtime': 7.23.6 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: false + + /@testing-library/jest-dom@5.17.0: + resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} + engines: {node: '>=8', npm: '>=6', yarn: '>=1'} + dependencies: + '@adobe/css-tools': 4.3.2 + '@babel/runtime': 7.23.6 + '@types/testing-library__jest-dom': 5.14.9 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.5.16 + lodash: 4.17.21 + redent: 3.0.0 + dev: false + + /@testing-library/react@13.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} + engines: {node: '>=12'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@babel/runtime': 7.23.6 + '@testing-library/dom': 8.20.1 + '@types/react-dom': 18.2.18 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@testing-library/user-event@13.5.0(@testing-library/dom@9.3.3): + resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + dependencies: + '@babel/runtime': 7.23.6 + '@testing-library/dom': 9.3.3 + dev: false + + /@tootallnate/once@1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: false + + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: false + + /@types/aria-query@5.0.4: + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + dev: false + + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + dependencies: + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.4 + dev: false + + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + dependencies: + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + dev: false + + /@types/babel__traverse@7.20.4: + resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.10.5 + dev: false + + /@types/bonjour@3.5.13: + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + dependencies: + '@types/node': 20.10.5 + dev: false + + /@types/connect-history-api-fallback@1.5.4: + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + dependencies: + '@types/express-serve-static-core': 4.17.41 + '@types/node': 20.10.5 + dev: false + + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 20.10.5 + dev: false + + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + dependencies: + '@types/eslint': 8.44.9 + '@types/estree': 1.0.5 + dev: false + + /@types/eslint@8.44.9: + resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: false + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + /@types/express-serve-static-core@4.17.41: + resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} + dependencies: + '@types/node': 20.10.5 + '@types/qs': 6.9.10 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: false + + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.17.41 + '@types/qs': 6.9.10 + '@types/serve-static': 1.15.5 + dev: false + + /@types/fs-extra@11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 20.10.5 + dev: true + + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + dependencies: + '@types/node': 20.10.5 + dev: false + + /@types/html-minifier-terser@6.1.0: + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + dev: false + + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: false + + /@types/http-proxy@1.17.14: + resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} + dependencies: + '@types/node': 20.10.5 + dev: false + + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: false + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: false + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: false + + /@types/jest@27.5.2: + resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} + dependencies: + jest-matcher-utils: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + /@types/jsonfile@6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + dependencies: + '@types/node': 20.10.5 + dev: true + + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: false + + /@types/mime@3.0.4: + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + dev: false + + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + dev: true + + /@types/node-forge@1.3.10: + resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} + dependencies: + '@types/node': 20.10.5 + dev: false + + /@types/node@16.18.68: + resolution: {integrity: sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==} + dev: false + + /@types/node@18.19.3: + resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/node@20.10.5: + resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} + dependencies: + undici-types: 5.26.5 + + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true + + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: false + + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + dev: false + + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + dev: false + + /@types/ps-tree@1.1.6: + resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} + dev: true + + /@types/q@1.5.8: + resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} + dev: false + + /@types/qs@6.9.10: + resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} + dev: false + + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: false + + /@types/react-dom@18.2.18: + resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} + dependencies: + '@types/react': 18.2.45 + dev: false + + /@types/react@18.2.45: + resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} + dependencies: + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 + csstype: 3.1.3 + dev: false + + /@types/resolve@1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 20.10.5 + dev: false + + /@types/retry@0.12.0: + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + dev: false + + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + dev: false + + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.10.5 + dev: false + + /@types/serve-index@1.9.4: + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + dependencies: + '@types/express': 4.17.21 + dev: false + + /@types/serve-static@1.15.5: + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/mime': 3.0.4 + '@types/node': 20.10.5 + dev: false + + /@types/sockjs@0.3.36: + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + dependencies: + '@types/node': 20.10.5 + dev: false + + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: false + + /@types/testing-library__jest-dom@5.14.9: + resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} + dependencies: + '@types/jest': 27.5.2 + dev: false + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + dev: false + + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: true + + /@types/which@3.0.3: + resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} + dev: true + + /@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + dependencies: + '@types/node': 20.10.5 + dev: false + + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: false + + /@types/yargs@16.0.9: + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: false + + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: false + + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + debug: 4.3.4 + eslint: 8.56.0 + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + eslint: 8.56.0 + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/experimental-utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + debug: 4.3.4 + eslint: 8.56.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + eslint: 8.56.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + + /@typescript-eslint/scope-manager@6.14.0: + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 + dev: true + + /@typescript-eslint/type-utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + debug: 4.3.4 + eslint: 8.56.0 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.56.0 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /@typescript-eslint/types@6.14.0: + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + eslint: 8.56.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + eslint: 8.56.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + eslint: 8.56.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + /@typescript-eslint/visitor-keys@6.14.0: + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.14.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + /@vercel/style-guide@5.1.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} + engines: {node: '>=16'} + peerDependencies: + '@next/eslint-plugin-next': '>=12.3.0 <15' + eslint: '>=8.48.0 <9' + prettier: '>=3.0.0 <4' + typescript: '>=4.8.0 <6' + peerDependenciesMeta: + '@next/eslint-plugin-next': + optional: true + eslint: + optional: true + prettier: + optional: true + typescript: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-config-prettier: 9.1.0(eslint@8.56.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) + eslint-plugin-react: 7.33.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + eslint-plugin-testing-library: 6.2.0(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 48.0.1(eslint@8.56.0) + prettier-plugin-packagejson: 2.4.7 + typescript: 5.3.3 + transitivePeerDependencies: + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true + + /@webassemblyjs/ast@1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: false + + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: false + + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: false + + /@webassemblyjs/helper-buffer@1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + dev: false + + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: false + + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: false + + /@webassemblyjs/helper-wasm-section@1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + dev: false + + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: false + + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: false + + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: false + + /@webassemblyjs/wasm-edit@1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 + dev: false + + /@webassemblyjs/wasm-gen@1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: false + + /@webassemblyjs/wasm-opt@1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + dev: false + + /@webassemblyjs/wasm-parser@1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: false + + /@webassemblyjs/wast-printer@1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@xtuc/long': 4.2.2 + dev: false + + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: false + + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: false + + /abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + dev: false + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /acorn-globals@6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + dev: false + + /acorn-import-assertions@1.9.0(acorn@8.11.2): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.11.2 + dev: false + + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + + /acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: false + + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + + /address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + dev: false + + /adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + dependencies: + loader-utils: 2.0.4 + regex-parser: 2.2.11 + dev: false + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /ajv-formats@2.1.1(ajv@8.12.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: false + + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: false + + /ajv-keywords@5.1.0(ajv@8.12.0): + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + dependencies: + ajv: 8.12.0 + fast-deep-equal: 3.1.3 + dev: false + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: false + + /ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: false + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: false + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: false + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: false + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: false + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + dependencies: + deep-equal: 2.2.3 + dev: false + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + + /array-flatten@2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + dev: false + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + + /array.prototype.reduce@1.0.6: + resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: false + + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: false + + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: false + + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: false + + /autoprefixer@10.4.16(postcss@8.4.32): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001570 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + + /babel-jest@27.5.1(@babel/core@7.23.6): + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.23.6 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.5.1(@babel/core@7.23.6) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-loader@8.3.0(@babel/core@7.23.6)(webpack@5.89.0): + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.23.6 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.89.0 + dev: false + + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.22.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-jest-hoist@27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.4 + dev: false + + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.23.6 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + dev: false + + /babel-plugin-named-asset-import@0.3.8(@babel/core@7.23.6): + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 + dependencies: + '@babel/core': 7.23.6 + dev: false + + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.6): + resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.6): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + core-js-compat: 3.34.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.6): + resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-react-remove-prop-types@0.4.24: + resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} + dev: false + + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + dev: false + + /babel-preset-jest@27.5.1(@babel/core@7.23.6): + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + dev: false + + /babel-preset-react-app@10.0.1: + resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-decorators': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.6) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.6) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-runtime': 7.23.6(@babel/core@7.23.6) + '@babel/preset-env': 7.23.6(@babel/core@7.23.6) + '@babel/preset-react': 7.23.3(@babel/core@7.23.6) + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/runtime': 7.23.6 + babel-plugin-macros: 3.1.0 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + transitivePeerDependencies: + - supports-color + dev: false + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + dev: false + + /bfj@7.1.0: + resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} + engines: {node: '>= 8.0.0'} + dependencies: + bluebird: 3.7.2 + check-types: 11.2.3 + hoopy: 0.1.4 + jsonpath: 1.1.1 + tryer: 1.0.1 + dev: false + + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: true + + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: false + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false + + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: false + + /body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /bonjour-service@1.1.1: + resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} + dependencies: + array-flatten: 2.1.2 + dns-equal: 1.0.0 + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + dev: false + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.52 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: false + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /browser-process-hrtime@1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + dev: false + + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001570 + electron-to-chromium: 1.4.614 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: false + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: false + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + + /bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: false + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.2 + dev: false + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: false + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: false + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: false + + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001570 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: false + + /caniuse-lite@1.0.30001570: + resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + + /case-sensitive-paths-webpack-plugin@2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} + engines: {node: '>=4'} + dev: false + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: false + + /char-regex@2.0.1: + resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} + engines: {node: '>=12.20'} + dev: false + + /check-types@11.2.3: + resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} + dev: false + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: false + + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + dev: false + + /clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + dependencies: + source-map: 0.6.1 + dev: false + + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: false + + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: false + + /coa@2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} + engines: {node: '>= 4.0'} + dependencies: + '@types/q': 1.5.8 + chalk: 2.4.2 + q: 1.5.1 + dev: false + + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: false + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: false + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: false + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: false + + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: false + + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: false + + /common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: false + + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: false + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: false + + /connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + dev: false + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: false + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /core-js-compat@3.34.0: + resolution: {integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==} + dependencies: + browserslist: 4.22.2 + dev: false + + /core-js-pure@3.34.0: + resolution: {integrity: sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==} + requiresBuild: true + dev: false + + /core-js@3.34.0: + resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==} + requiresBuild: true + dev: false + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + + /cosmiconfig@6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: false + + /css-blank-pseudo@3.0.3(postcss@8.4.32): + resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /css-declaration-sorter@6.4.1(postcss@8.4.32): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.32 + dev: false + + /css-has-pseudo@3.0.4(postcss@8.4.32): + resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /css-loader@6.8.1(webpack@5.89.0): + resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.32) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.32) + postcss-modules-scope: 3.0.0(postcss@8.4.32) + postcss-modules-values: 4.0.0(postcss@8.4.32) + postcss-value-parser: 4.2.0 + semver: 7.5.4 + webpack: 5.89.0 + dev: false + + /css-minimizer-webpack-plugin@3.4.1(webpack@5.89.0): + resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@parcel/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + dependencies: + cssnano: 5.1.15(postcss@8.4.32) + jest-worker: 27.5.1 + postcss: 8.4.32 + schema-utils: 4.2.0 + serialize-javascript: 6.0.1 + source-map: 0.6.1 + webpack: 5.89.0 + dev: false + + /css-prefers-color-scheme@6.0.3(postcss@8.4.32): + resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + dev: false + + /css-select-base-adapter@0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} + dev: false + + /css-select@2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} + dependencies: + boolbase: 1.0.0 + css-what: 3.4.2 + domutils: 1.7.0 + nth-check: 1.0.2 + dev: false + + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: false + + /css-tree@1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.4 + source-map: 0.6.1 + dev: false + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: false + + /css-what@3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} + engines: {node: '>= 6'} + dev: false + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + + /css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: false + + /cssdb@7.9.1: + resolution: {integrity: sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==} + dev: false + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /cssnano-preset-default@5.2.14(postcss@8.4.32): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.32) + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-calc: 8.2.4(postcss@8.4.32) + postcss-colormin: 5.3.1(postcss@8.4.32) + postcss-convert-values: 5.1.3(postcss@8.4.32) + postcss-discard-comments: 5.1.2(postcss@8.4.32) + postcss-discard-duplicates: 5.1.0(postcss@8.4.32) + postcss-discard-empty: 5.1.1(postcss@8.4.32) + postcss-discard-overridden: 5.1.0(postcss@8.4.32) + postcss-merge-longhand: 5.1.7(postcss@8.4.32) + postcss-merge-rules: 5.1.4(postcss@8.4.32) + postcss-minify-font-values: 5.1.0(postcss@8.4.32) + postcss-minify-gradients: 5.1.1(postcss@8.4.32) + postcss-minify-params: 5.1.4(postcss@8.4.32) + postcss-minify-selectors: 5.2.1(postcss@8.4.32) + postcss-normalize-charset: 5.1.0(postcss@8.4.32) + postcss-normalize-display-values: 5.1.0(postcss@8.4.32) + postcss-normalize-positions: 5.1.1(postcss@8.4.32) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.32) + postcss-normalize-string: 5.1.0(postcss@8.4.32) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.32) + postcss-normalize-unicode: 5.1.1(postcss@8.4.32) + postcss-normalize-url: 5.1.0(postcss@8.4.32) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.32) + postcss-ordered-values: 5.1.3(postcss@8.4.32) + postcss-reduce-initial: 5.1.2(postcss@8.4.32) + postcss-reduce-transforms: 5.1.0(postcss@8.4.32) + postcss-svgo: 5.1.0(postcss@8.4.32) + postcss-unique-selectors: 5.1.1(postcss@8.4.32) + dev: false + + /cssnano-utils@3.1.0(postcss@8.4.32): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /cssnano@5.1.15(postcss@8.4.32): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.32) + lilconfig: 2.1.0 + postcss: 8.4.32 + yaml: 1.10.2 + dev: false + + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: false + + /cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: false + + /cssom@0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + dev: false + + /cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + dev: false + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: false + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true + + /data-urls@2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + dev: false + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: false + + /dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: false + + /deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.2 + is-arguments: 1.1.1 + is-array-buffer: 3.0.2 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: false + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: false + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + dependencies: + execa: 5.1.1 + dev: false + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: false + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: false + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + dev: true + + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: false + + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false + + /detect-port-alt@1.1.6: + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} + hasBin: true + dependencies: + address: 1.2.2 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + dev: false + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: false + + /diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: false + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: false + + /dns-equal@1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + dev: false + + /dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': 2.0.4 + dev: false + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + + /dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dev: false + + /dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + dependencies: + utila: 0.4.0 + dev: false + + /dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + dev: false + + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: false + + /domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: false + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: false + + /domexception@2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead + dependencies: + webidl-conversions: 5.0.0 + dev: false + + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: false + + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: false + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: false + + /dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dev: false + + /dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + dev: false + + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + dev: true + + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: false + + /electron-to-chromium@1.4.614: + resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} + + /emittery@0.10.2: + resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} + engines: {node: '>=12'} + dev: false + + /emittery@0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: false + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: false + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + + /error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + dev: false + + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + 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.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + 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.13 + + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: false + + /es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.2 + is-set: 2.0.2 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: false + + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + + /es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + dev: false + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: false + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + dev: false + + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: false + + /eslint-config-prettier@9.1.0(eslint@8.56.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5): + resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} + engines: {node: '>=14.0.0'} + peerDependencies: + eslint: ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + babel-preset-react-app: 10.0.1 + confusing-browser-globals: 1.0.11 + eslint: 8.56.0 + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-react: 7.33.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + eslint-plugin-testing-library: 5.11.1(eslint@8.56.0)(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - jest + - supports-color + dev: false + + /eslint-config-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + eslint: 8.56.0 + eslint-plugin-turbo: 1.11.2(eslint@8.56.0) + dev: true + + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + dependencies: + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.56.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + escape-string-regexp: 1.0.5 + eslint: 8.56.0 + ignore: 5.3.0 + dev: true + + /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0): + resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@babel/plugin-syntax-flow': ^7.14.5 + '@babel/plugin-transform-react-jsx': ^7.14.9 + eslint: ^8.1.0 + dependencies: + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + eslint: 8.56.0 + lodash: 4.17.21 + string-natural-compare: 3.0.1 + dev: false + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5): + resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5) + '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + eslint: 8.56.0 + jest: 27.5.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.6 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.15 + eslint: 8.56.0 + hasown: 2.0.0 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0): + resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + peerDependencies: + eslint: '>=7' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + dependencies: + eslint: 8.56.0 + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + dev: true + + /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.56.0 + + /eslint-plugin-react@7.33.2(eslint@8.56.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.56.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + + /eslint-plugin-testing-library@5.11.1(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + dev: true + + /eslint-plugin-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + dotenv: 16.0.3 + eslint: 8.56.0 + dev: true + + /eslint-plugin-unicorn@48.0.1(eslint@8.56.0): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.56.0 + esquery: 1.5.0 + indent-string: 4.0.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.27 + regjsparser: 0.10.0 + semver: 7.5.4 + strip-indent: 3.0.0 + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /eslint-webpack-plugin@3.2.0(eslint@8.56.0)(webpack@5.89.0): + resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + webpack: ^5.0.0 + dependencies: + '@types/eslint': 8.44.9 + eslint: 8.56.0 + jest-worker: 28.1.3 + micromatch: 4.0.5 + normalize-path: 3.0.0 + schema-utils: 4.2.0 + webpack: 5.89.0 + dev: false + + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + + /esprima@1.2.2: + resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: false + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + dev: true + + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + 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 + dev: true + + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: false + + /expect@27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-get-type: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + dev: false + + /express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + + /faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: 0.7.4 + dev: false + + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: false + + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + + /file-loader@6.2.0(webpack@5.89.0): + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.89.0 + dev: false + + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: false + + /filesize@8.0.7: + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} + dev: false + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: false + + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: false + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + + /follow-redirects@1.15.3: + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + + /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0): + resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@babel/code-frame': 7.23.5 + '@types/json-schema': 7.0.15 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 6.0.0 + deepmerge: 4.3.1 + eslint: 8.56.0 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.5.3 + minimatch: 3.1.2 + schema-utils: 2.7.0 + semver: 7.5.4 + tapable: 1.1.3 + typescript: 4.9.5 + webpack: 5.89.0 + dev: false + + /form-data@3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: true + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: false + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + dev: true + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + + /fs-monkey@1.0.5: + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} + dev: false + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + /fx@31.0.0: + resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==} + hasBin: true + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + + /get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: false + + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: false + + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: false + + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.3 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.3 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: false + + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: false + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 3.0.0 + + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + /gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: false + + /handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: false + + /harmony-reflect@1.6.2: + resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} + dev: false + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: false + + /hoopy@0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} + engines: {node: '>= 6.0.0'} + dev: false + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + dependencies: + inherits: 2.0.3 + obuf: 1.1.2 + readable-stream: 2.3.8 + wbuf: 1.7.3 + dev: false + + /html-encoding-sniffer@2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + dependencies: + whatwg-encoding: 1.0.5 + dev: false + + /html-entities@2.4.0: + resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} + dev: false + + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: false + + /html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.26.0 + dev: false + + /html-webpack-plugin@5.5.4(webpack@5.89.0): + resolution: {integrity: sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==} + engines: {node: '>=10.13.0'} + peerDependencies: + webpack: ^5.20.0 + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + webpack: 5.89.0 + dev: false + + /htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + dev: false + + /http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: false + + /http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: false + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + dev: false + + /http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /http-proxy-middleware@2.0.6(@types/express@4.17.21): + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + dependencies: + '@types/express': 4.17.21 + '@types/http-proxy': 1.17.14 + http-proxy: 1.18.1 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.5 + transitivePeerDependencies: + - debug + dev: false + + /http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.3 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + dev: false + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /icss-utils@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + dev: false + + /idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + dev: false + + /identity-obj-proxy@3.0.0: + resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} + engines: {node: '>=4'} + dependencies: + harmony-reflect: 1.6.2 + dev: false + + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + + /immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + /import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: false + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: false + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + engines: {node: '>= 10'} + dev: false + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: false + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.5 + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: false + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: false + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: false + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + /is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: false + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: false + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + + /is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: false + + /is-root@2.1.0: + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} + dev: false + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: false + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: false + + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.23.6 + '@babel/parser': 7.23.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: false + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: false + + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: false + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: false + + /jest-changed-files@27.5.1: + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + execa: 5.1.1 + throat: 6.0.2 + dev: false + + /jest-circus@27.5.1: + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-cli@27.5.1: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.1.0 + jest-config: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + prompts: 2.4.2 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: false + + /jest-config@27.5.1: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@jest/test-sequencer': 27.5.1 + '@jest/types': 27.5.1 + babel-jest: 27.5.1(@babel/core@7.23.6) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-get-type: 27.5.1 + jest-jasmine2: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runner: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 27.5.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: false + + /jest-diff@27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-docblock@27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + detect-newline: 3.1.0 + dev: false + + /jest-each@27.5.1: + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + jest-get-type: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-environment-jsdom@27.5.1: + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + jest-mock: 27.5.1 + jest-util: 27.5.1 + jsdom: 16.7.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: false + + /jest-environment-node@27.5.1: + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + jest-mock: 27.5.1 + jest-util: 27.5.1 + dev: false + + /jest-get-type@27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: false + + /jest-haste-map@27.5.1: + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.10.5 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 27.5.1 + jest-serializer: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /jest-jasmine2@27.5.1: + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + co: 4.6.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-leak-detector@27.5.1: + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-matcher-utils@27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-message-util@27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 27.5.1 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: false + + /jest-message-util@28.1.3: + resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 28.1.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 28.1.3 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: false + + /jest-mock@27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + dev: false + + /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 27.5.1 + dev: false + + /jest-regex-util@27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: false + + /jest-regex-util@28.0.2: + resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: false + + /jest-resolve-dependencies@27.5.1: + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-regex-util: 27.5.1 + jest-snapshot: 27.5.1 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-resolve@27.5.1: + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) + jest-util: 27.5.1 + jest-validate: 27.5.1 + resolve: 1.22.8 + resolve.exports: 1.1.1 + slash: 3.0.0 + dev: false + + /jest-runner@27.5.1: + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + emittery: 0.8.1 + graceful-fs: 4.2.11 + jest-docblock: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-haste-map: 27.5.1 + jest-leak-detector: 27.5.1 + jest-message-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runtime: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + source-map-support: 0.5.21 + throat: 6.0.2 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: false + + /jest-runtime@27.5.1: + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/globals': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + execa: 5.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-serializer@27.5.1: + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/node': 20.10.5 + graceful-fs: 4.2.11 + dev: false + + /jest-snapshot@27.5.1: + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.23.6 + '@babel/generator': 7.23.6 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__traverse': 7.20.4 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + chalk: 4.1.2 + expect: 27.5.1 + graceful-fs: 4.2.11 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + jest-haste-map: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + natural-compare: 1.4.0 + pretty-format: 27.5.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-util@27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: false + + /jest-util@28.1.3: + resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 20.10.5 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: false + + /jest-validate@27.5.1: + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 27.5.1 + leven: 3.1.0 + pretty-format: 27.5.1 + dev: false + + /jest-watch-typeahead@1.1.0(jest@27.5.1): + resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + jest: ^27.0.0 || ^28.0.0 + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest: 27.5.1 + jest-regex-util: 28.0.2 + jest-watcher: 28.1.3 + slash: 4.0.0 + string-length: 5.0.1 + strip-ansi: 7.1.0 + dev: false + + /jest-watcher@27.5.1: + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest-util: 27.5.1 + string-length: 4.0.2 + dev: false + + /jest-watcher@28.1.3: + resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 20.10.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.10.2 + jest-util: 28.1.3 + string-length: 4.0.2 + dev: false + + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.10.5 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: false + + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.10.5 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: false + + /jest-worker@28.1.3: + resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@types/node': 20.10.5 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: false + + /jest@27.5.1: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + import-local: 3.1.0 + jest-cli: 27.5.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: false + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: false + + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /jsdom@16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.11.2 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.4.3 + domexception: 2.0.1 + escodegen: 2.1.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.9 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: false + + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: false + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + /jsonpath@1.1.1: + resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} + dependencies: + esprima: 1.2.2 + static-eval: 2.0.2 + underscore: 1.12.1 + dev: false + + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: false + + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.1.7 + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: false + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: false + + /klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + dev: false + + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + dependencies: + language-subtag-registry: 0.3.22 + + /launch-editor@2.6.1: + resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} + dependencies: + picocolors: 1.0.0 + shell-quote: 1.8.1 + dev: false + + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: false + + /levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: false + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: false + + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + dev: false + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: false + + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: false + + /loader-utils@3.2.1: + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} + dev: false + + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: false + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: false + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: false + + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: false + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.2 + dev: false + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + dev: false + + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: false + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: false + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: false + + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: false + + /map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + dev: true + + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: false + + /mdn-data@2.0.4: + resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} + dev: false + + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.5 + dev: false + + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: false + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + /mini-css-extract-plugin@2.7.6(webpack@5.89.0): + resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + schema-utils: 4.2.0 + webpack: 5.89.0 + dev: false + + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + dependencies: + dns-packet: 5.6.1 + thunky: 1.1.0 + dev: false + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: false + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: false + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: false + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + dev: false + + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: true + + /node-fetch@3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: false + + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: false + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: false + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /nth-check@1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + dependencies: + boolbase: 1.0.0 + dev: false + + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: false + + /nwsapi@2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + dev: false + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + /object-is@1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + dev: false + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + + /object.getownpropertydescriptors@2.1.7: + resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} + engines: {node: '>= 0.8'} + dependencies: + array.prototype.reduce: 1.0.6 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + safe-array-concat: 1.0.1 + dev: false + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.3 + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + + /obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: false + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + dev: false + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + + /p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + dev: false + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + dev: false + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: false + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: false + + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: false + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + /path@0.12.7: + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} + dependencies: + process: 0.11.10 + util: 0.10.4 + dev: true + + /pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + dependencies: + through: 2.3.8 + dev: true + + /performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: false + + /picocolors@0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + dev: false + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: false + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: false + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: false + + /pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + dependencies: + find-up: 3.0.0 + dev: false + + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.32): + resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-browser-comments@4.0.0(browserslist@4.22.2)(postcss@8.4.32): + resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} + engines: {node: '>=8'} + peerDependencies: + browserslist: '>=4' + postcss: '>=8' + dependencies: + browserslist: 4.22.2 + postcss: 8.4.32 + dev: false + + /postcss-calc@8.2.4(postcss@8.4.32): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-clamp@4.1.0(postcss@8.4.32): + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-functional-notation@4.2.4(postcss@8.4.32): + resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-hex-alpha@8.0.4(postcss@8.4.32): + resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-rebeccapurple@7.1.1(postcss@8.4.32): + resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-colormin@5.3.1(postcss@8.4.32): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-convert-values@5.1.3(postcss@8.4.32): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-media@8.0.2(postcss@8.4.32): + resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-properties@12.1.11(postcss@8.4.32): + resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-selectors@6.0.3(postcss@8.4.32): + resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-dir-pseudo-class@6.0.5(postcss@8.4.32): + resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-discard-comments@5.1.2(postcss@8.4.32): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-discard-duplicates@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-discard-empty@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-discard-overridden@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-double-position-gradients@3.1.2(postcss@8.4.32): + resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-env-function@4.0.6(postcss@8.4.32): + resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-flexbugs-fixes@5.0.2(postcss@8.4.32): + resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} + peerDependencies: + postcss: ^8.1.4 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-focus-visible@6.0.4(postcss@8.4.32): + resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-focus-within@5.0.4(postcss@8.4.32): + resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-font-variant@5.0.0(postcss@8.4.32): + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-gap-properties@3.0.5(postcss@8.4.32): + resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-image-set-function@4.0.7(postcss@8.4.32): + resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-import@15.1.0(postcss@8.4.32): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: false + + /postcss-initial@4.0.1(postcss@8.4.32): + resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-js@4.0.1(postcss@8.4.32): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.32 + dev: false + + /postcss-lab-function@4.2.1(postcss@8.4.32): + resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-load-config@4.0.2(postcss@8.4.32): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.0.0 + postcss: 8.4.32 + yaml: 2.3.4 + dev: false + + /postcss-loader@6.2.1(postcss@8.4.32)(webpack@5.89.0): + resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + dependencies: + cosmiconfig: 7.1.0 + klona: 2.0.6 + postcss: 8.4.32 + semver: 7.5.4 + webpack: 5.89.0 + dev: false + + /postcss-logical@5.0.4(postcss@8.4.32): + resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-media-minmax@5.0.0(postcss@8.4.32): + resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-merge-longhand@5.1.7(postcss@8.4.32): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.32) + dev: false + + /postcss-merge-rules@5.1.4(postcss@8.4.32): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-minify-font-values@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-gradients@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-params@5.1.4(postcss@8.4.32): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-selectors@5.2.1(postcss@8.4.32): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-modules-extract-imports@3.0.0(postcss@8.4.32): + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-modules-local-by-default@4.0.3(postcss@8.4.32): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-modules-scope@3.0.0(postcss@8.4.32): + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-modules-values@4.0.0(postcss@8.4.32): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.32) + postcss: 8.4.32 + dev: false + + /postcss-nested@6.0.1(postcss@8.4.32): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-nesting@10.2.0(postcss@8.4.32): + resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-normalize-charset@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-normalize-display-values@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-positions@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-string@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-unicode@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-url@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-whitespace@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize@10.0.1(browserslist@4.22.2)(postcss@8.4.32): + resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} + engines: {node: '>= 12'} + peerDependencies: + browserslist: '>= 4' + postcss: '>= 8' + dependencies: + '@csstools/normalize.css': 12.0.0 + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-browser-comments: 4.0.0(browserslist@4.22.2)(postcss@8.4.32) + sanitize.css: 13.0.0 + dev: false + + /postcss-opacity-percentage@1.1.3(postcss@8.4.32): + resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-ordered-values@5.1.3(postcss@8.4.32): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-overflow-shorthand@3.0.4(postcss@8.4.32): + resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-page-break@3.0.4(postcss@8.4.32): + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-place@7.0.5(postcss@8.4.32): + resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-preset-env@7.8.3(postcss@8.4.32): + resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.32) + '@csstools/postcss-color-function': 1.1.1(postcss@8.4.32) + '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.32) + '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.32) + '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.32) + '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.32) + '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.32) + '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.32) + '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.32) + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.32) + '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.32) + '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.32) + '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.32) + autoprefixer: 10.4.16(postcss@8.4.32) + browserslist: 4.22.2 + css-blank-pseudo: 3.0.3(postcss@8.4.32) + css-has-pseudo: 3.0.4(postcss@8.4.32) + css-prefers-color-scheme: 6.0.3(postcss@8.4.32) + cssdb: 7.9.1 + postcss: 8.4.32 + postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.32) + postcss-clamp: 4.1.0(postcss@8.4.32) + postcss-color-functional-notation: 4.2.4(postcss@8.4.32) + postcss-color-hex-alpha: 8.0.4(postcss@8.4.32) + postcss-color-rebeccapurple: 7.1.1(postcss@8.4.32) + postcss-custom-media: 8.0.2(postcss@8.4.32) + postcss-custom-properties: 12.1.11(postcss@8.4.32) + postcss-custom-selectors: 6.0.3(postcss@8.4.32) + postcss-dir-pseudo-class: 6.0.5(postcss@8.4.32) + postcss-double-position-gradients: 3.1.2(postcss@8.4.32) + postcss-env-function: 4.0.6(postcss@8.4.32) + postcss-focus-visible: 6.0.4(postcss@8.4.32) + postcss-focus-within: 5.0.4(postcss@8.4.32) + postcss-font-variant: 5.0.0(postcss@8.4.32) + postcss-gap-properties: 3.0.5(postcss@8.4.32) + postcss-image-set-function: 4.0.7(postcss@8.4.32) + postcss-initial: 4.0.1(postcss@8.4.32) + postcss-lab-function: 4.2.1(postcss@8.4.32) + postcss-logical: 5.0.4(postcss@8.4.32) + postcss-media-minmax: 5.0.0(postcss@8.4.32) + postcss-nesting: 10.2.0(postcss@8.4.32) + postcss-opacity-percentage: 1.1.3(postcss@8.4.32) + postcss-overflow-shorthand: 3.0.4(postcss@8.4.32) + postcss-page-break: 3.0.4(postcss@8.4.32) + postcss-place: 7.0.5(postcss@8.4.32) + postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.32) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.32) + postcss-selector-not: 6.0.1(postcss@8.4.32) + postcss-value-parser: 4.2.0 + dev: false + + /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.32): + resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-reduce-initial@5.1.2(postcss@8.4.32): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + postcss: 8.4.32 + dev: false + + /postcss-reduce-transforms@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.32): + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + dependencies: + postcss: 8.4.32 + dev: false + + /postcss-selector-not@6.0.1(postcss@8.4.32): + resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: false + + /postcss-svgo@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: false + + /postcss-unique-selectors@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false + + /postcss@7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + dev: false + + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + + /prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: false + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + /prettier-plugin-packagejson@2.4.7: + resolution: {integrity: sha512-/n1HGcBbuJyTlD3tb2/tW1mT5WIR6FCo+bAijHF6pNoSBf8YoxoskawjSY2ku9/8d6mdzci7oMchziI7CYEWYg==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true + dependencies: + sort-package-json: 2.6.0 + synckit: 0.8.6 + dev: true + + /pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: false + + /pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} + dependencies: + lodash: 4.17.21 + renderkid: 3.0.0 + dev: false + + /pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: false + + /pretty-format@28.1.3: + resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: false + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + + /promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: false + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: false + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /ps-tree@1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true + dependencies: + event-stream: 3.3.4 + dev: true + + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: false + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + /q@1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + dev: false + + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: false + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + dependencies: + performance-now: 2.1.0 + dev: false + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /react-app-polyfill@3.0.0: + resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} + engines: {node: '>=14'} + dependencies: + core-js: 3.34.0 + object-assign: 4.1.1 + promise: 8.3.0 + raf: 3.4.1 + regenerator-runtime: 0.13.11 + whatwg-fetch: 3.6.20 + dev: false + + /react-dev-utils@12.0.1(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0): + resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=2.7' + webpack: '>=4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/code-frame': 7.23.5 + address: 1.2.2 + browserslist: 4.22.2 + chalk: 4.1.2 + cross-spawn: 7.0.3 + detect-port-alt: 1.1.6 + escape-string-regexp: 4.0.0 + filesize: 8.0.7 + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0) + global-modules: 2.0.0 + globby: 11.1.0 + gzip-size: 6.0.0 + immer: 9.0.21 + is-root: 2.1.0 + loader-utils: 3.2.1 + open: 8.4.2 + pkg-up: 3.1.0 + prompts: 2.4.2 + react-error-overlay: 6.0.11 + recursive-readdir: 2.2.3 + shell-quote: 1.8.1 + strip-ansi: 6.0.1 + text-table: 0.2.0 + typescript: 4.9.5 + webpack: 5.89.0 + transitivePeerDependencies: + - eslint + - supports-color + - vue-template-compiler + dev: false + + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-error-overlay@6.0.11: + resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} + dev: false + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: false + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: false + + /react-refresh@0.11.0: + resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} + engines: {node: '>=0.10.0'} + dev: false + + /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(react@18.2.0)(typescript@4.9.5): + resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} + engines: {node: '>=14.0.0'} + hasBin: true + peerDependencies: + eslint: '*' + react: '>= 16' + typescript: ^3.2.1 || ^4 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0) + '@svgr/webpack': 5.5.0 + babel-jest: 27.5.1(@babel/core@7.23.6) + babel-loader: 8.3.0(@babel/core@7.23.6)(webpack@5.89.0) + babel-plugin-named-asset-import: 0.3.8(@babel/core@7.23.6) + babel-preset-react-app: 10.0.1 + bfj: 7.1.0 + browserslist: 4.22.2 + camelcase: 6.3.0 + case-sensitive-paths-webpack-plugin: 2.4.0 + css-loader: 6.8.1(webpack@5.89.0) + css-minimizer-webpack-plugin: 3.4.1(webpack@5.89.0) + dotenv: 10.0.0 + dotenv-expand: 5.1.0 + eslint: 8.56.0 + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5) + eslint-webpack-plugin: 3.2.0(eslint@8.56.0)(webpack@5.89.0) + file-loader: 6.2.0(webpack@5.89.0) + fs-extra: 10.1.0 + html-webpack-plugin: 5.5.4(webpack@5.89.0) + identity-obj-proxy: 3.0.0 + jest: 27.5.1 + jest-resolve: 27.5.1 + jest-watch-typeahead: 1.1.0(jest@27.5.1) + mini-css-extract-plugin: 2.7.6(webpack@5.89.0) + postcss: 8.4.32 + postcss-flexbugs-fixes: 5.0.2(postcss@8.4.32) + postcss-loader: 6.2.1(postcss@8.4.32)(webpack@5.89.0) + postcss-normalize: 10.0.1(browserslist@4.22.2)(postcss@8.4.32) + postcss-preset-env: 7.8.3(postcss@8.4.32) + prompts: 2.4.2 + react: 18.2.0 + react-app-polyfill: 3.0.0 + react-dev-utils: 12.0.1(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0) + react-refresh: 0.11.0 + resolve: 1.22.8 + resolve-url-loader: 4.0.0 + sass-loader: 12.6.0(webpack@5.89.0) + semver: 7.5.4 + source-map-loader: 3.0.2(webpack@5.89.0) + style-loader: 3.3.3(webpack@5.89.0) + tailwindcss: 3.3.6 + terser-webpack-plugin: 5.3.9(webpack@5.89.0) + typescript: 4.9.5 + webpack: 5.89.0 + webpack-dev-server: 4.15.1(webpack@5.89.0) + webpack-manifest-plugin: 4.1.1(webpack@5.89.0) + workbox-webpack-plugin: 6.6.0(webpack@5.89.0) + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - '@parcel/css' + - '@swc/core' + - '@types/babel__core' + - '@types/webpack' + - bufferutil + - canvas + - clean-css + - csso + - debug + - esbuild + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - fibers + - node-notifier + - node-sass + - rework + - rework-visit + - sass + - sass-embedded + - sockjs-client + - supports-color + - ts-node + - type-fest + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-hot-middleware + - webpack-plugin-serve + dev: false + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: false + + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.3 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.3 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + dependencies: + minimatch: 3.1.2 + dev: false + + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: false + + /reflect-metadata@0.2.1: + resolution: {integrity: sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==} + dev: false + + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: false + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: false + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.6 + dev: false + + /regex-parser@2.2.11: + resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} + dev: false + + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: false + + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: false + + /relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: false + + /renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 6.0.1 + dev: false + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false + + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: false + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + + /resolve-url-loader@4.0.0: + resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} + engines: {node: '>=8.9'} + peerDependencies: + rework: 1.0.1 + rework-visit: 1.0.0 + peerDependenciesMeta: + rework: + optional: true + rework-visit: + optional: true + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 7.0.39 + source-map: 0.6.1 + dev: false + + /resolve.exports@1.1.1: + resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + engines: {node: '>=10'} + dev: false + + /resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: false + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + + /rollup-plugin-terser@7.0.2(rollup@2.79.1): + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.23.5 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.26.0 + dev: false + + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-regex: 1.1.4 + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /sanitize.css@13.0.0: + resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} + dev: false + + /sass-loader@12.6.0(webpack@5.89.0): + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + klona: 2.0.6 + neo-async: 2.6.2 + webpack: 5.89.0 + dev: false + + /sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: false + + /saxes@5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + dependencies: + xmlchars: 2.2.0 + dev: false + + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /schema-utils@2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: false + + /schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: false + + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: false + + /schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) + dev: false + + /select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: false + + /selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + dependencies: + '@types/node-forge': 1.3.10 + node-forge: 1.3.1 + dev: false + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: false + + /serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + dependencies: + randombytes: 2.1.0 + dev: false + + /serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + + /setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: false + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: false + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: false + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + /sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + dev: false + + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true + + /sort-package-json@2.6.0: + resolution: {integrity: sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==} + hasBin: true + dependencies: + detect-indent: 7.0.1 + detect-newline: 4.0.1 + get-stdin: 9.0.0 + git-hooks-list: 3.1.0 + globby: 13.2.2 + is-plain-obj: 4.1.0 + sort-object-keys: 1.1.3 + dev: true + + /source-list-map@2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: false + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map-loader@3.0.2(webpack@5.89.0): + resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + abab: 2.0.6 + iconv-lite: 0.6.3 + source-map-js: 1.0.2 + webpack: 5.89.0 + dev: false + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: false + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: false + + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: false + + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: false + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + dev: true + + /spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.4 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.2 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: false + + /spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.4 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /split@0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + dependencies: + through: 2.3.8 + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false + + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: false + + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: false + + /stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: false + + /static-eval@2.0.2: + resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} + dependencies: + escodegen: 1.14.3 + dev: false + + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.6 + dev: false + + /stream-combiner@0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + dependencies: + duplexer: 0.1.2 + dev: true + + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: false + + /string-length@5.0.1: + resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} + engines: {node: '>=12.20'} + dependencies: + char-regex: 2.0.1 + strip-ansi: 7.1.0 + dev: false + + /string-natural-compare@3.0.1: + resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: false + + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 + side-channel: 1.0.4 + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + dev: false + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: false + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: false + + /strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + dev: false + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + /style-loader@3.3.3(webpack@5.89.0): + resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + webpack: 5.89.0 + dev: false + + /stylehacks@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: false + + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: false + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: false + + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: false + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + dev: false + + /svgo@1.3.2: + resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} + engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true + dependencies: + chalk: 2.4.2 + coa: 2.0.2 + css-select: 2.1.0 + css-select-base-adapter: 0.1.1 + css-tree: 1.0.0-alpha.37 + csso: 4.2.0 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + object.values: 1.1.7 + sax: 1.2.4 + stable: 0.1.8 + unquote: 1.1.1 + util.promisify: 1.0.1 + dev: false + + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: false + + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: false + + /synckit@0.8.6: + resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 + dev: true + + /tailwindcss@3.3.6: + resolution: {integrity: sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.32 + postcss-import: 15.1.0(postcss@8.4.32) + postcss-js: 4.0.1(postcss@8.4.32) + postcss-load-config: 4.0.2(postcss@8.4.32) + postcss-nested: 6.0.1(postcss@8.4.32) + postcss-selector-parser: 6.0.13 + resolve: 1.22.8 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: false + + /tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: false + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + /temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + dev: false + + /tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: false + + /terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + dev: false + + /terser-webpack-plugin@5.3.9(webpack@5.89.0): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.26.0 + webpack: 5.89.0 + dev: false + + /terser@5.26.0: + resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.11.2 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: false + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: false + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: false + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: false + + /throat@6.0.2: + resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} + dev: false + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: false + + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: false + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: false + + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.1 + dev: false + + /tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + dependencies: + punycode: 2.3.1 + dev: false + + /tryer@1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} + dev: false + + /ts-api-utils@1.0.3(typescript@5.3.3): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.3.3 + dev: true + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: false + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + /tsutils@3.21.0(typescript@4.9.5): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.9.5 + dev: false + + /tsutils@3.21.0(typescript@5.3.3): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.3.3 + dev: true + + /tsyringe@4.8.0: + resolution: {integrity: sha512-YB1FG+axdxADa3ncEtRnQCFq/M0lALGLxSZeVNbTU8NqhOVc51nnv2CISTcvc1kyv6EGPtXVr0v6lWeDxiijOA==} + engines: {node: '>= 6.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /turbo-darwin-64@1.11.2: + resolution: {integrity: sha512-toFmRG/adriZY3hOps7nYCfqHAS+Ci6xqgX3fbo82kkLpC6OBzcXnleSwuPqjHVAaRNhVoB83L5njcE9Qwi2og==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-darwin-arm64@1.11.2: + resolution: {integrity: sha512-FCsEDZ8BUSFYEOSC3rrARQrj7x2VOrmVcfrMUIhexTxproRh4QyMxLfr6LALk4ymx6jbDCxWa6Szal8ckldFbA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-64@1.11.2: + resolution: {integrity: sha512-Vzda/o/QyEske5CxLf0wcu7UUS+7zB90GgHZV4tyN+WZtoouTvbwuvZ3V6b5Wgd3OJ/JwWR0CXDK7Sf4VEMr7A==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-arm64@1.11.2: + resolution: {integrity: sha512-bRLwovQRz0yxDZrM4tQEAYV0fBHEaTzUF0JZ8RG1UmZt/CqtpnUrJpYb1VK8hj1z46z9YehARpYCwQ2K0qU4yw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-64@1.11.2: + resolution: {integrity: sha512-LgTWqkHAKgyVuLYcEPxZVGPInTjjeCnN5KQMdJ4uQZ+xMDROvMFS2rM93iQl4ieDJgidwHCxxCxaU9u8c3d/Kg==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-arm64@1.11.2: + resolution: {integrity: sha512-829aVBU7IX0c/B4G7g1VI8KniAGutHhIupkYMgF6xPkYVev2G3MYe6DMS/vsLt9GGM9ulDtdWxWrH5P2ngK8IQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo@1.11.2: + resolution: {integrity: sha512-jPC7LVQJzebs5gWf8FmEvsvXGNyKbN+O9qpvv98xpNaM59aS0/Irhd0H0KbcqnXfsz7ETlzOC3R+xFWthC4Z8A==} + hasBin: true + optionalDependencies: + turbo-darwin-64: 1.11.2 + turbo-darwin-arm64: 1.11.2 + turbo-linux-64: 1.11.2 + turbo-linux-arm64: 1.11.2 + turbo-windows-64: 1.11.2 + turbo-windows-arm64: 1.11.2 + dev: true + + /type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: false + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: false + + /type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + dev: false + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: false + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.12 + + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: false + + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: false + + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + /underscore@1.12.1: + resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} + dev: false + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: false + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: false + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: false + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: false + + /unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: false + + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: false + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /unquote@1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + dev: false + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: false + + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /util.promisify@1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.3 + has-symbols: 1.0.3 + object.getownpropertydescriptors: 2.1.7 + dev: false + + /util@0.10.4: + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} + dependencies: + inherits: 2.0.3 + dev: true + + /utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + dev: false + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /v8-to-istanbul@8.1.1: + resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + engines: {node: '>=10.12.0'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 1.9.0 + source-map: 0.7.4 + dev: false + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + + /w3c-hr-time@1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + dependencies: + browser-process-hrtime: 1.0.0 + dev: false + + /w3c-xmlserializer@2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + dependencies: + xml-name-validator: 3.0.0 + dev: false + + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: false + + /watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: false + + /wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: false + + /web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: true + + /web-vitals@2.1.4: + resolution: {integrity: sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==} + dev: false + + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: false + + /webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + dev: false + + /webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + dev: false + + /webpack-dev-middleware@5.3.3(webpack@5.89.0): + resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.2.0 + webpack: 5.89.0 + dev: false + + /webpack-dev-server@4.15.1(webpack@5.89.0): + resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.5 + '@types/sockjs': 0.3.36 + '@types/ws': 8.5.10 + ansi-html-community: 0.0.8 + bonjour-service: 1.1.1 + chokidar: 3.5.3 + colorette: 2.0.20 + compression: 1.7.4 + connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 + express: 4.18.2 + graceful-fs: 4.2.11 + html-entities: 2.4.0 + http-proxy-middleware: 2.0.6(@types/express@4.17.21) + ipaddr.js: 2.1.0 + launch-editor: 2.6.1 + open: 8.4.2 + p-retry: 4.6.2 + rimraf: 3.0.2 + schema-utils: 4.2.0 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack: 5.89.0 + webpack-dev-middleware: 5.3.3(webpack@5.89.0) + ws: 8.15.1 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: false + + /webpack-manifest-plugin@4.1.1(webpack@5.89.0): + resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} + engines: {node: '>=12.22.0'} + peerDependencies: + webpack: ^4.44.2 || ^5.47.0 + dependencies: + tapable: 2.2.1 + webpack: 5.89.0 + webpack-sources: 2.3.1 + dev: false + + /webpack-sources@1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: false + + /webpack-sources@2.3.1: + resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} + engines: {node: '>=10.13.0'} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: false + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: false + + /webpack@5.89.0: + resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.11.2 + acorn-import-assertions: 1.9.0(acorn@8.11.2) + browserslist: 4.22.2 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.4.1 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9(webpack@5.89.0) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: false + + /webpod@0.0.2: + resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} + hasBin: true + dev: true + + /websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: false + + /websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: false + + /whatwg-encoding@1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + dependencies: + iconv-lite: 0.4.24 + dev: false + + /whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + dev: false + + /whatwg-mimetype@2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + dev: false + + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: false + + /whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + dev: false + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: false + + /workbox-background-sync@6.6.0: + resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + dev: false + + /workbox-broadcast-update@6.6.0: + resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-build@6.6.0: + resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) + '@babel/core': 7.23.6 + '@babel/preset-env': 7.23.6(@babel/core@7.23.6) + '@babel/runtime': 7.23.6 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.6)(rollup@2.79.1) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.12.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-terser: 7.0.2(rollup@2.79.1) + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 6.6.0 + workbox-broadcast-update: 6.6.0 + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-google-analytics: 6.6.0 + workbox-navigation-preload: 6.6.0 + workbox-precaching: 6.6.0 + workbox-range-requests: 6.6.0 + workbox-recipes: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + workbox-streams: 6.6.0 + workbox-sw: 6.6.0 + workbox-window: 6.6.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: false + + /workbox-cacheable-response@6.6.0: + resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} + deprecated: workbox-background-sync@6.6.0 + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-core@6.6.0: + resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} + dev: false + + /workbox-expiration@6.6.0: + resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + dev: false + + /workbox-google-analytics@6.6.0: + resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} + dependencies: + workbox-background-sync: 6.6.0 + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: false + + /workbox-navigation-preload@6.6.0: + resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-precaching@6.6.0: + resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: false + + /workbox-range-requests@6.6.0: + resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-recipes@6.6.0: + resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} + dependencies: + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-precaching: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: false + + /workbox-routing@6.6.0: + resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-strategies@6.6.0: + resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} + dependencies: + workbox-core: 6.6.0 + dev: false + + /workbox-streams@6.6.0: + resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + dev: false + + /workbox-sw@6.6.0: + resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} + dev: false + + /workbox-webpack-plugin@6.6.0(webpack@5.89.0): + resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: ^4.4.0 || ^5.9.0 + dependencies: + fast-json-stable-stringify: 2.1.0 + pretty-bytes: 5.6.0 + upath: 1.2.0 + webpack: 5.89.0 + webpack-sources: 1.4.3 + workbox-build: 6.6.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: false + + /workbox-window@6.6.0: + resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 6.6.0 + dev: false + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: false + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.15.1: + resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /xml-name-validator@3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + dev: false + + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: false + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: false + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: false + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: false + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + /zx@7.2.3: + resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} + engines: {node: '>= 16.0.0'} + hasBin: true + dependencies: + '@types/fs-extra': 11.0.4 + '@types/minimist': 1.2.5 + '@types/node': 18.19.3 + '@types/ps-tree': 1.1.6 + '@types/which': 3.0.3 + chalk: 5.3.0 + fs-extra: 11.2.0 + fx: 31.0.0 + globby: 13.2.2 + minimist: 1.2.8 + node-fetch: 3.3.1 + ps-tree: 1.2.0 + webpod: 0.0.2 + which: 3.0.1 + yaml: 2.3.4 + dev: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..3e712d3ca --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - "apps/*" + - "packages/*" \ No newline at end of file diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 000000000..a09de0214 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,28 @@ +{ + "extends": "@tsconfig/recommended/tsconfig.json", + "compilerOptions": { + "target": "ES2023", + "sourceMap": true, + "declaration": true, + "declarationMap": true, + "skipLibCheck": false, + "baseUrl": ".", + "strict": true, + "allowUnusedLabels": false, + "allowUnreachableCode": false, + "noFallthroughCasesInSwitch": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noPropertyAccessFromIndexSignature": true, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "isolatedModules": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true + }, + "exclude": ["node_modules"] +} \ No newline at end of file diff --git a/turbo.json b/turbo.json new file mode 100644 index 000000000..c6f5af7fe --- /dev/null +++ b/turbo.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://turborepo.org/schema.json", + "globalDependencies": ["turbo.json"], + "pipeline": { + "build": { + "dependsOn": ["^build"], + "outputs": ["dist/**", "lib/**", "build/**"] + }, + "lint": { + "dependsOn": ["^lint"] + }, + "dev": { + "cache": false, + "persistent": true + } + } +} From b1dd27323ee3772d2c69a7a02bd6dd02f608a2e7 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Mon, 18 Dec 2023 15:25:19 +0100 Subject: [PATCH 006/253] chore(sample): eject react app --- apps/sample/.eslintrc.json | 3 + apps/sample/.gitignore | 21 +- apps/sample/README.md | 56 +- apps/sample/next.config.js | 4 + apps/sample/package-lock.json | 17678 ---------------- apps/sample/package.json | 54 +- apps/sample/pnpm-lock.yaml | 10562 --------- apps/sample/postcss.config.js | 6 + apps/sample/public/favicon.ico | Bin 3870 -> 0 bytes apps/sample/public/index.html | 43 - apps/sample/public/logo192.png | Bin 5347 -> 0 bytes apps/sample/public/logo512.png | Bin 9664 -> 0 bytes apps/sample/public/manifest.json | 25 - apps/sample/public/next.svg | 1 + apps/sample/public/robots.txt | 3 - apps/sample/public/vercel.svg | 1 + apps/sample/src/App.css | 38 - apps/sample/src/App.test.tsx | 9 - apps/sample/src/App.tsx | 75 - apps/sample/src/app/favicon.ico | Bin 0 -> 25931 bytes apps/sample/src/app/globals.css | 27 + apps/sample/src/app/layout.tsx | 22 + apps/sample/src/app/page.tsx | 113 + apps/sample/src/index.css | 13 - apps/sample/src/index.tsx | 19 - apps/sample/src/logo.svg | 1 - apps/sample/src/react-app-env.d.ts | 1 - apps/sample/src/reportWebVitals.ts | 15 - apps/sample/src/setupTests.ts | 5 - apps/sample/tailwind.config.ts | 20 + apps/sample/tsconfig.json | 31 +- .../core/src/transport/ble/BleTransport.ts | 13 +- pnpm-lock.yaml | 12532 +++-------- 33 files changed, 3126 insertions(+), 38265 deletions(-) create mode 100644 apps/sample/.eslintrc.json create mode 100644 apps/sample/next.config.js delete mode 100644 apps/sample/package-lock.json delete mode 100644 apps/sample/pnpm-lock.yaml create mode 100644 apps/sample/postcss.config.js delete mode 100644 apps/sample/public/favicon.ico delete mode 100644 apps/sample/public/index.html delete mode 100644 apps/sample/public/logo192.png delete mode 100644 apps/sample/public/logo512.png delete mode 100644 apps/sample/public/manifest.json create mode 100644 apps/sample/public/next.svg delete mode 100644 apps/sample/public/robots.txt create mode 100644 apps/sample/public/vercel.svg delete mode 100644 apps/sample/src/App.css delete mode 100644 apps/sample/src/App.test.tsx delete mode 100644 apps/sample/src/App.tsx create mode 100644 apps/sample/src/app/favicon.ico create mode 100644 apps/sample/src/app/globals.css create mode 100644 apps/sample/src/app/layout.tsx create mode 100644 apps/sample/src/app/page.tsx delete mode 100644 apps/sample/src/index.css delete mode 100644 apps/sample/src/index.tsx delete mode 100644 apps/sample/src/logo.svg delete mode 100644 apps/sample/src/react-app-env.d.ts delete mode 100644 apps/sample/src/reportWebVitals.ts delete mode 100644 apps/sample/src/setupTests.ts create mode 100644 apps/sample/tailwind.config.ts diff --git a/apps/sample/.eslintrc.json b/apps/sample/.eslintrc.json new file mode 100644 index 000000000..266c88fca --- /dev/null +++ b/apps/sample/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["next/core-web-vitals", "@ledger-hq/dsdk"] +} diff --git a/apps/sample/.gitignore b/apps/sample/.gitignore index 4d29575de..fd3dbb571 100644 --- a/apps/sample/.gitignore +++ b/apps/sample/.gitignore @@ -4,20 +4,33 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz # testing /coverage +# next.js +/.next/ +/out/ + # production /build # misc .DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local +*.pem +# debug npm-debug.log* yarn-debug.log* yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/sample/README.md b/apps/sample/README.md index b87cb0044..c4033664f 100644 --- a/apps/sample/README.md +++ b/apps/sample/README.md @@ -1,46 +1,36 @@ -# Getting Started with Create React App +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). +## Getting Started -## Available Scripts +First, run the development server: -In the project directory, you can run: +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` -### `npm start` +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. -Runs the app in the development mode.\ -Open [http://localhost:3000](http://localhost:3000) to view it in the browser. +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. -The page will reload if you make edits.\ -You will also see any lint errors in the console. +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. -### `npm test` - -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `npm run build` - -Builds the app for production to the `build` folder.\ -It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.\ -Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `npm run eject` - -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** +## Learn More -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. +To learn more about Next.js, take a look at the following resources: -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! -## Learn More +## Deploy on Vercel -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. -To learn React, check out the [React documentation](https://reactjs.org/). +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/apps/sample/next.config.js b/apps/sample/next.config.js new file mode 100644 index 000000000..767719fc4 --- /dev/null +++ b/apps/sample/next.config.js @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {} + +module.exports = nextConfig diff --git a/apps/sample/package-lock.json b/apps/sample/package-lock.json deleted file mode 100644 index fc0ceed0f..000000000 --- a/apps/sample/package-lock.json +++ /dev/null @@ -1,17678 +0,0 @@ -{ - "name": "sample", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "sample", - "version": "0.1.0", - "dependencies": { - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "@types/jest": "^27.5.2", - "@types/node": "^16.18.68", - "@types/react": "^18.2.45", - "@types/react-dom": "^18.2.17", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-scripts": "5.0.1", - "typescript": "^4.9.5", - "web-vitals": "^2.1.4" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@adobe/css-tools": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", - "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==" - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", - "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.6", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", - "@babel/types": "^7.23.6", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", - "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", - "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", - "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dependencies": { - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", - "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", - "@babel/types": "^7.23.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", - "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.6.tgz", - "integrity": "sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/plugin-syntax-decorators": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", - "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", - "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", - "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", - "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", - "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", - "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", - "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz", - "integrity": "sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", - "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", - "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", - "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.6.tgz", - "integrity": "sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", - "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.6.tgz", - "integrity": "sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==", - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.4", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.5", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.3", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", - "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", - "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "node_modules/@babel/runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", - "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "node_modules/@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.10" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", - "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", - "dependencies": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "@types/webpack": "4.x || 5.x", - "react-refresh": ">=0.10.0 <1.0.0", - "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <5.0.0", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz", - "integrity": "sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@testing-library/dom": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", - "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "peer": true, - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/@testing-library/dom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "peer": true - }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", - "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", - "dependencies": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=8", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", - "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.5.0", - "@types/react-dom": "^18.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", - "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@testing-library/react/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/react/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/@testing-library/react/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/react/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/react/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@testing-library/react/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/user-event": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", - "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", - "dependencies": { - "@babel/runtime": "^7.12.5" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.44.9", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.9.tgz", - "integrity": "sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", - "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" - }, - "node_modules/@types/node": { - "version": "16.18.68", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.68.tgz", - "integrity": "sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==" - }, - "node_modules/@types/node-forge": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", - "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" - }, - "node_modules/@types/q": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", - "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==" - }, - "node_modules/@types/qs": { - "version": "6.9.10", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", - "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "node_modules/@types/react": { - "version": "18.2.45", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz", - "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.17", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz", - "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" - }, - "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" - }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.9", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", - "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", - "dependencies": { - "@types/jest": "*" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" - }, - "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "dependencies": { - "@typescript-eslint/utils": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", - "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", - "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" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" - }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "peerDependencies": { - "@babel/core": "^7.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", - "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.4", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", - "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4", - "core-js-compat": "^3.33.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", - "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/bfj": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", - "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", - "dependencies": { - "bluebird": "^3.7.2", - "check-types": "^11.2.3", - "hoopy": "^0.1.4", - "jsonpath": "^1.1.1", - "tryer": "^1.0.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/check-types": { - "version": "11.2.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", - "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/core-js": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", - "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", - "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", - "dependencies": { - "browserslist": "^4.22.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.34.0.tgz", - "integrity": "sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" - }, - "node_modules/cssdb": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.9.1.tgz", - "integrity": "sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ] - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" - }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.613", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz", - "integrity": "sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==" - }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "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.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "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.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", - "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.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.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", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", - "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", - "dependencies": { - "@typescript-eslint/utils": "^5.58.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" - }, - "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.4.tgz", - "integrity": "sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", - "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, - "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dependencies": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0 || ^28.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-watch-typeahead/node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dependencies": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpath": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", - "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", - "dependencies": { - "esprima": "1.2.2", - "static-eval": "2.0.2", - "underscore": "1.12.1" - } - }, - "node_modules/jsonpath/node_modules/esprima": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", - "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", - "dependencies": { - "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "safe-array-concat": "^1.0.0" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "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" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "browserslist": ">=4", - "postcss": ">=8" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "peerDependencies": { - "postcss": "^8.1.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", - "engines": { - "node": ">=14" - } - }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "dependencies": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "browserslist": ">= 4", - "postcss": ">= 8" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/postcss-svgo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "dependencies": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "dependencies": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - }, - "bin": { - "react-scripts": "bin/react-scripts.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - }, - "peerDependencies": { - "react": ">= 16", - "typescript": "^3.2.1 || ^4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "rework": "1.0.1", - "rework-visit": "1.0.0" - }, - "peerDependenciesMeta": { - "rework": { - "optional": true - }, - "rework-visit": { - "optional": true - } - } - }, - "node_modules/resolve-url-loader/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/resolve-url-loader/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "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" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" - }, - "node_modules/sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "node_modules/static-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", - "dependencies": { - "escodegen": "^1.8.1" - } - }, - "node_modules/static-eval/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-eval/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/static-eval/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-eval/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "node_modules/tailwindcss": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", - "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.19.1", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dependencies": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", - "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-vitals": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", - "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", - "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "dependencies": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "peerDependencies": { - "webpack": "^4.44.2 || ^5.47.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-background-sync": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", - "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", - "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-build": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", - "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", - "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.6.0", - "workbox-broadcast-update": "6.6.0", - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-google-analytics": "6.6.0", - "workbox-navigation-preload": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-range-requests": "6.6.0", - "workbox-recipes": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0", - "workbox-streams": "6.6.0", - "workbox-sw": "6.6.0", - "workbox-window": "6.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/workbox-build/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-build/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/workbox-build/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/workbox-build/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", - "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", - "deprecated": "workbox-background-sync@6.6.0", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-core": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", - "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" - }, - "node_modules/workbox-expiration": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", - "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-google-analytics": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", - "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", - "dependencies": { - "workbox-background-sync": "6.6.0", - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", - "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-precaching": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", - "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-range-requests": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", - "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-recipes": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", - "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", - "dependencies": { - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-routing": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", - "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-strategies": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", - "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-streams": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", - "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0" - } - }, - "node_modules/workbox-sw": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", - "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" - }, - "node_modules/workbox-webpack-plugin": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", - "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", - "dependencies": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.6.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.9.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/workbox-window": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", - "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", - "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.6.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/apps/sample/package.json b/apps/sample/package.json index 5519db774..5f0d06002 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -2,45 +2,27 @@ "name": "@ledgerhq/device-sdk-sample", "version": "0.1.0", "private": true, - "dependencies": { - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "@types/jest": "^27.5.2", - "@types/node": "^16.18.68", - "@types/react": "^18.2.45", - "@types/react-dom": "^18.2.17", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-scripts": "5.0.1", - "typescript": "^4.9.5", - "web-vitals": "^2.1.4" - }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] + "dependencies": { + "react": "^18", + "react-dom": "^18", + "next": "14.0.4" }, "devDependencies": { - "@types/web-bluetooth": "^0.0.20" + "typescript": "^5", + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "autoprefixer": "^10.0.1", + "postcss": "^8", + "tailwindcss": "^3.3.0", + "eslint": "^8", + "eslint-config-next": "14.0.4", + "@ledgerhq/eslint-config-dsdk": "workspace:*" } } diff --git a/apps/sample/pnpm-lock.yaml b/apps/sample/pnpm-lock.yaml deleted file mode 100644 index eb09d37f5..000000000 --- a/apps/sample/pnpm-lock.yaml +++ /dev/null @@ -1,10562 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@testing-library/jest-dom': - specifier: ^5.17.0 - version: 5.17.0 - '@testing-library/react': - specifier: ^13.4.0 - version: 13.4.0(react-dom@18.2.0)(react@18.2.0) - '@testing-library/user-event': - specifier: ^13.5.0 - version: 13.5.0(@testing-library/dom@9.3.3) - '@types/jest': - specifier: ^27.5.2 - version: 27.5.2 - '@types/node': - specifier: ^16.18.68 - version: 16.18.68 - '@types/react': - specifier: ^18.2.45 - version: 18.2.45 - '@types/react-dom': - specifier: ^18.2.17 - version: 18.2.17 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - react-scripts: - specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(react@18.2.0)(typescript@4.9.5) - typescript: - specifier: ^4.9.5 - version: 4.9.5 - web-vitals: - specifier: ^2.1.4 - version: 2.1.4 - -devDependencies: - '@types/web-bluetooth': - specifier: ^0.0.20 - version: 0.0.20 - -packages: - - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: false - - /@adobe/css-tools@4.3.2: - resolution: {integrity: sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==} - dev: false - - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - dev: false - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - dev: false - - /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): - resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} - engines: {node: '>=10'} - peerDependencies: - ajv: '>=8' - dependencies: - ajv: 8.12.0 - json-schema: 0.4.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - dev: false - - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - dev: false - - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/core@7.23.6: - resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helpers': 7.23.6 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.6 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.55.0): - resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.55.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - dev: false - - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - jsesc: 2.5.2 - dev: false - - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: false - - /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - dev: false - - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.6): - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.3.2 - semver: 6.3.1 - dev: false - - /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.6): - resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: false - - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.6): - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.20 - dev: false - - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: false - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-wrap-function@7.22.20: - resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - dev: false - - /@babel/helpers@7.23.6: - resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.6 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: false - - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) - dev: false - - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-proposal-decorators@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - dev: false - - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.6): - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6): - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - dev: false - - /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.23.6): - resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) - dev: false - - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.6): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.6): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.6): - resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 - dev: false - - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.15 - dev: false - - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: false - - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - dev: false - - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - dev: false - - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.6): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.6): - resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) - '@babel/types': 7.23.6 - dev: false - - /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - regenerator-transform: 0.15.2 - dev: false - - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-runtime@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: false - - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) - dev: false - - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/preset-env@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.6) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.6) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.6) - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) - core-js-compat: 3.34.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.6): - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.6 - esutils: 2.0.3 - dev: false - - /@babel/preset-react@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.6) - '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.6) - dev: false - - /@babel/preset-typescript@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) - dev: false - - /@babel/regjsgen@0.8.0: - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - dev: false - - /@babel/runtime@7.23.6: - resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.0 - dev: false - - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - dev: false - - /@babel/traverse@7.23.6: - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: false - - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: false - - /@csstools/normalize.css@12.0.0: - resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} - dev: false - - /@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.32): - resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /@csstools/postcss-color-function@1.1.1(postcss@8.4.32): - resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.32): - resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.32): - resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /@csstools/postcss-nested-calc@1.0.0(postcss@8.4.32): - resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.32): - resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.32): - resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.32): - resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.32): - resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} - engines: {node: ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-unset-value@1.0.2(postcss@8.4.32): - resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - dev: false - - /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.13): - resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss-selector-parser: ^6.0.10 - dependencies: - postcss-selector-parser: 6.0.13 - dev: false - - /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.55.0 - eslint-visitor-keys: 3.4.3 - dev: false - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: false - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@eslint/js@8.55.0: - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false - - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: false - - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: false - - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: false - - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: false - - /@jest/console@27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - dev: false - - /@jest/console@28.1.3: - resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 16.18.68 - chalk: 4.1.2 - jest-message-util: 28.1.3 - jest-util: 28.1.3 - slash: 3.0.0 - dev: false - - /@jest/core@27.5.1: - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.8.1 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 27.5.1 - jest-config: 27.5.1 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 - micromatch: 4.0.5 - rimraf: 3.0.2 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: false - - /@jest/environment@27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - jest-mock: 27.5.1 - dev: false - - /@jest/fake-timers@27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.1.0 - '@types/node': 16.18.68 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: false - - /@jest/globals@27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 - dev: false - - /@jest/reporters@27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - jest-haste-map: 27.5.1 - jest-resolve: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - slash: 3.0.0 - source-map: 0.6.1 - string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 8.1.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@jest/schemas@28.1.3: - resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@sinclair/typebox': 0.24.51 - dev: false - - /@jest/source-map@27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - callsites: 3.1.0 - graceful-fs: 4.2.11 - source-map: 0.6.1 - dev: false - - /@jest/test-result@27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/types': 27.5.1 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: false - - /@jest/test-result@28.1.3: - resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/console': 28.1.3 - '@jest/types': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: false - - /@jest/test-sequencer@27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-runtime: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@jest/transform@27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.23.6 - '@jest/types': 27.5.1 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 1.9.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@jest/types@27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.68 - '@types/yargs': 16.0.9 - chalk: 4.1.2 - dev: false - - /@jest/types@28.1.3: - resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.68 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: false - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - dev: false - - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: false - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: false - - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - dev: false - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: false - - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - - /@leichtgewicht/ip-codec@2.0.4: - resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} - dev: false - - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - dependencies: - eslint-scope: 5.1.1 - dev: false - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: false - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: false - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: false - - /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0): - resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <5.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - dependencies: - ansi-html-community: 0.0.8 - common-path-prefix: 3.0.0 - core-js-pure: 3.34.0 - error-stack-parser: 2.1.4 - find-up: 5.0.0 - html-entities: 2.4.0 - loader-utils: 2.0.4 - react-refresh: 0.11.0 - schema-utils: 3.3.0 - source-map: 0.7.4 - webpack: 5.89.0 - webpack-dev-server: 4.15.1(webpack@5.89.0) - dev: false - - /@rollup/plugin-babel@5.3.1(@babel/core@7.23.6)(rollup@2.79.1): - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-imports': 7.22.15 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 - dev: false - - /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 2.79.1 - dev: false - - /@rollup/plugin-replace@2.4.2(rollup@2.79.1): - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.9 - rollup: 2.79.1 - dev: false - - /@rollup/pluginutils@3.1.0(rollup@2.79.1): - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - dev: false - - /@rushstack/eslint-patch@1.6.1: - resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} - dev: false - - /@sinclair/typebox@0.24.51: - resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} - dev: false - - /@sinonjs/commons@1.8.6: - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} - dependencies: - type-detect: 4.0.8 - dev: false - - /@sinonjs/fake-timers@8.1.0: - resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} - dependencies: - '@sinonjs/commons': 1.8.6 - dev: false - - /@surma/rollup-plugin-off-main-thread@2.2.3: - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - dependencies: - ejs: 3.1.9 - json5: 2.2.3 - magic-string: 0.25.9 - string.prototype.matchall: 4.0.10 - dev: false - - /@svgr/babel-plugin-add-jsx-attribute@5.4.0: - resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-remove-jsx-attribute@5.4.0: - resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1: - resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1: - resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-svg-dynamic-title@5.4.0: - resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-svg-em-dimensions@5.4.0: - resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-transform-react-native-svg@5.4.0: - resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-transform-svg-component@5.5.0: - resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-preset@5.5.0: - resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} - engines: {node: '>=10'} - dependencies: - '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 - '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 - '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 - '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 - '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 - '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 - '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 - '@svgr/babel-plugin-transform-svg-component': 5.5.0 - dev: false - - /@svgr/core@5.5.0: - resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} - engines: {node: '>=10'} - dependencies: - '@svgr/plugin-jsx': 5.5.0 - camelcase: 6.3.0 - cosmiconfig: 7.1.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@svgr/hast-util-to-babel-ast@5.5.0: - resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} - engines: {node: '>=10'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@svgr/plugin-jsx@5.5.0: - resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.23.6 - '@svgr/babel-preset': 5.5.0 - '@svgr/hast-util-to-babel-ast': 5.5.0 - svg-parser: 2.0.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@svgr/plugin-svgo@5.5.0: - resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} - engines: {node: '>=10'} - dependencies: - cosmiconfig: 7.1.0 - deepmerge: 4.3.1 - svgo: 1.3.2 - dev: false - - /@svgr/webpack@5.5.0: - resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.23.6) - '@babel/preset-env': 7.23.6(@babel/core@7.23.6) - '@babel/preset-react': 7.23.3(@babel/core@7.23.6) - '@svgr/core': 5.5.0 - '@svgr/plugin-jsx': 5.5.0 - '@svgr/plugin-svgo': 5.5.0 - loader-utils: 2.0.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@testing-library/dom@8.20.1: - resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} - engines: {node: '>=12'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.23.6 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: false - - /@testing-library/dom@9.3.3: - resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} - engines: {node: '>=14'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.23.6 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: false - - /@testing-library/jest-dom@5.17.0: - resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} - engines: {node: '>=8', npm: '>=6', yarn: '>=1'} - dependencies: - '@adobe/css-tools': 4.3.2 - '@babel/runtime': 7.23.6 - '@types/testing-library__jest-dom': 5.14.9 - aria-query: 5.3.0 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.5.16 - lodash: 4.17.21 - redent: 3.0.0 - dev: false - - /@testing-library/react@13.4.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} - engines: {node: '>=12'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - dependencies: - '@babel/runtime': 7.23.6 - '@testing-library/dom': 8.20.1 - '@types/react-dom': 18.2.17 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@testing-library/user-event@13.5.0(@testing-library/dom@9.3.3): - resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} - engines: {node: '>=10', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - dependencies: - '@babel/runtime': 7.23.6 - '@testing-library/dom': 9.3.3 - dev: false - - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: false - - /@trysound/sax@0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: false - - /@types/aria-query@5.0.4: - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - dev: false - - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - '@types/babel__generator': 7.6.7 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.4 - dev: false - - /@types/babel__generator@7.6.7: - resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - dev: false - - /@types/babel__traverse@7.20.4: - resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - dependencies: - '@types/connect': 3.4.38 - '@types/node': 16.18.68 - dev: false - - /@types/bonjour@3.5.13: - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - dependencies: - '@types/node': 16.18.68 - dev: false - - /@types/connect-history-api-fallback@1.5.4: - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - dependencies: - '@types/express-serve-static-core': 4.17.41 - '@types/node': 16.18.68 - dev: false - - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 16.18.68 - dev: false - - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - dependencies: - '@types/eslint': 8.44.9 - '@types/estree': 1.0.5 - dev: false - - /@types/eslint@8.44.9: - resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - dev: false - - /@types/estree@0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: false - - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: false - - /@types/express-serve-static-core@4.17.41: - resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} - dependencies: - '@types/node': 16.18.68 - '@types/qs': 6.9.10 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - dev: false - - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.41 - '@types/qs': 6.9.10 - '@types/serve-static': 1.15.5 - dev: false - - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - dependencies: - '@types/node': 16.18.68 - dev: false - - /@types/html-minifier-terser@6.1.0: - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - dev: false - - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: false - - /@types/http-proxy@1.17.14: - resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} - dependencies: - '@types/node': 16.18.68 - dev: false - - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: false - - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - dev: false - - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - dependencies: - '@types/istanbul-lib-report': 3.0.3 - dev: false - - /@types/jest@27.5.2: - resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} - dependencies: - jest-matcher-utils: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: false - - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: false - - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: false - - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - dev: false - - /@types/node-forge@1.3.10: - resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} - dependencies: - '@types/node': 16.18.68 - dev: false - - /@types/node@16.18.68: - resolution: {integrity: sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==} - dev: false - - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: false - - /@types/prettier@2.7.3: - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - dev: false - - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - dev: false - - /@types/q@1.5.8: - resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} - dev: false - - /@types/qs@6.9.10: - resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} - dev: false - - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: false - - /@types/react-dom@18.2.17: - resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} - dependencies: - '@types/react': 18.2.45 - dev: false - - /@types/react@18.2.45: - resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} - dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.3 - dev: false - - /@types/resolve@1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - dependencies: - '@types/node': 16.18.68 - dev: false - - /@types/retry@0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: false - - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} - dev: false - - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: false - - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - dependencies: - '@types/mime': 1.3.5 - '@types/node': 16.18.68 - dev: false - - /@types/serve-index@1.9.4: - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - dependencies: - '@types/express': 4.17.21 - dev: false - - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} - dependencies: - '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 - '@types/node': 16.18.68 - dev: false - - /@types/sockjs@0.3.36: - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - dependencies: - '@types/node': 16.18.68 - dev: false - - /@types/stack-utils@2.0.3: - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - dev: false - - /@types/testing-library__jest-dom@5.14.9: - resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} - dependencies: - '@types/jest': 27.5.2 - dev: false - - /@types/trusted-types@2.0.7: - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - dev: false - - /@types/web-bluetooth@0.0.20: - resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - dev: true - - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - dependencies: - '@types/node': 16.18.68 - dev: false - - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: false - - /@types/yargs@16.0.9: - resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: false - - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: false - - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.55.0)(typescript@4.9.5): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.55.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) - debug: 4.3.4 - eslint: 8.55.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare-lite: 1.4.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/experimental-utils@5.62.0(eslint@8.55.0)(typescript@4.9.5): - resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) - eslint: 8.55.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@4.9.5): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - debug: 4.3.4 - eslint: 8.55.0 - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: false - - /@typescript-eslint/type-utils@5.62.0(eslint@8.55.0)(typescript@4.9.5): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) - debug: 4.3.4 - eslint: 8.55.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false - - /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/utils@5.62.0(eslint@8.55.0)(typescript@4.9.5): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - eslint: 8.55.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: false - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: false - - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} - dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: false - - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: false - - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: false - - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - dev: false - - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@xtuc/long': 4.2.2 - dev: false - - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: false - - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - dev: false - - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - dependencies: - '@xtuc/ieee754': 1.2.0 - dev: false - - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - dependencies: - '@xtuc/long': 4.2.2 - dev: false - - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: false - - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 - dev: false - - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: false - - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - dev: false - - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: false - - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@xtuc/long': 4.2.2 - dev: false - - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: false - - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: false - - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead - dev: false - - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: false - - /acorn-globals@6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: false - - /acorn-import-assertions@1.9.0(acorn@8.11.2): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 - dependencies: - acorn: 8.11.2 - dev: false - - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.2 - dev: false - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: false - - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - - /address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - dev: false - - /adjust-sourcemap-loader@4.0.0: - resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} - engines: {node: '>=8.9'} - dependencies: - loader-utils: 2.0.4 - regex-parser: 2.2.11 - dev: false - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.12.0 - dev: false - - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: 6.12.6 - dev: false - - /ajv-keywords@5.1.0(ajv@8.12.0): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - dependencies: - ajv: 8.12.0 - fast-deep-equal: 3.1.3 - dev: false - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: false - - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: false - - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: false - - /ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: false - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: false - - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: false - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: false - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: false - - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: false - - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: false - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: false - - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: false - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: false - - /aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} - dependencies: - deep-equal: 2.2.3 - dev: false - - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - dependencies: - dequal: 2.0.3 - dev: false - - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - dev: false - - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: false - - /array-flatten@2.1.2: - resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} - dev: false - - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-string: 1.0.7 - dev: false - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: false - - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - dev: false - - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - dev: false - - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - dev: false - - /array.prototype.reduce@1.0.6: - resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: false - - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - dev: false - - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - dev: false - - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: false - - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: false - - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: false - - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: false - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: false - - /autoprefixer@10.4.16(postcss@8.4.32): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001570 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: false - - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - dev: false - - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - dependencies: - dequal: 2.0.3 - dev: false - - /babel-jest@27.5.1(@babel/core@7.23.6): - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.23.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.23.6) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-loader@8.3.0(@babel/core@7.23.6)(webpack@5.89.0): - resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} - engines: {node: '>= 8.9'} - peerDependencies: - '@babel/core': ^7.0.0 - webpack: '>=2' - dependencies: - '@babel/core': 7.23.6 - find-cache-dir: 3.3.2 - loader-utils: 2.0.4 - make-dir: 3.1.0 - schema-utils: 2.7.1 - webpack: 5.89.0 - dev: false - - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-jest-hoist@27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.4 - dev: false - - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - dependencies: - '@babel/runtime': 7.23.6 - cosmiconfig: 7.1.0 - resolve: 1.22.8 - dev: false - - /babel-plugin-named-asset-import@0.3.8(@babel/core@7.23.6): - resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} - peerDependencies: - '@babel/core': ^7.1.0 - dependencies: - '@babel/core': 7.23.6 - dev: false - - /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.6): - resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.6): - resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) - core-js-compat: 3.34.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.6): - resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-transform-react-remove-prop-types@0.4.24: - resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} - dev: false - - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - dev: false - - /babel-preset-jest@27.5.1(@babel/core@7.23.6): - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) - dev: false - - /babel-preset-react-app@10.0.1: - resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-decorators': 7.23.6(@babel/core@7.23.6) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.6) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.6) - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-runtime': 7.23.6(@babel/core@7.23.6) - '@babel/preset-env': 7.23.6(@babel/core@7.23.6) - '@babel/preset-react': 7.23.3(@babel/core@7.23.6) - '@babel/preset-typescript': 7.23.3(@babel/core@7.23.6) - '@babel/runtime': 7.23.6 - babel-plugin-macros: 3.1.0 - babel-plugin-transform-react-remove-prop-types: 0.4.24 - transitivePeerDependencies: - - supports-color - dev: false - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: false - - /batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: false - - /bfj@7.1.0: - resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} - engines: {node: '>= 8.0.0'} - dependencies: - bluebird: 3.7.2 - check-types: 11.2.3 - hoopy: 0.1.4 - jsonpath: 1.1.1 - tryer: 1.0.1 - dev: false - - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: false - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: false - - /bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: false - - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /bonjour-service@1.1.1: - resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} - dependencies: - array-flatten: 2.1.2 - dns-equal: 1.0.0 - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - dev: false - - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: false - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: false - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: false - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: false - - /browser-process-hrtime@1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: false - - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001570 - electron-to-chromium: 1.4.613 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) - dev: false - - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - dependencies: - node-int64: 0.4.0 - dev: false - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: false - - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: false - - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: false - - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: false - - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - dev: false - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: false - - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.2 - dev: false - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: false - - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: false - - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: false - - /caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001570 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - dev: false - - /caniuse-lite@1.0.30001570: - resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} - dev: false - - /case-sensitive-paths-webpack-plugin@2.4.0: - resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} - engines: {node: '>=4'} - dev: false - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: false - - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: false - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: false - - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: false - - /char-regex@2.0.1: - resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} - engines: {node: '>=12.20'} - dev: false - - /check-types@11.2.3: - resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} - dev: false - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: false - - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: false - - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: false - - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: false - - /clean-css@5.3.3: - resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} - engines: {node: '>= 10.0'} - dependencies: - source-map: 0.6.1 - dev: false - - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: false - - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: false - - /coa@2.0.2: - resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} - engines: {node: '>= 4.0'} - dependencies: - '@types/q': 1.5.8 - chalk: 2.4.2 - q: 1.5.1 - dev: false - - /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - dev: false - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: false - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: false - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: false - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - - /colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - dev: false - - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: false - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false - - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: false - - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: false - - /commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - dev: false - - /common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: false - - /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: false - - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: false - - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: false - - /confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: false - - /connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: false - - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: false - - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: false - - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: false - - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: false - - /core-js-compat@3.34.0: - resolution: {integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==} - dependencies: - browserslist: 4.22.2 - dev: false - - /core-js-pure@3.34.0: - resolution: {integrity: sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==} - requiresBuild: true - dev: false - - /core-js@3.34.0: - resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==} - requiresBuild: true - dev: false - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: false - - /cosmiconfig@6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} - engines: {node: '>=8'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false - - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: false - - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: false - - /css-blank-pseudo@3.0.3(postcss@8.4.32): - resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /css-declaration-sorter@6.4.1(postcss@8.4.32): - resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} - engines: {node: ^10 || ^12 || >=14} - peerDependencies: - postcss: ^8.0.9 - dependencies: - postcss: 8.4.32 - dev: false - - /css-has-pseudo@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /css-loader@6.8.1(webpack@5.89.0): - resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.32) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.32) - postcss-modules-scope: 3.0.0(postcss@8.4.32) - postcss-modules-values: 4.0.0(postcss@8.4.32) - postcss-value-parser: 4.2.0 - semver: 7.5.4 - webpack: 5.89.0 - dev: false - - /css-minimizer-webpack-plugin@3.4.1(webpack@5.89.0): - resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@parcel/css': '*' - clean-css: '*' - csso: '*' - esbuild: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@parcel/css': - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - dependencies: - cssnano: 5.1.15(postcss@8.4.32) - jest-worker: 27.5.1 - postcss: 8.4.32 - schema-utils: 4.2.0 - serialize-javascript: 6.0.1 - source-map: 0.6.1 - webpack: 5.89.0 - dev: false - - /css-prefers-color-scheme@6.0.3(postcss@8.4.32): - resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - dev: false - - /css-select-base-adapter@0.1.1: - resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} - dev: false - - /css-select@2.1.0: - resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} - dependencies: - boolbase: 1.0.0 - css-what: 3.4.2 - domutils: 1.7.0 - nth-check: 1.0.2 - dev: false - - /css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - dev: false - - /css-tree@1.0.0-alpha.37: - resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.4 - source-map: 0.6.1 - dev: false - - /css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - dev: false - - /css-what@3.4.2: - resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} - engines: {node: '>= 6'} - dev: false - - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: false - - /css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - dev: false - - /cssdb@7.9.1: - resolution: {integrity: sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==} - dev: false - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /cssnano-preset-default@5.2.14(postcss@8.4.32): - resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - css-declaration-sorter: 6.4.1(postcss@8.4.32) - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-calc: 8.2.4(postcss@8.4.32) - postcss-colormin: 5.3.1(postcss@8.4.32) - postcss-convert-values: 5.1.3(postcss@8.4.32) - postcss-discard-comments: 5.1.2(postcss@8.4.32) - postcss-discard-duplicates: 5.1.0(postcss@8.4.32) - postcss-discard-empty: 5.1.1(postcss@8.4.32) - postcss-discard-overridden: 5.1.0(postcss@8.4.32) - postcss-merge-longhand: 5.1.7(postcss@8.4.32) - postcss-merge-rules: 5.1.4(postcss@8.4.32) - postcss-minify-font-values: 5.1.0(postcss@8.4.32) - postcss-minify-gradients: 5.1.1(postcss@8.4.32) - postcss-minify-params: 5.1.4(postcss@8.4.32) - postcss-minify-selectors: 5.2.1(postcss@8.4.32) - postcss-normalize-charset: 5.1.0(postcss@8.4.32) - postcss-normalize-display-values: 5.1.0(postcss@8.4.32) - postcss-normalize-positions: 5.1.1(postcss@8.4.32) - postcss-normalize-repeat-style: 5.1.1(postcss@8.4.32) - postcss-normalize-string: 5.1.0(postcss@8.4.32) - postcss-normalize-timing-functions: 5.1.0(postcss@8.4.32) - postcss-normalize-unicode: 5.1.1(postcss@8.4.32) - postcss-normalize-url: 5.1.0(postcss@8.4.32) - postcss-normalize-whitespace: 5.1.1(postcss@8.4.32) - postcss-ordered-values: 5.1.3(postcss@8.4.32) - postcss-reduce-initial: 5.1.2(postcss@8.4.32) - postcss-reduce-transforms: 5.1.0(postcss@8.4.32) - postcss-svgo: 5.1.0(postcss@8.4.32) - postcss-unique-selectors: 5.1.1(postcss@8.4.32) - dev: false - - /cssnano-utils@3.1.0(postcss@8.4.32): - resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - dev: false - - /cssnano@5.1.15(postcss@8.4.32): - resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-preset-default: 5.2.14(postcss@8.4.32) - lilconfig: 2.1.0 - postcss: 8.4.32 - yaml: 1.10.2 - dev: false - - /csso@4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} - engines: {node: '>=8.0.0'} - dependencies: - css-tree: 1.1.3 - dev: false - - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: false - - /cssom@0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: false - - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: false - - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: false - - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: false - - /data-urls@2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - dev: false - - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: false - - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: false - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: false - - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: false - - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: false - - /deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.2 - is-arguments: 1.1.1 - is-array-buffer: 3.0.2 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - isarray: 2.0.5 - object-is: 1.1.5 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 - dev: false - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: false - - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: false - - /default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - dependencies: - execa: 5.1.1 - dev: false - - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: false - - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: false - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 - object-keys: 1.1.1 - dev: false - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false - - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: false - - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: false - - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: false - - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: false - - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: false - - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: false - - /detect-port-alt@1.1.6: - resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} - engines: {node: '>= 4.2.1'} - hasBin: true - dependencies: - address: 1.2.2 - debug: 2.6.9 - transitivePeerDependencies: - - supports-color - dev: false - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: false - - /diff-sequences@27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: false - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: false - - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: false - - /dns-equal@1.0.0: - resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} - dev: false - - /dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - dependencies: - '@leichtgewicht/ip-codec': 2.0.4 - dev: false - - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: false - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: false - - /dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dev: false - - /dom-converter@0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - dependencies: - utila: 0.4.0 - dev: false - - /dom-serializer@0.2.2: - resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} - dependencies: - domelementtype: 2.3.0 - entities: 2.2.0 - dev: false - - /dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - dev: false - - /domelementtype@1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - dev: false - - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: false - - /domexception@2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - deprecated: Use your platform's native DOMException instead - dependencies: - webidl-conversions: 5.0.0 - dev: false - - /domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: false - - /domutils@1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} - dependencies: - dom-serializer: 0.2.2 - domelementtype: 1.3.1 - dev: false - - /domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - dev: false - - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: false - - /dotenv-expand@5.1.0: - resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} - dev: false - - /dotenv@10.0.0: - resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} - engines: {node: '>=10'} - dev: false - - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: false - - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: false - - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.7 - dev: false - - /electron-to-chromium@1.4.613: - resolution: {integrity: sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==} - dev: false - - /emittery@0.10.2: - resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} - engines: {node: '>=12'} - dev: false - - /emittery@0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} - dev: false - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false - - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: false - - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: false - - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: false - - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: false - - /entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: false - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: false - - /error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - dependencies: - stackframe: 1.3.4 - dev: false - - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - 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.12 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - 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.13 - dev: false - - /es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - dev: false - - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - dev: false - - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} - dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.6 - iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 - dev: false - - /es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} - dev: false - - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 - dev: false - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.0 - dev: false - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: false - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: false - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: false - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: false - - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: false - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: false - - /escodegen@1.14.3: - resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} - engines: {node: '>=4.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 4.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: false - - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - dev: false - - /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(jest@27.5.1)(typescript@4.9.5): - resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} - engines: {node: '>=14.0.0'} - peerDependencies: - eslint: ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.55.0) - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.55.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.55.0)(typescript@4.9.5) - babel-preset-react-app: 10.0.1 - confusing-browser-globals: 1.0.11 - eslint: 8.55.0 - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.55.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.55.0)(jest@27.5.1)(typescript@4.9.5) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.55.0) - eslint-plugin-react: 7.33.2(eslint@8.55.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.55.0) - eslint-plugin-testing-library: 5.11.1(eslint@8.55.0)(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - jest - - supports-color - dev: false - - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: false - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.55.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.55.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: false - - /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0): - resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@babel/plugin-syntax-flow': ^7.14.5 - '@babel/plugin-transform-react-jsx': ^7.14.9 - eslint: ^8.1.0 - dependencies: - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) - eslint: 8.55.0 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - dev: false - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.55.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.55.0)(typescript@4.9.5) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.55.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) - hasown: 2.0.0 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: false - - /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.55.0)(jest@27.5.1)(typescript@4.9.5): - resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.55.0)(typescript@4.9.5) - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) - eslint: 8.55.0 - jest: 27.5.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.55.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.23.6 - aria-query: 5.3.0 - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 - eslint: 8.55.0 - hasown: 2.0.0 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - dev: false - - /eslint-plugin-react-hooks@4.6.0(eslint@8.55.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.55.0 - dev: false - - /eslint-plugin-react@7.33.2(eslint@8.55.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.55.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: false - - /eslint-plugin-testing-library@5.11.1(eslint@8.55.0)(typescript@4.9.5): - resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@4.9.5) - eslint: 8.55.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: false - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: false - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: false - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false - - /eslint-webpack-plugin@3.2.0(eslint@8.55.0)(webpack@5.89.0): - resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - webpack: ^5.0.0 - dependencies: - '@types/eslint': 8.44.9 - eslint: 8.55.0 - jest-worker: 28.1.3 - micromatch: 4.0.5 - normalize-path: 3.0.0 - schema-utils: 4.2.0 - webpack: 5.89.0 - dev: false - - /eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.55.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: false - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - dev: false - - /esprima@1.2.2: - resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: false - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: false - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: false - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: false - - /estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: false - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: false - - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: false - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false - - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: false - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: false - - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: false - - /expect@27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-get-type: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - dev: false - - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: false - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: false - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: false - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: false - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: false - - /faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: false - - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - dependencies: - bser: 2.1.1 - dev: false - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - dev: false - - /file-loader@6.2.0(webpack@5.89.0): - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - webpack: 5.89.0 - dev: false - - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.6 - dev: false - - /filesize@8.0.7: - resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} - engines: {node: '>= 0.4.0'} - dev: false - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: false - - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: false - - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: false - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: false - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: false - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: false - - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: false - - /follow-redirects@1.15.3: - resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: false - - /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.55.0)(typescript@4.9.5)(webpack@5.89.0): - resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} - engines: {node: '>=10', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - dependencies: - '@babel/code-frame': 7.23.5 - '@types/json-schema': 7.0.15 - chalk: 4.1.2 - chokidar: 3.5.3 - cosmiconfig: 6.0.0 - deepmerge: 4.3.1 - eslint: 8.55.0 - fs-extra: 9.1.0 - glob: 7.2.3 - memfs: 3.5.3 - minimatch: 3.1.2 - schema-utils: 2.7.0 - semver: 7.5.4 - tapable: 1.1.3 - typescript: 4.9.5 - webpack: 5.89.0 - dev: false - - /form-data@3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: false - - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: false - - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: false - - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: false - - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: false - - /fs-monkey@1.0.5: - resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} - dev: false - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: false - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: false - - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - functions-have-names: 1.2.3 - dev: false - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: false - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: false - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: false - - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} - dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - dev: false - - /get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - dev: false - - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: false - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: false - - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: false - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: false - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: false - - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: false - - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: false - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: false - - /global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} - dependencies: - global-prefix: 3.0.0 - dev: false - - /global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} - dependencies: - ini: 1.3.8 - kind-of: 6.0.3 - which: 1.3.1 - dev: false - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: false - - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: false - - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - dev: false - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 - dev: false - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.2 - dev: false - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: false - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: false - - /gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - dependencies: - duplexer: 0.1.2 - dev: false - - /handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: false - - /harmony-reflect@1.6.2: - resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} - dev: false - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: false - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: false - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: false - - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - dependencies: - get-intrinsic: 1.2.2 - dev: false - - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: false - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: false - - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: false - - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - dev: false - - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: false - - /hoopy@0.1.4: - resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} - engines: {node: '>= 6.0.0'} - dev: false - - /hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - dev: false - - /html-encoding-sniffer@2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: false - - /html-entities@2.4.0: - resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} - dev: false - - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: false - - /html-minifier-terser@6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} - engines: {node: '>=12'} - hasBin: true - dependencies: - camel-case: 4.1.2 - clean-css: 5.3.3 - commander: 8.3.0 - he: 1.2.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 5.26.0 - dev: false - - /html-webpack-plugin@5.5.4(webpack@5.89.0): - resolution: {integrity: sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==} - engines: {node: '>=10.13.0'} - peerDependencies: - webpack: ^5.20.0 - dependencies: - '@types/html-minifier-terser': 6.1.0 - html-minifier-terser: 6.1.0 - lodash: 4.17.21 - pretty-error: 4.0.0 - tapable: 2.2.1 - webpack: 5.89.0 - dev: false - - /htmlparser2@6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 2.2.0 - dev: false - - /http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: false - - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - dev: false - - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - dev: false - - /http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: false - - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /http-proxy-middleware@2.0.6(@types/express@4.17.21): - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - dependencies: - '@types/express': 4.17.21 - '@types/http-proxy': 1.17.14 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.5 - transitivePeerDependencies: - - debug - dev: false - - /http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.3 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - dev: false - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: false - - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /icss-utils@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - dev: false - - /idb@7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - dev: false - - /identity-obj-proxy@3.0.0: - resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} - engines: {node: '>=4'} - dependencies: - harmony-reflect: 1.6.2 - dev: false - - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: false - - /immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - dev: false - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: false - - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: false - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: false - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: false - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: false - - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: false - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false - - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: false - - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 - dev: false - - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: false - - /ipaddr.js@2.1.0: - resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} - engines: {node: '>= 10'} - dev: false - - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: false - - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: false - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: false - - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: false - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: false - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: false - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: false - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: false - - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.0 - dev: false - - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: false - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: false - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: false - - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - dependencies: - call-bind: 1.0.5 - dev: false - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: false - - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: false - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: false - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: false - - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: false - - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: false - - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: false - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: false - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: false - - /is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - dev: false - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: false - - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: false - - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: false - - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: false - - /is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - dev: false - - /is-root@2.1.0: - resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} - engines: {node: '>=6'} - dev: false - - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: false - - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.5 - dev: false - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: false - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: false - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: false - - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.13 - dev: false - - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: false - - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: false - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.5 - dev: false - - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: false - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: false - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: false - - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: false - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: false - - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: false - - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.23.6 - '@babel/parser': 7.23.6 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - dev: false - - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: false - - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - dev: false - - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 - dev: false - - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true - dependencies: - async: 3.2.5 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - dev: false - - /jest-changed-files@27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - execa: 5.1.1 - throat: 6.0.2 - dev: false - - /jest-circus@27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - chalk: 4.1.2 - co: 4.6.0 - dedent: 0.7.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - throat: 6.0.2 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-cli@27.5.1: - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - import-local: 3.1.0 - jest-config: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - prompts: 2.4.2 - yargs: 16.2.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: false - - /jest-config@27.5.1: - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - ts-node: '>=9.0.0' - peerDependenciesMeta: - ts-node: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@jest/test-sequencer': 27.5.1 - '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.23.6) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-get-type: 27.5.1 - jest-jasmine2: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runner: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 27.5.1 - slash: 3.0.0 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: false - - /jest-diff@27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-docblock@27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - detect-newline: 3.1.0 - dev: false - - /jest-each@27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - jest-get-type: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-environment-jsdom@27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - jest-mock: 27.5.1 - jest-util: 27.5.1 - jsdom: 16.7.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: false - - /jest-environment-node@27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: false - - /jest-get-type@27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: false - - /jest-haste-map@27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/graceful-fs': 4.1.9 - '@types/node': 16.18.68 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 27.5.1 - jest-serializer: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - dev: false - - /jest-jasmine2@27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - chalk: 4.1.2 - co: 4.6.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - throat: 6.0.2 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-leak-detector@27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-matcher-utils@27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-message-util@27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 27.5.1 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: false - - /jest-message-util@28.1.3: - resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 28.1.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 28.1.3 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: false - - /jest-mock@27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - dev: false - - /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: - jest-resolve: 27.5.1 - dev: false - - /jest-regex-util@27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: false - - /jest-regex-util@28.0.2: - resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dev: false - - /jest-resolve-dependencies@27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-regex-util: 27.5.1 - jest-snapshot: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-resolve@27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) - jest-util: 27.5.1 - jest-validate: 27.5.1 - resolve: 1.22.8 - resolve.exports: 1.1.1 - slash: 3.0.0 - dev: false - - /jest-runner@27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - chalk: 4.1.2 - emittery: 0.8.1 - graceful-fs: 4.2.11 - jest-docblock: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-haste-map: 27.5.1 - jest-leak-detector: 27.5.1 - jest-message-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runtime: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - source-map-support: 0.5.21 - throat: 6.0.2 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: false - - /jest-runtime@27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/globals': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - cjs-module-lexer: 1.2.3 - collect-v8-coverage: 1.0.2 - execa: 5.1.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-serializer@27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/node': 16.18.68 - graceful-fs: 4.2.11 - dev: false - - /jest-snapshot@27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.23.6 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__traverse': 7.20.4 - '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) - chalk: 4.1.2 - expect: 27.5.1 - graceful-fs: 4.2.11 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - jest-haste-map: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - natural-compare: 1.4.0 - pretty-format: 27.5.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-util@27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: false - - /jest-util@28.1.3: - resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 16.18.68 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: false - - /jest-validate@27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 27.5.1 - leven: 3.1.0 - pretty-format: 27.5.1 - dev: false - - /jest-watch-typeahead@1.1.0(jest@27.5.1): - resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - jest: ^27.0.0 || ^28.0.0 - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest: 27.5.1 - jest-regex-util: 28.0.2 - jest-watcher: 28.1.3 - slash: 4.0.0 - string-length: 5.0.1 - strip-ansi: 7.1.0 - dev: false - - /jest-watcher@27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.18.68 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest-util: 27.5.1 - string-length: 4.0.2 - dev: false - - /jest-watcher@28.1.3: - resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/test-result': 28.1.3 - '@jest/types': 28.1.3 - '@types/node': 16.18.68 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.10.2 - jest-util: 28.1.3 - string-length: 4.0.2 - dev: false - - /jest-worker@26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 16.18.68 - merge-stream: 2.0.0 - supports-color: 7.2.0 - dev: false - - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 16.18.68 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: false - - /jest-worker@28.1.3: - resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@types/node': 16.18.68 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: false - - /jest@27.5.1: - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 27.5.1 - import-local: 3.1.0 - jest-cli: 27.5.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: false - - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: false - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false - - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: false - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: false - - /jsdom@16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.6 - acorn: 8.11.2 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.4.3 - domexception: 2.0.1 - escodegen: 2.1.0 - form-data: 3.0.1 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.1.3 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.9 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: false - - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: false - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: false - - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: false - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: false - - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false - - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: false - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: false - - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: false - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: false - - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - dev: false - - /jsonpath@1.1.1: - resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} - dependencies: - esprima: 1.2.2 - static-eval: 2.0.2 - underscore: 1.12.1 - dev: false - - /jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - dev: false - - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.1.7 - dev: false - - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: false - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: false - - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: false - - /klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} - dev: false - - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: false - - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - dependencies: - language-subtag-registry: 0.3.22 - dev: false - - /launch-editor@2.6.1: - resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} - dependencies: - picocolors: 1.0.0 - shell-quote: 1.8.1 - dev: false - - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: false - - /levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: false - - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: false - - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: false - - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - dev: false - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: false - - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: false - - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - dev: false - - /loader-utils@3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} - engines: {node: '>= 12.13.0'} - dev: false - - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: false - - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: false - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: false - - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: false - - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: false - - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: false - - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: false - - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: false - - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.6.2 - dev: false - - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: false - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: false - - /lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - dev: false - - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - dependencies: - sourcemap-codec: 1.4.8 - dev: false - - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.1 - dev: false - - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - dependencies: - semver: 7.5.4 - dev: false - - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - dependencies: - tmpl: 1.0.5 - dev: false - - /mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - dev: false - - /mdn-data@2.0.4: - resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} - dev: false - - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: false - - /memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} - dependencies: - fs-monkey: 1.0.5 - dev: false - - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: false - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: false - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: false - - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: false - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: false - - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: false - - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: false - - /mini-css-extract-plugin@2.7.6(webpack@5.89.0): - resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - schema-utils: 4.2.0 - webpack: 5.89.0 - dev: false - - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: false - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: false - - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: false - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: false - - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: false - - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: false - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false - - /multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true - dependencies: - dns-packet: 5.6.1 - thunky: 1.1.0 - dev: false - - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: false - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false - - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: false - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: false - - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: false - - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: false - - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.6.2 - dev: false - - /node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: false - - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: false - - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: false - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: false - - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: false - - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: false - - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: false - - /nth-check@1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} - dependencies: - boolbase: 1.0.0 - dev: false - - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - dependencies: - boolbase: 1.0.0 - dev: false - - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} - dev: false - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: false - - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: false - - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: false - - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - dev: false - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: false - - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: false - - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: false - - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: false - - /object.getownpropertydescriptors@2.1.7: - resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} - engines: {node: '>= 0.8'} - dependencies: - array.prototype.reduce: 1.0.6 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - safe-array-concat: 1.0.1 - dev: false - - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - dev: false - - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: false - - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: false - - /obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: false - - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: false - - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: false - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: false - - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: false - - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: false - - /optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.5 - dev: false - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: false - - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: false - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: false - - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - dependencies: - p-limit: 2.3.0 - dev: false - - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: false - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: false - - /p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - dev: false - - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: false - - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: false - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: false - - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.23.5 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: false - - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: false - - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: false - - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: false - - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: false - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: false - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: false - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: false - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: false - - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: false - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: false - - /performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - dev: false - - /picocolors@0.2.1: - resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} - dev: false - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: false - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: false - - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: false - - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: false - - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: false - - /pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} - dependencies: - find-up: 3.0.0 - dev: false - - /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.32): - resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-browser-comments@4.0.0(browserslist@4.22.2)(postcss@8.4.32): - resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} - engines: {node: '>=8'} - peerDependencies: - browserslist: '>=4' - postcss: '>=8' - dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - dev: false - - /postcss-calc@8.2.4(postcss@8.4.32): - resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} - peerDependencies: - postcss: ^8.2.2 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-clamp@4.1.0(postcss@8.4.32): - resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} - engines: {node: '>=7.6.0'} - peerDependencies: - postcss: ^8.4.6 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-color-functional-notation@4.2.4(postcss@8.4.32): - resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-color-hex-alpha@8.0.4(postcss@8.4.32): - resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-color-rebeccapurple@7.1.1(postcss@8.4.32): - resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-colormin@5.3.1(postcss@8.4.32): - resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-convert-values@5.1.3(postcss@8.4.32): - resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-custom-media@8.0.2(postcss@8.4.32): - resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-custom-properties@12.1.11(postcss@8.4.32): - resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-custom-selectors@6.0.3(postcss@8.4.32): - resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-dir-pseudo-class@6.0.5(postcss@8.4.32): - resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-discard-comments@5.1.2(postcss@8.4.32): - resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-discard-duplicates@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-discard-empty@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-discard-overridden@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-double-position-gradients@3.1.2(postcss@8.4.32): - resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-env-function@4.0.6(postcss@8.4.32): - resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-flexbugs-fixes@5.0.2(postcss@8.4.32): - resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} - peerDependencies: - postcss: ^8.1.4 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-focus-visible@6.0.4(postcss@8.4.32): - resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-focus-within@5.0.4(postcss@8.4.32): - resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-font-variant@5.0.0(postcss@8.4.32): - resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-gap-properties@3.0.5(postcss@8.4.32): - resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-image-set-function@4.0.7(postcss@8.4.32): - resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-import@15.1.0(postcss@8.4.32): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - dev: false - - /postcss-initial@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-js@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.32 - dev: false - - /postcss-lab-function@4.2.1(postcss@8.4.32): - resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-load-config@4.0.2(postcss@8.4.32): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 3.0.0 - postcss: 8.4.32 - yaml: 2.3.4 - dev: false - - /postcss-loader@6.2.1(postcss@8.4.32)(webpack@5.89.0): - resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - dependencies: - cosmiconfig: 7.1.0 - klona: 2.0.6 - postcss: 8.4.32 - semver: 7.5.4 - webpack: 5.89.0 - dev: false - - /postcss-logical@5.0.4(postcss@8.4.32): - resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-media-minmax@5.0.0(postcss@8.4.32): - resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-merge-longhand@5.1.7(postcss@8.4.32): - resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.4.32) - dev: false - - /postcss-merge-rules@5.1.4(postcss@8.4.32): - resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-minify-font-values@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-minify-gradients@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-minify-params@5.1.4(postcss@8.4.32): - resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-minify-selectors@5.2.1(postcss@8.4.32): - resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-modules-extract-imports@3.0.0(postcss@8.4.32): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-modules-local-by-default@4.0.3(postcss@8.4.32): - resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-modules-scope@3.0.0(postcss@8.4.32): - resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-modules-values@4.0.0(postcss@8.4.32): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - dev: false - - /postcss-nested@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-nesting@10.2.0(postcss@8.4.32): - resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-normalize-charset@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-normalize-display-values@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-positions@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-repeat-style@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-string@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-timing-functions@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-unicode@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-url@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - normalize-url: 6.1.0 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-whitespace@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize@10.0.1(browserslist@4.22.2)(postcss@8.4.32): - resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} - engines: {node: '>= 12'} - peerDependencies: - browserslist: '>= 4' - postcss: '>= 8' - dependencies: - '@csstools/normalize.css': 12.0.0 - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-browser-comments: 4.0.0(browserslist@4.22.2)(postcss@8.4.32) - sanitize.css: 13.0.0 - dev: false - - /postcss-opacity-percentage@1.1.3(postcss@8.4.32): - resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-ordered-values@5.1.3(postcss@8.4.32): - resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-overflow-shorthand@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-page-break@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} - peerDependencies: - postcss: ^8 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-place@7.0.5(postcss@8.4.32): - resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-preset-env@7.8.3(postcss@8.4.32): - resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.32) - '@csstools/postcss-color-function': 1.1.1(postcss@8.4.32) - '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.32) - '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.32) - '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.32) - '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.32) - '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.32) - '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.32) - '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.32) - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.32) - '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.32) - '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.32) - '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.32) - autoprefixer: 10.4.16(postcss@8.4.32) - browserslist: 4.22.2 - css-blank-pseudo: 3.0.3(postcss@8.4.32) - css-has-pseudo: 3.0.4(postcss@8.4.32) - css-prefers-color-scheme: 6.0.3(postcss@8.4.32) - cssdb: 7.9.1 - postcss: 8.4.32 - postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.32) - postcss-clamp: 4.1.0(postcss@8.4.32) - postcss-color-functional-notation: 4.2.4(postcss@8.4.32) - postcss-color-hex-alpha: 8.0.4(postcss@8.4.32) - postcss-color-rebeccapurple: 7.1.1(postcss@8.4.32) - postcss-custom-media: 8.0.2(postcss@8.4.32) - postcss-custom-properties: 12.1.11(postcss@8.4.32) - postcss-custom-selectors: 6.0.3(postcss@8.4.32) - postcss-dir-pseudo-class: 6.0.5(postcss@8.4.32) - postcss-double-position-gradients: 3.1.2(postcss@8.4.32) - postcss-env-function: 4.0.6(postcss@8.4.32) - postcss-focus-visible: 6.0.4(postcss@8.4.32) - postcss-focus-within: 5.0.4(postcss@8.4.32) - postcss-font-variant: 5.0.0(postcss@8.4.32) - postcss-gap-properties: 3.0.5(postcss@8.4.32) - postcss-image-set-function: 4.0.7(postcss@8.4.32) - postcss-initial: 4.0.1(postcss@8.4.32) - postcss-lab-function: 4.2.1(postcss@8.4.32) - postcss-logical: 5.0.4(postcss@8.4.32) - postcss-media-minmax: 5.0.0(postcss@8.4.32) - postcss-nesting: 10.2.0(postcss@8.4.32) - postcss-opacity-percentage: 1.1.3(postcss@8.4.32) - postcss-overflow-shorthand: 3.0.4(postcss@8.4.32) - postcss-page-break: 3.0.4(postcss@8.4.32) - postcss-place: 7.0.5(postcss@8.4.32) - postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.32) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.32) - postcss-selector-not: 6.0.1(postcss@8.4.32) - postcss-value-parser: 4.2.0 - dev: false - - /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.32): - resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-reduce-initial@5.1.2(postcss@8.4.32): - resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - caniuse-api: 3.0.0 - postcss: 8.4.32 - dev: false - - /postcss-reduce-transforms@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.32): - resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} - peerDependencies: - postcss: ^8.0.3 - dependencies: - postcss: 8.4.32 - dev: false - - /postcss-selector-not@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: false - - /postcss-svgo@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - svgo: 2.8.0 - dev: false - - /postcss-unique-selectors@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: false - - /postcss@7.0.39: - resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} - engines: {node: '>=6.0.0'} - dependencies: - picocolors: 0.2.1 - source-map: 0.6.1 - dev: false - - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: false - - /prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - dev: false - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: false - - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: false - - /pretty-error@4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} - dependencies: - lodash: 4.17.21 - renderkid: 3.0.0 - dev: false - - /pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - dev: false - - /pretty-format@28.1.3: - resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: false - - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false - - /promise@8.3.0: - resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} - dependencies: - asap: 2.0.6 - dev: false - - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: false - - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: false - - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - dev: false - - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: false - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: false - - /q@1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - dev: false - - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: false - - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: false - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: false - - /raf@3.4.1: - resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} - dependencies: - performance-now: 2.1.0 - dev: false - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: false - - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: false - - /react-app-polyfill@3.0.0: - resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} - engines: {node: '>=14'} - dependencies: - core-js: 3.34.0 - object-assign: 4.1.1 - promise: 8.3.0 - raf: 3.4.1 - regenerator-runtime: 0.13.11 - whatwg-fetch: 3.6.20 - dev: false - - /react-dev-utils@12.0.1(eslint@8.55.0)(typescript@4.9.5)(webpack@5.89.0): - resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/code-frame': 7.23.5 - address: 1.2.2 - browserslist: 4.22.2 - chalk: 4.1.2 - cross-spawn: 7.0.3 - detect-port-alt: 1.1.6 - escape-string-regexp: 4.0.0 - filesize: 8.0.7 - find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.55.0)(typescript@4.9.5)(webpack@5.89.0) - global-modules: 2.0.0 - globby: 11.1.0 - gzip-size: 6.0.0 - immer: 9.0.21 - is-root: 2.1.0 - loader-utils: 3.2.1 - open: 8.4.2 - pkg-up: 3.1.0 - prompts: 2.4.2 - react-error-overlay: 6.0.11 - recursive-readdir: 2.2.3 - shell-quote: 1.8.1 - strip-ansi: 6.0.1 - text-table: 0.2.0 - typescript: 4.9.5 - webpack: 5.89.0 - transitivePeerDependencies: - - eslint - - supports-color - - vue-template-compiler - dev: false - - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - - /react-error-overlay@6.0.11: - resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} - dev: false - - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false - - /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: false - - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: false - - /react-refresh@0.11.0: - resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} - engines: {node: '>=0.10.0'} - dev: false - - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(react@18.2.0)(typescript@4.9.5): - resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} - engines: {node: '>=14.0.0'} - hasBin: true - peerDependencies: - eslint: '*' - react: '>= 16' - typescript: ^3.2.1 || ^4 - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0) - '@svgr/webpack': 5.5.0 - babel-jest: 27.5.1(@babel/core@7.23.6) - babel-loader: 8.3.0(@babel/core@7.23.6)(webpack@5.89.0) - babel-plugin-named-asset-import: 0.3.8(@babel/core@7.23.6) - babel-preset-react-app: 10.0.1 - bfj: 7.1.0 - browserslist: 4.22.2 - camelcase: 6.3.0 - case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.8.1(webpack@5.89.0) - css-minimizer-webpack-plugin: 3.4.1(webpack@5.89.0) - dotenv: 10.0.0 - dotenv-expand: 5.1.0 - eslint: 8.55.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(jest@27.5.1)(typescript@4.9.5) - eslint-webpack-plugin: 3.2.0(eslint@8.55.0)(webpack@5.89.0) - file-loader: 6.2.0(webpack@5.89.0) - fs-extra: 10.1.0 - html-webpack-plugin: 5.5.4(webpack@5.89.0) - identity-obj-proxy: 3.0.0 - jest: 27.5.1 - jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1) - mini-css-extract-plugin: 2.7.6(webpack@5.89.0) - postcss: 8.4.32 - postcss-flexbugs-fixes: 5.0.2(postcss@8.4.32) - postcss-loader: 6.2.1(postcss@8.4.32)(webpack@5.89.0) - postcss-normalize: 10.0.1(browserslist@4.22.2)(postcss@8.4.32) - postcss-preset-env: 7.8.3(postcss@8.4.32) - prompts: 2.4.2 - react: 18.2.0 - react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.55.0)(typescript@4.9.5)(webpack@5.89.0) - react-refresh: 0.11.0 - resolve: 1.22.8 - resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(webpack@5.89.0) - semver: 7.5.4 - source-map-loader: 3.0.2(webpack@5.89.0) - style-loader: 3.3.3(webpack@5.89.0) - tailwindcss: 3.3.6 - terser-webpack-plugin: 5.3.9(webpack@5.89.0) - typescript: 4.9.5 - webpack: 5.89.0 - webpack-dev-server: 4.15.1(webpack@5.89.0) - webpack-manifest-plugin: 4.1.1(webpack@5.89.0) - workbox-webpack-plugin: 6.6.0(webpack@5.89.0) - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - '@parcel/css' - - '@swc/core' - - '@types/babel__core' - - '@types/webpack' - - bufferutil - - canvas - - clean-css - - csso - - debug - - esbuild - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - fibers - - node-notifier - - node-sass - - rework - - rework-visit - - sass - - sass-embedded - - sockjs-client - - supports-color - - ts-node - - type-fest - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - webpack-hot-middleware - - webpack-plugin-serve - dev: false - - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: false - - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: false - - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: false - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: false - - /recursive-readdir@2.2.3: - resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} - engines: {node: '>=6.0.0'} - dependencies: - minimatch: 3.1.2 - dev: false - - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: false - - /reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 - dev: false - - /regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: false - - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: false - - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: false - - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - dev: false - - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - dependencies: - '@babel/runtime': 7.23.6 - dev: false - - /regex-parser@2.2.11: - resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} - dev: false - - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - set-function-name: 2.0.1 - dev: false - - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - dev: false - - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: false - - /relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - dev: false - - /renderkid@3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - dependencies: - css-select: 4.3.0 - dom-converter: 0.2.0 - htmlparser2: 6.1.0 - lodash: 4.17.21 - strip-ansi: 6.0.1 - dev: false - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: false - - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: false - - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: false - - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: false - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: false - - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: false - - /resolve-url-loader@4.0.0: - resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} - engines: {node: '>=8.9'} - peerDependencies: - rework: 1.0.1 - rework-visit: 1.0.0 - peerDependenciesMeta: - rework: - optional: true - rework-visit: - optional: true - dependencies: - adjust-sourcemap-loader: 4.0.0 - convert-source-map: 1.9.0 - loader-utils: 2.0.4 - postcss: 7.0.39 - source-map: 0.6.1 - dev: false - - /resolve.exports@1.1.1: - resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} - engines: {node: '>=10'} - dev: false - - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: false - - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: false - - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: false - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: false - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: false - - /rollup-plugin-terser@7.0.2(rollup@2.79.1): - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser - peerDependencies: - rollup: ^2.0.0 - dependencies: - '@babel/code-frame': 7.23.5 - jest-worker: 26.6.2 - rollup: 2.79.1 - serialize-javascript: 4.0.0 - terser: 5.26.0 - dev: false - - /rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: false - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: false - - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - isarray: 2.0.5 - dev: false - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false - - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-regex: 1.1.4 - dev: false - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - - /sanitize.css@13.0.0: - resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} - dev: false - - /sass-loader@12.6.0(webpack@5.89.0): - resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - dependencies: - klona: 2.0.6 - neo-async: 2.6.2 - webpack: 5.89.0 - dev: false - - /sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - dev: false - - /saxes@5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: false - - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: false - - /schema-utils@2.7.0: - resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: false - - /schema-utils@2.7.1: - resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: false - - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: false - - /schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) - dev: false - - /select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: false - - /selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - dependencies: - '@types/node-forge': 1.3.10 - node-forge: 1.3.1 - dev: false - - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: false - - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: false - - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /serialize-javascript@4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} - dependencies: - randombytes: 2.1.0 - dev: false - - /serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} - dependencies: - randombytes: 2.1.0 - dev: false - - /serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - dev: false - - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: false - - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: false - - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 - dev: false - - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: false - - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: false - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: false - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: false - - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: false - - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 - dev: false - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false - - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: false - - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: false - - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: false - - /sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - dev: false - - /source-list-map@2.0.1: - resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} - dev: false - - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: false - - /source-map-loader@3.0.2(webpack@5.89.0): - resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - abab: 2.0.6 - iconv-lite: 0.6.3 - source-map-js: 1.0.2 - webpack: 5.89.0 - dev: false - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: false - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: false - - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: false - - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - dependencies: - whatwg-url: 7.1.0 - dev: false - - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: false - - /spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - dependencies: - debug: 4.3.4 - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.2 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - dev: false - - /spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - dependencies: - debug: 4.3.4 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: false - - /stable@0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - dev: false - - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 - dev: false - - /stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: false - - /static-eval@2.0.2: - resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} - dependencies: - escodegen: 1.14.3 - dev: false - - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: false - - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: false - - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} - dependencies: - internal-slot: 1.0.6 - dev: false - - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - dev: false - - /string-length@5.0.1: - resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} - engines: {node: '>=12.20'} - dependencies: - char-regex: 2.0.1 - strip-ansi: 7.1.0 - dev: false - - /string-natural-compare@3.0.1: - resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - dev: false - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: false - - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - internal-slot: 1.0.6 - regexp.prototype.flags: 1.5.1 - set-function-name: 2.0.1 - side-channel: 1.0.4 - dev: false - - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: false - - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: false - - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: false - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: false - - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - dev: false - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: false - - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - dependencies: - ansi-regex: 6.0.1 - dev: false - - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: false - - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: false - - /strip-comments@2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} - engines: {node: '>=10'} - dev: false - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: false - - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - dependencies: - min-indent: 1.0.1 - dev: false - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: false - - /style-loader@3.3.3(webpack@5.89.0): - resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - webpack: 5.89.0 - dev: false - - /stylehacks@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - dev: false - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: false - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: false - - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: false - - /supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: false - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: false - - /svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - dev: false - - /svgo@1.3.2: - resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} - engines: {node: '>=4.0.0'} - deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. - hasBin: true - dependencies: - chalk: 2.4.2 - coa: 2.0.2 - css-select: 2.1.0 - css-select-base-adapter: 0.1.1 - css-tree: 1.0.0-alpha.37 - csso: 4.2.0 - js-yaml: 3.14.1 - mkdirp: 0.5.6 - object.values: 1.1.7 - sax: 1.2.4 - stable: 0.1.8 - unquote: 1.1.1 - util.promisify: 1.0.1 - dev: false - - /svgo@2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} - engines: {node: '>=10.13.0'} - hasBin: true - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 4.3.0 - css-tree: 1.1.3 - csso: 4.2.0 - picocolors: 1.0.0 - stable: 0.1.8 - dev: false - - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: false - - /tailwindcss@3.3.6: - resolution: {integrity: sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.5.3 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.32 - postcss-import: 15.1.0(postcss@8.4.32) - postcss-js: 4.0.1(postcss@8.4.32) - postcss-load-config: 4.0.2(postcss@8.4.32) - postcss-nested: 6.0.1(postcss@8.4.32) - postcss-selector-parser: 6.0.13 - resolve: 1.22.8 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - dev: false - - /tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - dev: false - - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: false - - /temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: false - - /tempy@0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} - engines: {node: '>=10'} - dependencies: - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - dev: false - - /terminal-link@2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.3.0 - dev: false - - /terser-webpack-plugin@5.3.9(webpack@5.89.0): - resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.20 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.26.0 - webpack: 5.89.0 - dev: false - - /terser@5.26.0: - resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.11.2 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: false - - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: false - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: false - - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: false - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: false - - /throat@6.0.2: - resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} - dev: false - - /thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: false - - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: false - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: false - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: false - - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: false - - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} - engines: {node: '>=6'} - dependencies: - psl: 1.9.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: false - - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - dependencies: - punycode: 2.3.1 - dev: false - - /tr46@2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} - dependencies: - punycode: 2.3.1 - dev: false - - /tryer@1.0.1: - resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} - dev: false - - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: false - - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: false - - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: false - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false - - /tsutils@3.21.0(typescript@4.9.5): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 4.9.5 - dev: false - - /type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - dev: false - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: false - - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: false - - /type-fest@0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - dev: false - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: false - - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: false - - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - dev: false - - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: false - - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: false - - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: false - - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - is-typed-array: 1.1.12 - dev: false - - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: false - - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: false - - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.5 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: false - - /underscore@1.12.1: - resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} - dev: false - - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: false - - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - dev: false - - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: false - - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: false - - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: false - - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: false - - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: false - - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: false - - /unquote@1.1.1: - resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} - dev: false - - /upath@1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - dev: false - - /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: false - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: false - - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - dev: false - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false - - /util.promisify@1.0.1: - resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.3 - has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.7 - dev: false - - /utila@0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - dev: false - - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: false - - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false - - /v8-to-istanbul@8.1.1: - resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} - engines: {node: '>=10.12.0'} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 1.9.0 - source-map: 0.7.4 - dev: false - - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: false - - /w3c-hr-time@1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: false - - /w3c-xmlserializer@2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: false - - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - dependencies: - makeerror: 1.0.12 - dev: false - - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - dev: false - - /wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - dependencies: - minimalistic-assert: 1.0.1 - dev: false - - /web-vitals@2.1.4: - resolution: {integrity: sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==} - dev: false - - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: false - - /webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: false - - /webidl-conversions@6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: false - - /webpack-dev-middleware@5.3.3(webpack@5.89.0): - resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.89.0 - dev: false - - /webpack-dev-server@4.15.1(webpack@5.89.0): - resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.5 - '@types/sockjs': 0.3.36 - '@types/ws': 8.5.10 - ansi-html-community: 0.0.8 - bonjour-service: 1.1.1 - chokidar: 3.5.3 - colorette: 2.0.20 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.18.2 - graceful-fs: 4.2.11 - html-entities: 2.4.0 - http-proxy-middleware: 2.0.6(@types/express@4.17.21) - ipaddr.js: 2.1.0 - launch-editor: 2.6.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.2.0 - selfsigned: 2.4.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.89.0 - webpack-dev-middleware: 5.3.3(webpack@5.89.0) - ws: 8.15.1 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: false - - /webpack-manifest-plugin@4.1.1(webpack@5.89.0): - resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} - engines: {node: '>=12.22.0'} - peerDependencies: - webpack: ^4.44.2 || ^5.47.0 - dependencies: - tapable: 2.2.1 - webpack: 5.89.0 - webpack-sources: 2.3.1 - dev: false - - /webpack-sources@1.4.3: - resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: false - - /webpack-sources@2.3.1: - resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} - engines: {node: '>=10.13.0'} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: false - - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: false - - /webpack@5.89.0: - resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.11.2 - acorn-import-assertions: 1.9.0(acorn@8.11.2) - browserslist: 4.22.2 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.4.1 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(webpack@5.89.0) - watchpack: 2.4.0 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: false - - /websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.8 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: false - - /websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: false - - /whatwg-encoding@1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - dependencies: - iconv-lite: 0.4.24 - dev: false - - /whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - dev: false - - /whatwg-mimetype@2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: false - - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - dev: false - - /whatwg-url@8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 - dev: false - - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: false - - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 - dev: false - - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - dev: false - - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - dev: false - - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: false - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: false - - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: false - - /workbox-background-sync@6.6.0: - resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} - dependencies: - idb: 7.1.1 - workbox-core: 6.6.0 - dev: false - - /workbox-broadcast-update@6.6.0: - resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-build@6.6.0: - resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} - engines: {node: '>=10.0.0'} - dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) - '@babel/core': 7.23.6 - '@babel/preset-env': 7.23.6(@babel/core@7.23.6) - '@babel/runtime': 7.23.6 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.6)(rollup@2.79.1) - '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) - '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.12.0 - common-tags: 1.8.2 - fast-json-stable-stringify: 2.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - lodash: 4.17.21 - pretty-bytes: 5.6.0 - rollup: 2.79.1 - rollup-plugin-terser: 7.0.2(rollup@2.79.1) - source-map: 0.8.0-beta.0 - stringify-object: 3.3.0 - strip-comments: 2.0.1 - tempy: 0.6.0 - upath: 1.2.0 - workbox-background-sync: 6.6.0 - workbox-broadcast-update: 6.6.0 - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-google-analytics: 6.6.0 - workbox-navigation-preload: 6.6.0 - workbox-precaching: 6.6.0 - workbox-range-requests: 6.6.0 - workbox-recipes: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - workbox-streams: 6.6.0 - workbox-sw: 6.6.0 - workbox-window: 6.6.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: false - - /workbox-cacheable-response@6.6.0: - resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} - deprecated: workbox-background-sync@6.6.0 - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-core@6.6.0: - resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} - dev: false - - /workbox-expiration@6.6.0: - resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} - dependencies: - idb: 7.1.1 - workbox-core: 6.6.0 - dev: false - - /workbox-google-analytics@6.6.0: - resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} - dependencies: - workbox-background-sync: 6.6.0 - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: false - - /workbox-navigation-preload@6.6.0: - resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-precaching@6.6.0: - resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: false - - /workbox-range-requests@6.6.0: - resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-recipes@6.6.0: - resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} - dependencies: - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-precaching: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: false - - /workbox-routing@6.6.0: - resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-strategies@6.6.0: - resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-streams@6.6.0: - resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - dev: false - - /workbox-sw@6.6.0: - resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} - dev: false - - /workbox-webpack-plugin@6.6.0(webpack@5.89.0): - resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==} - engines: {node: '>=10.0.0'} - peerDependencies: - webpack: ^4.4.0 || ^5.9.0 - dependencies: - fast-json-stable-stringify: 2.1.0 - pretty-bytes: 5.6.0 - upath: 1.2.0 - webpack: 5.89.0 - webpack-sources: 1.4.3 - workbox-build: 6.6.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: false - - /workbox-window@6.6.0: - resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} - dependencies: - '@types/trusted-types': 2.0.7 - workbox-core: 6.6.0 - dev: false - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: false - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: false - - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: false - - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /ws@8.15.1: - resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /xml-name-validator@3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: false - - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: false - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: false - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: false - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false - - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: false - - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - dev: false - - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: false - - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - dev: false - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: false diff --git a/apps/sample/postcss.config.js b/apps/sample/postcss.config.js new file mode 100644 index 000000000..33ad091d2 --- /dev/null +++ b/apps/sample/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/apps/sample/public/favicon.ico b/apps/sample/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 zcma);c{J4h9>;%nil|2-o+rCuEF-(I%-F}ijC~o(k~HKAkr0)!FCj~d>`RtpD?8b; zXOC1OD!V*IsqUwzbMF1)-gEDD=A573Z-&G7^LoAC9|WO7Xc0Cx1g^Zu0u_SjAPB3vGa^W|sj)80f#V0@M_CAZTIO(t--xg= z!sii`1giyH7EKL_+Wi0ab<)&E_0KD!3Rp2^HNB*K2@PHCs4PWSA32*-^7d{9nH2_E zmC{C*N*)(vEF1_aMamw2A{ZH5aIDqiabnFdJ|y0%aS|64E$`s2ccV~3lR!u<){eS` z#^Mx6o(iP1Ix%4dv`t@!&Za-K@mTm#vadc{0aWDV*_%EiGK7qMC_(`exc>-$Gb9~W!w_^{*pYRm~G zBN{nA;cm^w$VWg1O^^<6vY`1XCD|s_zv*g*5&V#wv&s#h$xlUilPe4U@I&UXZbL z0)%9Uj&@yd03n;!7do+bfixH^FeZ-Ema}s;DQX2gY+7g0s(9;`8GyvPY1*vxiF&|w z>!vA~GA<~JUqH}d;DfBSi^IT*#lrzXl$fNpq0_T1tA+`A$1?(gLb?e#0>UELvljtQ zK+*74m0jn&)5yk8mLBv;=@}c{t0ztT<v;Avck$S6D`Z)^c0(jiwKhQsn|LDRY&w(Fmi91I7H6S;b0XM{e zXp0~(T@k_r-!jkLwd1_Vre^v$G4|kh4}=Gi?$AaJ)3I+^m|Zyj#*?Kp@w(lQdJZf4 z#|IJW5z+S^e9@(6hW6N~{pj8|NO*>1)E=%?nNUAkmv~OY&ZV;m-%?pQ_11)hAr0oAwILrlsGawpxx4D43J&K=n+p3WLnlDsQ$b(9+4 z?mO^hmV^F8MV{4Lx>(Q=aHhQ1){0d*(e&s%G=i5rq3;t{JC zmgbn5Nkl)t@fPH$v;af26lyhH!k+#}_&aBK4baYPbZy$5aFx4}ka&qxl z$=Rh$W;U)>-=S-0=?7FH9dUAd2(q#4TCAHky!$^~;Dz^j|8_wuKc*YzfdAht@Q&ror?91Dm!N03=4=O!a)I*0q~p0g$Fm$pmr$ zb;wD;STDIi$@M%y1>p&_>%?UP($15gou_ue1u0!4(%81;qcIW8NyxFEvXpiJ|H4wz z*mFT(qVx1FKufG11hByuX%lPk4t#WZ{>8ka2efjY`~;AL6vWyQKpJun2nRiZYDij$ zP>4jQXPaP$UC$yIVgGa)jDV;F0l^n(V=HMRB5)20V7&r$jmk{UUIe zVjKroK}JAbD>B`2cwNQ&GDLx8{pg`7hbA~grk|W6LgiZ`8y`{Iq0i>t!3p2}MS6S+ zO_ruKyAElt)rdS>CtF7j{&6rP-#c=7evGMt7B6`7HG|-(WL`bDUAjyn+k$mx$CH;q2Dz4x;cPP$hW=`pFfLO)!jaCL@V2+F)So3}vg|%O*^T1j>C2lx zsURO-zIJC$^$g2byVbRIo^w>UxK}74^TqUiRR#7s_X$e)$6iYG1(PcW7un-va-S&u zHk9-6Zn&>T==A)lM^D~bk{&rFzCi35>UR!ZjQkdSiNX*-;l4z9j*7|q`TBl~Au`5& z+c)*8?#-tgUR$Zd%Q3bs96w6k7q@#tUn`5rj+r@_sAVVLqco|6O{ILX&U-&-cbVa3 zY?ngHR@%l{;`ri%H*0EhBWrGjv!LE4db?HEWb5mu*t@{kv|XwK8?npOshmzf=vZA@ zVSN9sL~!sn?r(AK)Q7Jk2(|M67Uy3I{eRy z_l&Y@A>;vjkWN5I2xvFFTLX0i+`{qz7C_@bo`ZUzDugfq4+>a3?1v%)O+YTd6@Ul7 zAfLfm=nhZ`)P~&v90$&UcF+yXm9sq!qCx3^9gzIcO|Y(js^Fj)Rvq>nQAHI92ap=P z10A4@prk+AGWCb`2)dQYFuR$|H6iDE8p}9a?#nV2}LBCoCf(Xi2@szia7#gY>b|l!-U`c}@ zLdhvQjc!BdLJvYvzzzngnw51yRYCqh4}$oRCy-z|v3Hc*d|?^Wj=l~18*E~*cR_kU z{XsxM1i{V*4GujHQ3DBpl2w4FgFR48Nma@HPgnyKoIEY-MqmMeY=I<%oG~l!f<+FN z1ZY^;10j4M4#HYXP zw5eJpA_y(>uLQ~OucgxDLuf}fVs272FaMxhn4xnDGIyLXnw>Xsd^J8XhcWIwIoQ9} z%FoSJTAGW(SRGwJwb=@pY7r$uQRK3Zd~XbxU)ts!4XsJrCycrWSI?e!IqwqIR8+Jh zlRjZ`UO1I!BtJR_2~7AbkbSm%XQqxEPkz6BTGWx8e}nQ=w7bZ|eVP4?*Tb!$(R)iC z9)&%bS*u(lXqzitAN)Oo=&Ytn>%Hzjc<5liuPi>zC_nw;Z0AE3Y$Jao_Q90R-gl~5 z_xAb2J%eArrC1CN4G$}-zVvCqF1;H;abAu6G*+PDHSYFx@Tdbfox*uEd3}BUyYY-l zTfEsOqsi#f9^FoLO;ChK<554qkri&Av~SIM*{fEYRE?vH7pTAOmu2pz3X?Wn*!ROX ztd54huAk&mFBemMooL33RV-*1f0Q3_(7hl$<#*|WF9P!;r;4_+X~k~uKEqdzZ$5Al zV63XN@)j$FN#cCD;ek1R#l zv%pGrhB~KWgoCj%GT?%{@@o(AJGt*PG#l3i>lhmb_twKH^EYvacVY-6bsCl5*^~L0 zonm@lk2UvvTKr2RS%}T>^~EYqdL1q4nD%0n&Xqr^cK^`J5W;lRRB^R-O8b&HENO||mo0xaD+S=I8RTlIfVgqN@SXDr2&-)we--K7w= zJVU8?Z+7k9dy;s;^gDkQa`0nz6N{T?(A&Iz)2!DEecLyRa&FI!id#5Z7B*O2=PsR0 zEvc|8{NS^)!d)MDX(97Xw}m&kEO@5jqRaDZ!+%`wYOI<23q|&js`&o4xvjP7D_xv@ z5hEwpsp{HezI9!~6O{~)lLR@oF7?J7i>1|5a~UuoN=q&6N}EJPV_GD`&M*v8Y`^2j zKII*d_@Fi$+i*YEW+Hbzn{iQk~yP z>7N{S4)r*!NwQ`(qcN#8SRQsNK6>{)X12nbF`*7#ecO7I)Q$uZsV+xS4E7aUn+U(K baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/apps/sample/public/index.html b/apps/sample/public/index.html deleted file mode 100644 index aa069f27c..000000000 --- a/apps/sample/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - React App - - - -
- - - diff --git a/apps/sample/public/logo192.png b/apps/sample/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/apps/sample/public/manifest.json b/apps/sample/public/manifest.json deleted file mode 100644 index 080d6c77a..000000000 --- a/apps/sample/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/apps/sample/public/next.svg b/apps/sample/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/apps/sample/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/sample/public/robots.txt b/apps/sample/public/robots.txt deleted file mode 100644 index e9e57dc4d..000000000 --- a/apps/sample/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/apps/sample/public/vercel.svg b/apps/sample/public/vercel.svg new file mode 100644 index 000000000..d2f842227 --- /dev/null +++ b/apps/sample/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/sample/src/App.css b/apps/sample/src/App.css deleted file mode 100644 index 74b5e0534..000000000 --- a/apps/sample/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/apps/sample/src/App.test.tsx b/apps/sample/src/App.test.tsx deleted file mode 100644 index 2a68616d9..000000000 --- a/apps/sample/src/App.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/apps/sample/src/App.tsx b/apps/sample/src/App.tsx deleted file mode 100644 index 4165a3055..000000000 --- a/apps/sample/src/App.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import './App.css'; -import {useCallback, useState} from "react"; - -function App() { - const [devices, setDevices] = useState>([]); - const [getDeviceError, setGetDeviceError] = useState(""); - const [requestDeviceError, setRequestDeviceError] = useState(""); - - const requestDevice = useCallback(async () => { - try { - setRequestDeviceError(""); - const device = await navigator.bluetooth.requestDevice({ - acceptAllDevices: true - }); - setDevices([device]) - } catch (error) { - setRequestDeviceError((error as Error).message); - setDevices([]); - console.error(error); - } - }, []) - - const getDevices = useCallback(async () => { - try { - setGetDeviceError(""); - const devices = await navigator.bluetooth.getDevices(); - setDevices(devices); - if (!devices.length) { - throw new Error("getDevices got 0 devices"); - } - } catch (error) { - setGetDeviceError((error as Error).message); - setDevices([]); - console.error(error); - await requestDevice(); - } - }, []) - return ( - - ); -} - -export default App; \ No newline at end of file diff --git a/apps/sample/src/app/favicon.ico b/apps/sample/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/apps/sample/src/app/globals.css b/apps/sample/src/app/globals.css new file mode 100644 index 000000000..fd81e8858 --- /dev/null +++ b/apps/sample/src/app/globals.css @@ -0,0 +1,27 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; + --background-end-rgb: 255, 255, 255; +} + +@media (prefers-color-scheme: dark) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + } +} + +body { + color: rgb(var(--foreground-rgb)); + background: linear-gradient( + to bottom, + transparent, + rgb(var(--background-end-rgb)) + ) + rgb(var(--background-start-rgb)); +} diff --git a/apps/sample/src/app/layout.tsx b/apps/sample/src/app/layout.tsx new file mode 100644 index 000000000..40e027fbe --- /dev/null +++ b/apps/sample/src/app/layout.tsx @@ -0,0 +1,22 @@ +import type { Metadata } from 'next' +import { Inter } from 'next/font/google' +import './globals.css' + +const inter = Inter({ subsets: ['latin'] }) + +export const metadata: Metadata = { + title: 'Create Next App', + description: 'Generated by create next app', +} + +export default function RootLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} diff --git a/apps/sample/src/app/page.tsx b/apps/sample/src/app/page.tsx new file mode 100644 index 000000000..b97326626 --- /dev/null +++ b/apps/sample/src/app/page.tsx @@ -0,0 +1,113 @@ +import Image from 'next/image' + +export default function Home() { + return ( +
+
+

+ Get started by editing  + src/app/page.tsx +

+ +
+ +
+ Next.js Logo +
+ + +
+ ) +} diff --git a/apps/sample/src/index.css b/apps/sample/src/index.css deleted file mode 100644 index ec2585e8c..000000000 --- a/apps/sample/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/apps/sample/src/index.tsx b/apps/sample/src/index.tsx deleted file mode 100644 index 032464fb6..000000000 --- a/apps/sample/src/index.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App'; -import reportWebVitals from './reportWebVitals'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement -); -root.render( - - - -); - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/apps/sample/src/logo.svg b/apps/sample/src/logo.svg deleted file mode 100644 index 9dfc1c058..000000000 --- a/apps/sample/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/sample/src/react-app-env.d.ts b/apps/sample/src/react-app-env.d.ts deleted file mode 100644 index 6431bc5fc..000000000 --- a/apps/sample/src/react-app-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/apps/sample/src/reportWebVitals.ts b/apps/sample/src/reportWebVitals.ts deleted file mode 100644 index 49a2a16e0..000000000 --- a/apps/sample/src/reportWebVitals.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ReportHandler } from 'web-vitals'; - -const reportWebVitals = (onPerfEntry?: ReportHandler) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/apps/sample/src/setupTests.ts b/apps/sample/src/setupTests.ts deleted file mode 100644 index 8f2609b7b..000000000 --- a/apps/sample/src/setupTests.ts +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/apps/sample/tailwind.config.ts b/apps/sample/tailwind.config.ts new file mode 100644 index 000000000..1af3b8f01 --- /dev/null +++ b/apps/sample/tailwind.config.ts @@ -0,0 +1,20 @@ +import type { Config } from 'tailwindcss' + +const config: Config = { + content: [ + './src/pages/**/*.{js,ts,jsx,tsx,mdx}', + './src/components/**/*.{js,ts,jsx,tsx,mdx}', + './src/app/**/*.{js,ts,jsx,tsx,mdx}', + ], + theme: { + extend: { + backgroundImage: { + 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', + 'gradient-conic': + 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', + }, + }, + }, + plugins: [], +} +export default config diff --git a/apps/sample/tsconfig.json b/apps/sample/tsconfig.json index a273b0cfc..e59724b28 100644 --- a/apps/sample/tsconfig.json +++ b/apps/sample/tsconfig.json @@ -1,26 +1,27 @@ { "compilerOptions": { "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, + "noEmit": true, + "esModuleInterop": true, "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx" + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } }, - "include": [ - "src" - ] + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] } diff --git a/packages/core/src/transport/ble/BleTransport.ts b/packages/core/src/transport/ble/BleTransport.ts index 5a5146e56..d8edd0060 100644 --- a/packages/core/src/transport/ble/BleTransport.ts +++ b/packages/core/src/transport/ble/BleTransport.ts @@ -1,9 +1,8 @@ -import { Transport } from "../Transport" -import { Response } from "../model/Response" +import { Transport } from "../Transport"; +import { Response } from "../model/Response"; - -export default class BleTransport implements Transport { - send(apduHex: String): Response| undefined { - return undefined - } +export class BleTransport implements Transport { + send(_apduHex: String): Response | undefined { + return undefined; + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9be956fd9..660c7faac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,14 +5,21 @@ settings: excludeLinksFromLockfile: false importers: + .: devDependencies: + '@ledgerhq/eslint-config-dsdk': + specifier: workspace:* + version: link:packages/eslint-config-dsdk + '@tsconfig/recommended': + specifier: ^1.0.3 + version: 1.0.3 eslint: specifier: ^8.56.0 version: 8.56.0 - eslint-config-dsdk: - specifier: workspace:* - version: link:packages/eslint-config + lint-staged: + specifier: ^15.2.0 + version: 15.2.0 path: specifier: ^0.12.7 version: 0.12.7 @@ -25,48 +32,45 @@ importers: apps/sample: dependencies: - '@testing-library/jest-dom': - specifier: ^5.17.0 - version: 5.17.0 - '@testing-library/react': - specifier: ^13.4.0 - version: 13.4.0(react-dom@18.2.0)(react@18.2.0) - '@testing-library/user-event': - specifier: ^13.5.0 - version: 13.5.0(@testing-library/dom@9.3.3) - '@types/jest': - specifier: ^27.5.2 - version: 27.5.2 + next: + specifier: 14.0.4 + version: 14.0.4(react-dom@18.2.0)(react@18.2.0) + react: + specifier: ^18 + version: 18.2.0 + react-dom: + specifier: ^18 + version: 18.2.0(react@18.2.0) + devDependencies: '@types/node': - specifier: ^16.18.68 - version: 16.18.68 + specifier: ^20 + version: 20.10.5 '@types/react': - specifier: ^18.2.45 + specifier: ^18 version: 18.2.45 '@types/react-dom': - specifier: ^18.2.17 + specifier: ^18 version: 18.2.18 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - react-scripts: - specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(react@18.2.0)(typescript@4.9.5) + autoprefixer: + specifier: ^10.0.1 + version: 10.4.16(postcss@8.4.32) + eslint: + specifier: ^8 + version: 8.56.0 + eslint-config-next: + specifier: 14.0.4 + version: 14.0.4(eslint@8.56.0)(typescript@5.3.3) + postcss: + specifier: ^8 + version: 8.4.32 + tailwindcss: + specifier: ^3.3.0 + version: 3.3.6 typescript: - specifier: ^4.9.5 - version: 4.9.5 - web-vitals: - specifier: ^2.1.4 - version: 2.1.4 - devDependencies: - '@types/web-bluetooth': - specifier: ^0.0.20 - version: 0.0.20 + specifier: ^5 + version: 5.3.3 - packages/device-sdk-core: + packages/core: dependencies: reflect-metadata: specifier: ^0.2.1 @@ -75,6 +79,9 @@ importers: specifier: ^4.8.0 version: 4.8.0 devDependencies: + '@ledgerhq/eslint-config-dsdk': + specifier: workspace:* + version: link:../eslint-config-dsdk '@types/eslint': specifier: ^8.44.9 version: 8.44.9 @@ -84,15 +91,46 @@ importers: eslint: specifier: ^8.56.0 version: 8.56.0 - eslint-config-dsdk: - specifier: workspace:* - version: link:../eslint-config typescript: specifier: ^5.3.3 version: 5.3.3 - packages/device-sdk-signer: + packages/eslint-config-dsdk: + devDependencies: + '@typescript-eslint/eslint-plugin': + specifier: ^6.14.0 + version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: ^6.14.0 + version: 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@vercel/style-guide': + specifier: ^5.1.0 + version: 5.1.0(eslint@8.56.0)(prettier@3.1.1)(typescript@5.3.3) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.56.0) + eslint-config-turbo: + specifier: ^1.10.12 + version: 1.11.2(eslint@8.56.0) + eslint-plugin-only-warn: + specifier: ^1.1.0 + version: 1.1.0 + prettier: + specifier: ^3.1.1 + version: 3.1.1 + + packages/signer: + dependencies: + reflect-metadata: + specifier: ^0.2.1 + version: 0.2.1 + tsyringe: + specifier: ^4.8.0 + version: 4.8.0 devDependencies: + '@ledgerhq/eslint-config-dsdk': + specifier: workspace:* + version: link:../eslint-config-dsdk '@types/eslint': specifier: ^8.44.9 version: 8.44.9 @@ -102,15 +140,22 @@ importers: eslint: specifier: ^8.56.0 version: 8.56.0 - eslint-config-dsdk: - specifier: workspace:* - version: link:../eslint-config typescript: specifier: ^5.3.3 version: 5.3.3 - packages/device-sdk-trusted-apps: + packages/trusted-apps: + dependencies: + reflect-metadata: + specifier: ^0.2.1 + version: 0.2.1 + tsyringe: + specifier: ^4.8.0 + version: 4.8.0 devDependencies: + '@ledgerhq/eslint-config-dsdk': + specifier: workspace:* + version: link:../eslint-config-dsdk '@types/eslint': specifier: ^8.44.9 version: 8.44.9 @@ -120,15 +165,22 @@ importers: eslint: specifier: ^8.56.0 version: 8.56.0 - eslint-config-dsdk: - specifier: workspace:* - version: link:../eslint-config typescript: specifier: ^5.3.3 version: 5.3.3 - packages/device-sdk-ui: + packages/ui: + dependencies: + reflect-metadata: + specifier: ^0.2.1 + version: 0.2.1 + tsyringe: + specifier: ^4.8.0 + version: 4.8.0 devDependencies: + '@ledgerhq/eslint-config-dsdk': + specifier: workspace:* + version: link:../eslint-config-dsdk '@types/eslint': specifier: ^8.44.9 version: 8.44.9 @@ -138,36 +190,21 @@ importers: eslint: specifier: ^8.56.0 version: 8.56.0 - eslint-config-dsdk: - specifier: workspace:* - version: link:../eslint-config typescript: specifier: ^5.3.3 version: 5.3.3 - packages/eslint-config: - devDependencies: - '@vercel/style-guide': - specifier: ^5.1.0 - version: 5.1.0(eslint@8.56.0)(typescript@5.3.3) - eslint-config-turbo: - specifier: ^1.10.12 - version: 1.11.2(eslint@8.56.0) - packages: /@aashutoshrathi/word-wrap@1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - - /@adobe/css-tools@4.3.2: - resolution: {integrity: sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==} - dev: false + dev: true /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - dev: false + dev: true /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} @@ -175,18 +212,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 - - /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): - resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} - engines: {node: '>=10'} - peerDependencies: - ajv: '>=8' - dependencies: - ajv: 8.12.0 - json-schema: 0.4.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - dev: false + dev: true /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} @@ -194,10 +220,12 @@ packages: dependencies: '@babel/highlight': 7.23.4 chalk: 2.4.2 + dev: true /@babel/compat-data@7.23.5: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} + dev: true /@babel/core@7.23.6: resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} @@ -220,6 +248,7 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.56.0): resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} @@ -233,6 +262,7 @@ packages: eslint: 8.56.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 + dev: true /@babel/generator@7.23.6: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} @@ -242,20 +272,7 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 - - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false + dev: true /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} @@ -266,55 +283,12 @@ packages: browserslist: 4.22.2 lru-cache: 5.1.1 semver: 6.3.1 - - /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - dev: false - - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.6): - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.3.2 - semver: 6.3.1 - dev: false - - /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.6): - resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: false + dev: true /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-function-name@7.23.0: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} @@ -322,25 +296,21 @@ packages: dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.6 + dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.6 - - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false + dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.6 + dev: true /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} @@ -354,82 +324,36 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.6): - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.20 - dev: false - - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: false + dev: true /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.6 - - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false + dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.6 + dev: true /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - - /@babel/helper-wrap-function@7.22.20: - resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - dev: false + dev: true /@babel/helpers@7.23.6: resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} @@ -440,6 +364,7 @@ packages: '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color + dev: true /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} @@ -448,6 +373,7 @@ packages: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + dev: true /@babel/parser@7.23.6: resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} @@ -455,8501 +381,3238 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.6 + dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + /@babel/runtime@7.23.6: + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + regenerator-runtime: 0.14.1 + dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) - dev: false + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-proposal-decorators@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.6) - dev: false + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - dev: false + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - dev: false + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.6): - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - dev: false + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. - peerDependencies: - '@babel/core': ^7.0.0-0 + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6): - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - dev: false + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.23.6): - resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) - dev: false + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.6): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + dev: true - /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true - /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@next/env@14.0.4: + resolution: {integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==} dev: false - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@next/eslint-plugin-next@14.0.4: + resolution: {integrity: sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + glob: 7.1.7 + dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@next/swc-darwin-arm64@14.0.4: + resolution: {integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true dev: false + optional: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@next/swc-darwin-x64@14.0.4: + resolution: {integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true dev: false + optional: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@next/swc-linux-arm64-gnu@14.0.4: + resolution: {integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true dev: false + optional: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@next/swc-linux-arm64-musl@14.0.4: + resolution: {integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true dev: false + optional: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@next/swc-linux-x64-gnu@14.0.4: + resolution: {integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true dev: false + optional: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@next/swc-linux-x64-musl@14.0.4: + resolution: {integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true dev: false + optional: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@next/swc-win32-arm64-msvc@14.0.4: + resolution: {integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true dev: false + optional: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.6): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@next/swc-win32-ia32-msvc@14.0.4: + resolution: {integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true dev: false + optional: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@next/swc-win32-x64-msvc@14.0.4: + resolution: {integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true dev: false + optional: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + eslint-scope: 5.1.1 + dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true - /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - dev: false + cross-spawn: 7.0.3 + fast-glob: 3.3.2 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + dev: true - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@rushstack/eslint-patch@1.6.1: + resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} + dev: true + + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + tslib: 2.6.2 dev: false - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@tsconfig/recommended@1.0.3: + resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} + dev: true - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/eslint@8.44.9: + resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 + /@types/fs-extra@11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) - dev: false + '@types/jsonfile': 6.1.4 + '@types/node': 20.10.5 + dev: true - /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.6): - resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 - dev: false + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.15 - dev: false + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/jsonfile@6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@types/node': 20.10.5 + dev: true - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + dev: true - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/node@18.19.3: + resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + undici-types: 5.26.5 + dev: true - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/node@20.10.5: + resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) - dev: false + undici-types: 5.26.5 + dev: true - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) - dev: false + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + dev: true - /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) - dev: false + /@types/ps-tree@1.1.6: + resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} + dev: true - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/react-dom@18.2.18: + resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: false + '@types/react': 18.2.45 + dev: true - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/react@18.2.45: + resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 + csstype: 3.1.3 + dev: true - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - dev: false + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + dev: true - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - dev: false + /@types/which@3.0.3: + resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} + dev: true - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + eslint: 8.56.0 + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + eslint: 8.56.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - dev: false + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@typescript-eslint/scope-manager@6.14.0: + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - dev: false + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 + dev: true - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.56.0 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.6): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@typescript-eslint/types@6.14.0: + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - dev: false + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - dev: false + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) - dev: false + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + eslint: 8.56.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^7.0.0 || ^8.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - dev: false + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + eslint: 8.56.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - dev: false + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@typescript-eslint/visitor-keys@6.14.0: + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - dev: false + '@typescript-eslint/types': 6.14.0 + eslint-visitor-keys: 3.4.3 + dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} - engines: {node: '>=6.9.0'} + /@vercel/style-guide@5.1.0(eslint@8.56.0)(prettier@3.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} + engines: {node: '>=16'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@next/eslint-plugin-next': '>=12.3.0 <15' + eslint: '>=8.48.0 <9' + prettier: '>=3.0.0 <4' + typescript: '>=4.8.0 <6' + peerDependenciesMeta: + '@next/eslint-plugin-next': + optional: true + eslint: + optional: true + prettier: + optional: true + typescript: + optional: true dependencies: '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-config-prettier: 9.1.0(eslint@8.56.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) + eslint-plugin-react: 7.33.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + eslint-plugin-testing-library: 6.2.0(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 48.0.1(eslint@8.56.0) + prettier: 3.1.1 + prettier-plugin-packagejson: 2.4.7(prettier@3.1.1) + typescript: 5.3.3 + transitivePeerDependencies: + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} - engines: {node: '>=6.9.0'} + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: - '@babel/core': ^7.0.0-0 + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) - dev: false + acorn: 8.11.2 + dev: true - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true - /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true - /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /ansi-escapes@6.2.0: + resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} + engines: {node: '>=14.16'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + type-fest: 3.13.1 + dev: true - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.6): - resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) - dev: false + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) - '@babel/types': 7.23.6 - dev: false + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true - /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + color-convert: 1.9.3 + dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - regenerator-transform: 0.15.2 - dev: false + color-convert: 2.0.1 + dev: true - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true - /@babel/plugin-transform-runtime@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: false + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + dequal: 2.0.3 + dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: true - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) - dev: false + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true - /@babel/preset-env@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.6) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.6) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.6) - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) - core-js-compat: 3.34.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.6): - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.6 - esutils: 2.0.3 - dev: false + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true - /@babel/preset-react@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.6) - '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.6) - dev: false + has-symbols: 1.0.3 + dev: true - /@babel/preset-typescript@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} - engines: {node: '>=6.9.0'} + /autoprefixer@10.4.16(postcss@8.4.32): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true peerDependencies: - '@babel/core': ^7.0.0-0 + postcss: ^8.1.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) - dev: false - - /@babel/regjsgen@0.8.0: - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - dev: false + browserslist: 4.22.2 + caniuse-lite: 1.0.30001570 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: true - /@babel/runtime@7.23.6: - resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: true - /@babel/traverse@7.23.6: - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} - engines: {node: '>=6.9.0'} + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + dequal: 2.0.3 + dev: true - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: false + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: true - /@csstools/normalize.css@12.0.0: - resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} - dev: false + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true - /@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.32): - resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + big-integer: 1.6.52 + dev: true - /@csstools/postcss-color-function@1.1.1(postcss@8.4.32): - resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true - /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.32): - resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + fill-range: 7.0.1 + dev: true - /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + caniuse-lite: 1.0.30001570 + electron-to-chromium: 1.4.614 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: true - /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.32): - resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + run-applescript: 5.0.0 + dev: true - /@csstools/postcss-nested-calc@1.0.0(postcss@8.4.32): - resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + streamsearch: 1.1.0 dev: false - /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: true - /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.32): - resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /caniuse-lite@1.0.30001570: + resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true - /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.32): - resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true - /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true - /@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.32): - resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + escape-string-regexp: 1.0.5 + dev: true - /@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.32): - resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} - engines: {node: ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + restore-cursor: 4.0.0 + dev: true - /@csstools/postcss-unset-value@1.0.2(postcss@8.4.32): - resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} dependencies: - postcss: 8.4.32 + slice-ansi: 5.0.0 + string-width: 7.0.0 + dev: true + + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false - /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.13): - resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss-selector-parser: ^6.0.10 + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: - postcss-selector-parser: 6.0.13 - dev: false + color-name: 1.1.3 + dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 + color-name: 1.1.4 + dev: true - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + /commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: false + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: false + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true - /@jest/console@27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - dev: false + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: true + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true - /@jest/console@28.1.3: - resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: - '@jest/types': 28.1.3 - '@types/node': 20.10.5 - chalk: 4.1.2 - jest-message-util: 28.1.3 - jest-util: 28.1.3 - slash: 3.0.0 - dev: false + ms: 2.1.3 + dev: true - /@jest/core@27.5.1: - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + supports-color: '*' peerDependenciesMeta: - node-notifier: + supports-color: optional: true dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.8.1 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 27.5.1 - jest-config: 27.5.1 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 - micromatch: 4.0.5 - rimraf: 3.0.2 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: false + ms: 2.1.2 + dev: true - /@jest/environment@27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - jest-mock: 27.5.1 - dev: false + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true - /@jest/fake-timers@27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.1.0 - '@types/node': 20.10.5 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: false + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true - /@jest/globals@27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 - dev: false + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true - /@jest/reporters@27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - jest-haste-map: 27.5.1 - jest-resolve: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - slash: 3.0.0 - source-map: 0.6.1 - string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 8.1.1 - transitivePeerDependencies: - - supports-color - dev: false + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true - /@jest/schemas@28.1.3: - resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@sinclair/typebox': 0.24.51 - dev: false + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true - /@jest/source-map@27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} dependencies: - callsites: 3.1.0 - graceful-fs: 4.2.11 - source-map: 0.6.1 - dev: false + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: true - /@jest/test-result@27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/types': 27.5.1 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: false + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true - /@jest/test-result@28.1.3: - resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/console': 28.1.3 - '@jest/types': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: false + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + dev: true - /@jest/test-sequencer@27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-runtime: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: false + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - /@jest/transform@27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.23.6 - '@jest/types': 27.5.1 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 1.9.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 - transitivePeerDependencies: - - supports-color - dev: false + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true - /@jest/types@27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.5 - '@types/yargs': 16.0.9 - chalk: 4.1.2 - dev: false + path-type: 4.0.0 + dev: true - /@jest/types@28.1.3: - resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.5 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: false + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + esutils: 2.0.3 + dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - dev: false - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + esutils: 2.0.3 + dev: true - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + dev: true - /@leichtgewicht/ip-codec@2.0.4: - resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} - dev: false + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true - /@microsoft/tsdoc-config@0.16.2: - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 + /electron-to-chromium@1.4.614: + resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} dev: true - /@microsoft/tsdoc@0.14.2: - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + /emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} dev: true - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - dependencies: - eslint-scope: 5.1.1 + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + is-arrayish: 0.2.1 + dev: true - /@pkgr/utils@2.4.2: - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + 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.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + 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.13 dev: true - /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0): - resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <5.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} dependencies: - ansi-html-community: 0.0.8 - common-path-prefix: 3.0.0 - core-js-pure: 3.34.0 - error-stack-parser: 2.1.4 - find-up: 5.0.0 - html-entities: 2.4.0 - loader-utils: 2.0.4 - react-refresh: 0.11.0 - schema-utils: 3.3.0 - source-map: 0.7.4 - webpack: 5.89.0 - webpack-dev-server: 4.15.1(webpack@5.89.0) - dev: false + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: true - /@rollup/plugin-babel@5.3.1(@babel/core@7.23.6)(rollup@2.79.1): - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-imports': 7.22.15 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 - dev: false + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + dev: true - /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 2.79.1 - dev: false + hasown: 2.0.0 + dev: true - /@rollup/plugin-replace@2.4.2(rollup@2.79.1): - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.9 - rollup: 2.79.1 - dev: false + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true - /@rollup/pluginutils@3.1.0(rollup@2.79.1): - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - dev: false + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true - /@rushstack/eslint-patch@1.6.1: - resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true - /@sinclair/typebox@0.24.51: - resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} - dev: false + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true - /@sinonjs/commons@1.8.6: - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + /eslint-config-next@14.0.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true dependencies: - type-detect: 4.0.8 - dev: false + '@next/eslint-plugin-next': 14.0.4 + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-react: 7.33.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + typescript: 5.3.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true - /@sinonjs/fake-timers@8.1.0: - resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + /eslint-config-prettier@9.1.0(eslint@8.56.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' dependencies: - '@sinonjs/commons': 1.8.6 - dev: false + eslint: 8.56.0 + dev: true - /@surma/rollup-plugin-off-main-thread@2.2.3: - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + /eslint-config-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} + peerDependencies: + eslint: '>6.6.0' dependencies: - ejs: 3.1.9 - json5: 2.2.3 - magic-string: 0.25.9 - string.prototype.matchall: 4.0.10 - dev: false - - /@svgr/babel-plugin-add-jsx-attribute@5.4.0: - resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-remove-jsx-attribute@5.4.0: - resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1: - resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1: - resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-svg-dynamic-title@5.4.0: - resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-svg-em-dimensions@5.4.0: - resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-transform-react-native-svg@5.4.0: - resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-transform-svg-component@5.5.0: - resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} - engines: {node: '>=10'} - dev: false + eslint: 8.56.0 + eslint-plugin-turbo: 1.11.2(eslint@8.56.0) + dev: true - /@svgr/babel-preset@5.5.0: - resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} - engines: {node: '>=10'} + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' dependencies: - '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 - '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 - '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 - '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 - '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 - '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 - '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 - '@svgr/babel-plugin-transform-svg-component': 5.5.0 - dev: false + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + dev: true - /@svgr/core@5.5.0: - resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} - engines: {node: '>=10'} + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: - '@svgr/plugin-jsx': 5.5.0 - camelcase: 6.3.0 - cosmiconfig: 7.1.0 + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: false - - /@svgr/hast-util-to-babel-ast@5.5.0: - resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} - engines: {node: '>=10'} - dependencies: - '@babel/types': 7.23.6 - dev: false + dev: true - /@svgr/plugin-jsx@5.5.0: - resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} - engines: {node: '>=10'} + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' dependencies: - '@babel/core': 7.23.6 - '@svgr/babel-preset': 5.5.0 - '@svgr/hast-util-to-babel-ast': 5.5.0 - svg-parser: 2.0.4 + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.56.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(eslint@8.56.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack - supports-color - dev: false - - /@svgr/plugin-svgo@5.5.0: - resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} - engines: {node: '>=10'} - dependencies: - cosmiconfig: 7.1.0 - deepmerge: 4.3.1 - svgo: 1.3.2 - dev: false + dev: true - /@svgr/webpack@5.5.0: - resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} - engines: {node: '>=10'} + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.23.6) - '@babel/preset-env': 7.23.6(@babel/core@7.23.6) - '@babel/preset-react': 7.23.3(@babel/core@7.23.6) - '@svgr/core': 5.5.0 - '@svgr/plugin-jsx': 5.5.0 - '@svgr/plugin-svgo': 5.5.0 - loader-utils: 2.0.4 + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.56.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack - supports-color - dev: false - - /@testing-library/dom@8.20.1: - resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} - engines: {node: '>=12'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.23.6 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: false - - /@testing-library/dom@9.3.3: - resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} - engines: {node: '>=14'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.23.6 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: false - - /@testing-library/jest-dom@5.17.0: - resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} - engines: {node: '>=8', npm: '>=6', yarn: '>=1'} - dependencies: - '@adobe/css-tools': 4.3.2 - '@babel/runtime': 7.23.6 - '@types/testing-library__jest-dom': 5.14.9 - aria-query: 5.3.0 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.5.16 - lodash: 4.17.21 - redent: 3.0.0 - dev: false + dev: true - /@testing-library/react@13.4.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} - engines: {node: '>=12'} + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true dependencies: - '@babel/runtime': 7.23.6 - '@testing-library/dom': 8.20.1 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + dev: true - /@testing-library/user-event@13.5.0(@testing-library/dom@9.3.3): - resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} - engines: {node: '>=10', npm: '>=6'} + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} peerDependencies: - '@testing-library/dom': '>=7.21.4' - dependencies: - '@babel/runtime': 7.23.6 - '@testing-library/dom': 9.3.3 - dev: false - - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: false - - /@trysound/sax@0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: false - - /@types/aria-query@5.0.4: - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - dev: false - - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.4 - dev: false - - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - dev: false - - /@types/babel__traverse@7.20.4: - resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.10.5 - dev: false - - /@types/bonjour@3.5.13: - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - dependencies: - '@types/node': 20.10.5 - dev: false - - /@types/connect-history-api-fallback@1.5.4: - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - dependencies: - '@types/express-serve-static-core': 4.17.41 - '@types/node': 20.10.5 - dev: false - - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 20.10.5 - dev: false - - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - dependencies: - '@types/eslint': 8.44.9 - '@types/estree': 1.0.5 - dev: false - - /@types/eslint@8.44.9: - resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - - /@types/estree@0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: false - - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - - /@types/express-serve-static-core@4.17.41: - resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} - dependencies: - '@types/node': 20.10.5 - '@types/qs': 6.9.10 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - dev: false - - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.41 - '@types/qs': 6.9.10 - '@types/serve-static': 1.15.5 - dev: false - - /@types/fs-extra@11.0.4: - resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} - dependencies: - '@types/jsonfile': 6.1.4 - '@types/node': 20.10.5 - dev: true - - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - dependencies: - '@types/node': 20.10.5 - dev: false - - /@types/html-minifier-terser@6.1.0: - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - dev: false - - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: false - - /@types/http-proxy@1.17.14: - resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} - dependencies: - '@types/node': 20.10.5 - dev: false - - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: false - - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - dev: false - - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - dependencies: - '@types/istanbul-lib-report': 3.0.3 - dev: false - - /@types/jest@27.5.2: - resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} - dependencies: - jest-matcher-utils: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - /@types/jsonfile@6.1.4: - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - dependencies: - '@types/node': 20.10.5 - dev: true - - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: false - - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - dev: false - - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: true - - /@types/node-forge@1.3.10: - resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} - dependencies: - '@types/node': 20.10.5 - dev: false - - /@types/node@16.18.68: - resolution: {integrity: sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==} - dev: false - - /@types/node@18.19.3: - resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/node@20.10.5: - resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} - dependencies: - undici-types: 5.26.5 - - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true - - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: false - - /@types/prettier@2.7.3: - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - dev: false - - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - dev: false - - /@types/ps-tree@1.1.6: - resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} - dev: true - - /@types/q@1.5.8: - resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} - dev: false - - /@types/qs@6.9.10: - resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} - dev: false - - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: false - - /@types/react-dom@18.2.18: - resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} - dependencies: - '@types/react': 18.2.45 - dev: false - - /@types/react@18.2.45: - resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} - dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.3 - dev: false - - /@types/resolve@1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - dependencies: - '@types/node': 20.10.5 - dev: false - - /@types/retry@0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: false - - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} - dev: false - - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.10.5 - dev: false - - /@types/serve-index@1.9.4: - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - dependencies: - '@types/express': 4.17.21 - dev: false - - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} - dependencies: - '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 - '@types/node': 20.10.5 - dev: false - - /@types/sockjs@0.3.36: - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - dependencies: - '@types/node': 20.10.5 - dev: false - - /@types/stack-utils@2.0.3: - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - dev: false - - /@types/testing-library__jest-dom@5.14.9: - resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} - dependencies: - '@types/jest': 27.5.2 - dev: false - - /@types/trusted-types@2.0.7: - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - dev: false - - /@types/web-bluetooth@0.0.20: - resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - dev: true - - /@types/which@3.0.3: - resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} - dev: true - - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - dependencies: - '@types/node': 20.10.5 - dev: false - - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: false - - /@types/yargs@16.0.9: - resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: false - - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: false - - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - debug: 4.3.4 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare-lite: 1.4.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/experimental-utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - debug: 4.3.4 - eslint: 8.56.0 - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 - eslint: 8.56.0 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - - /@typescript-eslint/scope-manager@6.14.0: - resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 - dev: true - - /@typescript-eslint/type-utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - debug: 4.3.4 - eslint: 8.56.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.56.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - /@typescript-eslint/types@6.14.0: - resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - - /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): - resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - eslint: 8.56.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - eslint: 8.56.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - eslint: 8.56.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - - /@typescript-eslint/visitor-keys@6.14.0: - resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.14.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - /@vercel/style-guide@5.1.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} - engines: {node: '>=16'} - peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <15' - eslint: '>=8.48.0 <9' - prettier: '>=3.0.0 <4' - typescript: '>=4.8.0 <6' - peerDependenciesMeta: - '@next/eslint-plugin-next': - optional: true - eslint: - optional: true - prettier: - optional: true - typescript: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - eslint-config-prettier: 9.1.0(eslint@8.56.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.56.0) - prettier-plugin-packagejson: 2.4.7 - typescript: 5.3.3 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - jest - - supports-color - dev: true - - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} - dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: false - - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: false - - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: false - - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - dev: false - - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@xtuc/long': 4.2.2 - dev: false - - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: false - - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - dev: false - - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - dependencies: - '@xtuc/ieee754': 1.2.0 - dev: false - - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - dependencies: - '@xtuc/long': 4.2.2 - dev: false - - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: false - - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 - dev: false - - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: false - - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - dev: false - - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: false - - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@xtuc/long': 4.2.2 - dev: false - - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: false - - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: false - - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead - dev: false - - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: false - - /acorn-globals@6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: false - - /acorn-import-assertions@1.9.0(acorn@8.11.2): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 - dependencies: - acorn: 8.11.2 - dev: false - - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.2 - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: false - - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - - /address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - dev: false - - /adjust-sourcemap-loader@4.0.0: - resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} - engines: {node: '>=8.9'} - dependencies: - loader-utils: 2.0.4 - regex-parser: 2.2.11 - dev: false - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.12.0 - dev: false - - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: 6.12.6 - dev: false - - /ajv-keywords@5.1.0(ajv@8.12.0): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - dependencies: - ajv: 8.12.0 - fast-deep-equal: 3.1.3 - dev: false - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: false - - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: false - - /ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: false - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: false - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: false - - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: false - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: false - - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: false - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - /aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} - dependencies: - deep-equal: 2.2.3 - dev: false - - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - dependencies: - dequal: 2.0.3 - - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: false - - /array-flatten@2.1.2: - resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} - dev: false - - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-string: 1.0.7 - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - - /array.prototype.reduce@1.0.6: - resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: false - - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: false - - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: false - - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: false - - /autoprefixer@10.4.16(postcss@8.4.32): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001570 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - dependencies: - dequal: 2.0.3 - - /babel-jest@27.5.1(@babel/core@7.23.6): - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.23.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.23.6) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-loader@8.3.0(@babel/core@7.23.6)(webpack@5.89.0): - resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} - engines: {node: '>= 8.9'} - peerDependencies: - '@babel/core': ^7.0.0 - webpack: '>=2' - dependencies: - '@babel/core': 7.23.6 - find-cache-dir: 3.3.2 - loader-utils: 2.0.4 - make-dir: 3.1.0 - schema-utils: 2.7.1 - webpack: 5.89.0 - dev: false - - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-jest-hoist@27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.4 - dev: false - - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - dependencies: - '@babel/runtime': 7.23.6 - cosmiconfig: 7.1.0 - resolve: 1.22.8 - dev: false - - /babel-plugin-named-asset-import@0.3.8(@babel/core@7.23.6): - resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} - peerDependencies: - '@babel/core': ^7.1.0 - dependencies: - '@babel/core': 7.23.6 - dev: false - - /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.6): - resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.6): - resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) - core-js-compat: 3.34.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.6): - resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-transform-react-remove-prop-types@0.4.24: - resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} - dev: false - - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - dev: false - - /babel-preset-jest@27.5.1(@babel/core@7.23.6): - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) - dev: false - - /babel-preset-react-app@10.0.1: - resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-decorators': 7.23.6(@babel/core@7.23.6) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.6) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.6) - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-runtime': 7.23.6(@babel/core@7.23.6) - '@babel/preset-env': 7.23.6(@babel/core@7.23.6) - '@babel/preset-react': 7.23.3(@babel/core@7.23.6) - '@babel/preset-typescript': 7.23.3(@babel/core@7.23.6) - '@babel/runtime': 7.23.6 - babel-plugin-macros: 3.1.0 - babel-plugin-transform-react-remove-prop-types: 0.4.24 - transitivePeerDependencies: - - supports-color - dev: false - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - /batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: false - - /bfj@7.1.0: - resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} - engines: {node: '>= 8.0.0'} - dependencies: - bluebird: 3.7.2 - check-types: 11.2.3 - hoopy: 0.1.4 - jsonpath: 1.1.1 - tryer: 1.0.1 - dev: false - - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - dev: true - - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: false - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: false - - /bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: false - - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /bonjour-service@1.1.1: - resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} - dependencies: - array-flatten: 2.1.2 - dns-equal: 1.0.0 - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - dev: false - - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: false - - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.52 - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: false - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - - /browser-process-hrtime@1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: false - - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001570 - electron-to-chromium: 1.4.614 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) - - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - dependencies: - node-int64: 0.4.0 - dev: false - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: false - - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - dependencies: - run-applescript: 5.0.0 - dev: true - - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: false - - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: false - - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.2 - dev: false - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: false - - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: false - - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: false - - /caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001570 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - dev: false - - /caniuse-lite@1.0.30001570: - resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} - - /case-sensitive-paths-webpack-plugin@2.4.0: - resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} - engines: {node: '>=4'} - dev: false - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: false - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: false - - /char-regex@2.0.1: - resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} - engines: {node: '>=12.20'} - dev: false - - /check-types@11.2.3: - resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} - dev: false - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: false - - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: false - - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: false - - /clean-css@5.3.3: - resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} - engines: {node: '>= 10.0'} - dependencies: - source-map: 0.6.1 - dev: false - - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: false - - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: false - - /coa@2.0.2: - resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} - engines: {node: '>= 4.0'} - dependencies: - '@types/q': 1.5.8 - chalk: 2.4.2 - q: 1.5.1 - dev: false - - /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - dev: false - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - /colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - dev: false - - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: false - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false - - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: false - - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: false - - /commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - dev: false - - /common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: false - - /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: false - - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: false - - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - /confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: false - - /connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: false - - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: false - - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: false - - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: false - - /core-js-compat@3.34.0: - resolution: {integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==} - dependencies: - browserslist: 4.22.2 - dev: false - - /core-js-pure@3.34.0: - resolution: {integrity: sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==} - requiresBuild: true - dev: false - - /core-js@3.34.0: - resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==} - requiresBuild: true - dev: false - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: false - - /cosmiconfig@6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} - engines: {node: '>=8'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false - - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: false - - /css-blank-pseudo@3.0.3(postcss@8.4.32): - resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /css-declaration-sorter@6.4.1(postcss@8.4.32): - resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} - engines: {node: ^10 || ^12 || >=14} - peerDependencies: - postcss: ^8.0.9 - dependencies: - postcss: 8.4.32 - dev: false - - /css-has-pseudo@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /css-loader@6.8.1(webpack@5.89.0): - resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.32) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.32) - postcss-modules-scope: 3.0.0(postcss@8.4.32) - postcss-modules-values: 4.0.0(postcss@8.4.32) - postcss-value-parser: 4.2.0 - semver: 7.5.4 - webpack: 5.89.0 - dev: false - - /css-minimizer-webpack-plugin@3.4.1(webpack@5.89.0): - resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@parcel/css': '*' - clean-css: '*' - csso: '*' - esbuild: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@parcel/css': - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - dependencies: - cssnano: 5.1.15(postcss@8.4.32) - jest-worker: 27.5.1 - postcss: 8.4.32 - schema-utils: 4.2.0 - serialize-javascript: 6.0.1 - source-map: 0.6.1 - webpack: 5.89.0 - dev: false - - /css-prefers-color-scheme@6.0.3(postcss@8.4.32): - resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - dev: false - - /css-select-base-adapter@0.1.1: - resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} - dev: false - - /css-select@2.1.0: - resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} - dependencies: - boolbase: 1.0.0 - css-what: 3.4.2 - domutils: 1.7.0 - nth-check: 1.0.2 - dev: false - - /css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - dev: false - - /css-tree@1.0.0-alpha.37: - resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.4 - source-map: 0.6.1 - dev: false - - /css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - dev: false - - /css-what@3.4.2: - resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} - engines: {node: '>= 6'} - dev: false - - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: false - - /css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - dev: false - - /cssdb@7.9.1: - resolution: {integrity: sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==} - dev: false - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /cssnano-preset-default@5.2.14(postcss@8.4.32): - resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - css-declaration-sorter: 6.4.1(postcss@8.4.32) - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-calc: 8.2.4(postcss@8.4.32) - postcss-colormin: 5.3.1(postcss@8.4.32) - postcss-convert-values: 5.1.3(postcss@8.4.32) - postcss-discard-comments: 5.1.2(postcss@8.4.32) - postcss-discard-duplicates: 5.1.0(postcss@8.4.32) - postcss-discard-empty: 5.1.1(postcss@8.4.32) - postcss-discard-overridden: 5.1.0(postcss@8.4.32) - postcss-merge-longhand: 5.1.7(postcss@8.4.32) - postcss-merge-rules: 5.1.4(postcss@8.4.32) - postcss-minify-font-values: 5.1.0(postcss@8.4.32) - postcss-minify-gradients: 5.1.1(postcss@8.4.32) - postcss-minify-params: 5.1.4(postcss@8.4.32) - postcss-minify-selectors: 5.2.1(postcss@8.4.32) - postcss-normalize-charset: 5.1.0(postcss@8.4.32) - postcss-normalize-display-values: 5.1.0(postcss@8.4.32) - postcss-normalize-positions: 5.1.1(postcss@8.4.32) - postcss-normalize-repeat-style: 5.1.1(postcss@8.4.32) - postcss-normalize-string: 5.1.0(postcss@8.4.32) - postcss-normalize-timing-functions: 5.1.0(postcss@8.4.32) - postcss-normalize-unicode: 5.1.1(postcss@8.4.32) - postcss-normalize-url: 5.1.0(postcss@8.4.32) - postcss-normalize-whitespace: 5.1.1(postcss@8.4.32) - postcss-ordered-values: 5.1.3(postcss@8.4.32) - postcss-reduce-initial: 5.1.2(postcss@8.4.32) - postcss-reduce-transforms: 5.1.0(postcss@8.4.32) - postcss-svgo: 5.1.0(postcss@8.4.32) - postcss-unique-selectors: 5.1.1(postcss@8.4.32) - dev: false - - /cssnano-utils@3.1.0(postcss@8.4.32): - resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - dev: false - - /cssnano@5.1.15(postcss@8.4.32): - resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-preset-default: 5.2.14(postcss@8.4.32) - lilconfig: 2.1.0 - postcss: 8.4.32 - yaml: 1.10.2 - dev: false - - /csso@4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} - engines: {node: '>=8.0.0'} - dependencies: - css-tree: 1.1.3 - dev: false - - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: false - - /cssom@0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: false - - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: false - - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: false - - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - - /data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - dev: true - - /data-urls@2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - dev: false - - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: false - - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: false - - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: false - - /deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.2 - is-arguments: 1.1.1 - is-array-buffer: 3.0.2 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - isarray: 2.0.5 - object-is: 1.1.5 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 - dev: false - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: false - - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - dev: true - - /default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - dependencies: - execa: 5.1.1 - dev: false - - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: false - - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 - object-keys: 1.1.1 - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false - - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: false - - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: false - - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: false - - /detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - dev: true - - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: false - - /detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: false - - /detect-port-alt@1.1.6: - resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} - engines: {node: '>= 4.2.1'} - hasBin: true - dependencies: - address: 1.2.2 - debug: 2.6.9 - transitivePeerDependencies: - - supports-color - dev: false - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: false - - /diff-sequences@27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: false - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: false - - /dns-equal@1.0.0: - resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} - dev: false - - /dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - dependencies: - '@leichtgewicht/ip-codec': 2.0.4 - dev: false - - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - - /dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dev: false - - /dom-converter@0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - dependencies: - utila: 0.4.0 - dev: false - - /dom-serializer@0.2.2: - resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} - dependencies: - domelementtype: 2.3.0 - entities: 2.2.0 - dev: false - - /dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - dev: false - - /domelementtype@1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - dev: false - - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: false - - /domexception@2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - deprecated: Use your platform's native DOMException instead - dependencies: - webidl-conversions: 5.0.0 - dev: false - - /domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: false - - /domutils@1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} - dependencies: - dom-serializer: 0.2.2 - domelementtype: 1.3.1 - dev: false - - /domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - dev: false - - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: false - - /dotenv-expand@5.1.0: - resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} - dev: false - - /dotenv@10.0.0: - resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} - engines: {node: '>=10'} - dev: false - - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - dev: true - - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: false - - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.7 - dev: false - - /electron-to-chromium@1.4.614: - resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} - - /emittery@0.10.2: - resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} - engines: {node: '>=12'} - dev: false - - /emittery@0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} - dev: false - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false - - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: false - - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: false - - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - /entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: false - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - - /error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - dependencies: - stackframe: 1.3.4 - dev: false - - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - 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.12 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - 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.13 - - /es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - dev: false - - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - dev: false - - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} - dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.6 - iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 - - /es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} - dev: false - - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.0 - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: false - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: false - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - /escodegen@1.14.3: - resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} - engines: {node: '>=4.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 4.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: false - - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - dev: false - - /eslint-config-prettier@9.1.0(eslint@8.56.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.56.0 - dev: true - - /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5): - resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} - engines: {node: '>=14.0.0'} - peerDependencies: - eslint: ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - babel-preset-react-app: 10.0.1 - confusing-browser-globals: 1.0.11 - eslint: 8.56.0 - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - eslint-plugin-testing-library: 5.11.1(eslint@8.56.0)(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - jest - - supports-color - dev: false - - /eslint-config-turbo@1.11.2(eslint@8.56.0): - resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} - peerDependencies: - eslint: '>6.6.0' - dependencies: - eslint: 8.56.0 - eslint-plugin-turbo: 1.11.2(eslint@8.56.0) - dev: true - - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' - dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - dev: true - - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: false - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - escape-string-regexp: 1.0.5 - eslint: 8.56.0 - ignore: 5.3.0 - dev: true - - /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0): - resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@babel/plugin-syntax-flow': ^7.14.5 - '@babel/plugin-transform-react-jsx': ^7.14.9 - eslint: ^8.1.0 - dependencies: - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) - eslint: 8.56.0 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - dev: false - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.0 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: false - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.0 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5): - resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5) - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - eslint: 8.56.0 - jest: 27.5.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.23.6 - aria-query: 5.3.0 - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - hasown: 2.0.0 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - - /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0): - resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} - peerDependencies: - eslint: '>=7' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true - dependencies: - eslint: 8.56.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - dev: true - - /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.56.0 - - /eslint-plugin-react@7.33.2(eslint@8.56.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - - /eslint-plugin-testing-library@5.11.1(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - dev: true - - /eslint-plugin-turbo@1.11.2(eslint@8.56.0): - resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} - peerDependencies: - eslint: '>6.6.0' - dependencies: - dotenv: 16.0.3 - eslint: 8.56.0 - dev: true - - /eslint-plugin-unicorn@48.0.1(eslint@8.56.0): - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.44.0' - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - ci-info: 3.9.0 - clean-regexp: 1.0.0 - eslint: 8.56.0 - esquery: 1.5.0 - indent-string: 4.0.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.27 - regjsparser: 0.10.0 - semver: 7.5.4 - strip-indent: 3.0.0 - dev: true - - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - /eslint-webpack-plugin@3.2.0(eslint@8.56.0)(webpack@5.89.0): - resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - webpack: ^5.0.0 - dependencies: - '@types/eslint': 8.44.9 - eslint: 8.56.0 - jest-worker: 28.1.3 - micromatch: 4.0.5 - normalize-path: 3.0.0 - schema-utils: 4.2.0 - webpack: 5.89.0 - dev: false - - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - - /esprima@1.2.2: - resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - /estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: false - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: false - - /event-stream@3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} - dependencies: - duplexer: 0.1.2 - from: 0.1.7 - map-stream: 0.1.0 - pause-stream: 0.0.11 - split: 0.3.3 - stream-combiner: 0.0.4 - through: 2.3.8 - dev: true - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false - - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: false - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - 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 - dev: true - - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: false - - /expect@27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-get-type: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - dev: false - - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - - /faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: false - - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - dependencies: - bser: 2.1.1 - dev: false - - /fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.2.1 - dev: true - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - - /file-loader@6.2.0(webpack@5.89.0): - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - webpack: 5.89.0 - dev: false - - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.6 - dev: false - - /filesize@8.0.7: - resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} - engines: {node: '>= 0.4.0'} - dev: false - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: false - - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: false - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - - /follow-redirects@1.15.3: - resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - - /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0): - resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} - engines: {node: '>=10', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - dependencies: - '@babel/code-frame': 7.23.5 - '@types/json-schema': 7.0.15 - chalk: 4.1.2 - chokidar: 3.5.3 - cosmiconfig: 6.0.0 - deepmerge: 4.3.1 - eslint: 8.56.0 - fs-extra: 9.1.0 - glob: 7.2.3 - memfs: 3.5.3 - minimatch: 3.1.2 - schema-utils: 2.7.0 - semver: 7.5.4 - tapable: 1.1.3 - typescript: 4.9.5 - webpack: 5.89.0 - dev: false - - /form-data@3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - dependencies: - fetch-blob: 3.2.0 - dev: true - - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: false - - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: false - - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: false - - /from@0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - dev: true - - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: false - - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: false - - /fs-monkey@1.0.5: - resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} - dev: false - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - functions-have-names: 1.2.3 - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - /fx@31.0.0: - resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==} - hasBin: true - dev: true - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: false - - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} - dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - - /get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - dev: false - - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: false - - /get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} - dependencies: - resolve-pkg-maps: 1.0.0 - dev: true - - /git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: false - - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.3 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: false - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.3 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - /global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} - dependencies: - global-prefix: 3.0.0 - dev: false - - /global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} - dependencies: - ini: 1.3.8 - kind-of: 6.0.3 - which: 1.3.1 - dev: false - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 - - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.2 - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - /gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - dependencies: - duplexer: 0.1.2 - dev: false - - /handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: false - - /harmony-reflect@1.6.2: - resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} - dev: false - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - dependencies: - get-intrinsic: 1.2.2 - - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: false - - /hoopy@0.1.4: - resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} - engines: {node: '>= 6.0.0'} - dev: false - - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - - /hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - dependencies: - inherits: 2.0.3 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - dev: false - - /html-encoding-sniffer@2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: false - - /html-entities@2.4.0: - resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} - dev: false - - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: false - - /html-minifier-terser@6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} - engines: {node: '>=12'} - hasBin: true - dependencies: - camel-case: 4.1.2 - clean-css: 5.3.3 - commander: 8.3.0 - he: 1.2.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 5.26.0 - dev: false - - /html-webpack-plugin@5.5.4(webpack@5.89.0): - resolution: {integrity: sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==} - engines: {node: '>=10.13.0'} - peerDependencies: - webpack: ^5.20.0 - dependencies: - '@types/html-minifier-terser': 6.1.0 - html-minifier-terser: 6.1.0 - lodash: 4.17.21 - pretty-error: 4.0.0 - tapable: 2.2.1 - webpack: 5.89.0 - dev: false - - /htmlparser2@6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 2.2.0 - dev: false - - /http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: false - - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - dev: false - - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - dev: false - - /http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: false - - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /http-proxy-middleware@2.0.6(@types/express@4.17.21): - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - dependencies: - '@types/express': 4.17.21 - '@types/http-proxy': 1.17.14 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.5 - transitivePeerDependencies: - - debug - dev: false - - /http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.3 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - dev: false - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true - - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /icss-utils@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - dev: false - - /idb@7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - dev: false - - /identity-obj-proxy@3.0.0: - resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} - engines: {node: '>=4'} - dependencies: - harmony-reflect: 1.6.2 - dev: false - - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - - /immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - dev: false - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: false - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false - - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: false - - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 - - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: false - - /ipaddr.js@2.1.0: - resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} - engines: {node: '>= 10'} - dev: false - - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: false - - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: false - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.0 - - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - dependencies: - call-bind: 1.0.5 - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: false - - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: false - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: false - - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - /is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - dev: false - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: false - - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: true - - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: false - - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - - /is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - dev: false - - /is-root@2.1.0: - resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} - engines: {node: '>=6'} - dev: false - - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.5 - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.13 - - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: false - - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.5 - - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: false - - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: false - - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.23.6 - '@babel/parser': 7.23.6 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - dev: false - - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: false - - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - dev: false - - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 - - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true - dependencies: - async: 3.2.5 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - dev: false - - /jest-changed-files@27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - execa: 5.1.1 - throat: 6.0.2 - dev: false - - /jest-circus@27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - co: 4.6.0 - dedent: 0.7.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - throat: 6.0.2 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-cli@27.5.1: - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' peerDependenciesMeta: - node-notifier: + '@typescript-eslint/parser': optional: true - dependencies: - '@jest/core': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - import-local: 3.1.0 - jest-config: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - prompts: 2.4.2 - yargs: 16.2.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: false - - /jest-config@27.5.1: - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - ts-node: '>=9.0.0' - peerDependenciesMeta: - ts-node: + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: optional: true dependencies: - '@babel/core': 7.23.6 - '@jest/test-sequencer': 27.5.1 - '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.23.6) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-get-type: 27.5.1 - jest-jasmine2: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runner: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 27.5.1 - slash: 3.0.0 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: false - - /jest-diff@27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-docblock@27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - detect-newline: 3.1.0 - dev: false - - /jest-each@27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - jest-get-type: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-environment-jsdom@27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - jest-mock: 27.5.1 - jest-util: 27.5.1 - jsdom: 16.7.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: false - - /jest-environment-node@27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: false - - /jest-get-type@27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: false - - /jest-haste-map@27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.10.5 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 27.5.1 - jest-serializer: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - dev: false - - /jest-jasmine2@27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - co: 4.6.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - throat: 6.0.2 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - dev: false - - /jest-leak-detector@27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-matcher-utils@27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-message-util@27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 27.5.1 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: false - - /jest-message-util@28.1.3: - resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 28.1.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 28.1.3 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: false - - /jest-mock@27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - dev: false + dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} peerDependencies: - jest-resolve: '*' + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' peerDependenciesMeta: - jest-resolve: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: optional: true dependencies: - jest-resolve: 27.5.1 - dev: false - - /jest-regex-util@27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: false - - /jest-regex-util@28.0.2: - resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dev: false - - /jest-resolve-dependencies@27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-regex-util: 27.5.1 - jest-snapshot: 27.5.1 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color - dev: false - - /jest-resolve@27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) - jest-util: 27.5.1 - jest-validate: 27.5.1 - resolve: 1.22.8 - resolve.exports: 1.1.1 - slash: 3.0.0 - dev: false + dev: true - /jest-runner@27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /eslint-module-utils@2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true dependencies: - '@jest/console': 27.5.1 - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - emittery: 0.8.1 - graceful-fs: 4.2.11 - jest-docblock: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-haste-map: 27.5.1 - jest-leak-detector: 27.5.1 - jest-message-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runtime: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - source-map-support: 0.5.21 - throat: 6.0.2 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: false - - /jest-runtime@27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/globals': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - cjs-module-lexer: 1.2.3 - collect-v8-coverage: 1.0.2 - execa: 5.1.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - strip-bom: 4.0.0 + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - dev: false + dev: true - /jest-serializer@27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' dependencies: - '@types/node': 20.10.5 - graceful-fs: 4.2.11 - dev: false + escape-string-regexp: 1.0.5 + eslint: 8.56.0 + ignore: 5.3.0 + dev: true - /jest-snapshot@27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__traverse': 7.20.4 - '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) - chalk: 4.1.2 - expect: 27.5.1 - graceful-fs: 4.2.11 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - jest-haste-map: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - natural-compare: 1.4.0 - pretty-format: 27.5.1 - semver: 7.5.4 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack - supports-color - dev: false - - /jest-util@27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: false - - /jest-util@28.1.3: - resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 20.10.5 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: false - - /jest-validate@27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 27.5.1 - leven: 3.1.0 - pretty-format: 27.5.1 - dev: false + dev: true - /jest-watch-typeahead@1.1.0(jest@27.5.1): - resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-plugin-import@2.29.1(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} peerDependencies: - jest: ^27.0.0 || ^28.0.0 - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest: 27.5.1 - jest-regex-util: 28.0.2 - jest-watcher: 28.1.3 - slash: 4.0.0 - string-length: 5.0.1 - strip-ansi: 7.1.0 - dev: false - - /jest-watcher@27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest-util: 27.5.1 - string-length: 4.0.2 - dev: false - - /jest-watcher@28.1.3: - resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/test-result': 28.1.3 - '@jest/types': 28.1.3 - '@types/node': 20.10.5 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.10.2 - jest-util: 28.1.3 - string-length: 4.0.2 - dev: false - - /jest-worker@26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 20.10.5 - merge-stream: 2.0.0 - supports-color: 7.2.0 - dev: false - - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 20.10.5 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: false - - /jest-worker@28.1.3: - resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true dependencies: - '@types/node': 20.10.5 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: false + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true - /jest@27.5.1: - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' peerDependenciesMeta: - node-notifier: + '@typescript-eslint/eslint-plugin': + optional: true + jest: optional: true dependencies: - '@jest/core': 27.5.1 - import-local: 3.1.0 - jest-cli: 27.5.1 + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 transitivePeerDependencies: - - bufferutil - - canvas - supports-color - - ts-node - - utf-8-validate - dev: false - - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: false - - /jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + - typescript dev: true - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: false + '@babel/runtime': 7.23.6 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.15 + eslint: 8.56.0 + hasown: 2.0.0 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + /eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} + dev: true + + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0): + resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + peerDependencies: + eslint: '>=7' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true dependencies: - argparse: 2.0.1 + eslint: 8.56.0 + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + dev: true - /jsdom@16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - abab: 2.0.6 - acorn: 8.11.2 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.4.3 - domexception: 2.0.1 - escodegen: 2.1.0 - form-data: 3.0.1 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.1.3 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.9 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: false - - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true + eslint: 8.56.0 + dev: true - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + /eslint-plugin-react@7.33.2(eslint@8.56.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} - hasBin: true - - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.56.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 dev: true - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false - - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: false - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 dependencies: - minimist: 1.2.8 - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + /eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + dev: true - /jsonpath@1.1.1: - resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} + /eslint-plugin-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} + peerDependencies: + eslint: '>6.6.0' dependencies: - esprima: 1.2.2 - static-eval: 2.0.2 - underscore: 1.12.1 - dev: false - - /jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - dev: false + dotenv: 16.0.3 + eslint: 8.56.0 + dev: true - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + /eslint-plugin-unicorn@48.0.1(eslint@8.56.0): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.1.7 + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.56.0 + esquery: 1.5.0 + indent-string: 4.0.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.27 + regjsparser: 0.10.0 + semver: 7.5.4 + strip-indent: 3.0.0 + dev: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: - json-buffer: 3.0.1 - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: false + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: false + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true - /klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} - dev: false + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true dependencies: - language-subtag-registry: 0.3.22 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true - /launch-editor@2.6.1: - resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - picocolors: 1.0.0 - shell-quote: 1.8.1 - dev: false - - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: false + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + dev: true - /levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: false + estraverse: 5.3.0 + dev: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: false + estraverse: 5.3.0 + dev: true - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - dev: false + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: false + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} + /event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - dev: false + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + dev: true - /loader-utils@3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} - engines: {node: '>= 12.13.0'} - dev: false + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: true - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: false + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: - p-locate: 4.1.0 + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + 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 + dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} dependencies: - p-locate: 5.0.0 + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: false + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: false + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: false + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: false + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - js-tokens: 4.0.0 + flat-cache: 3.2.0 + dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: - tslib: 2.6.2 - dev: false + to-regex-range: 5.0.1 + dev: true - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: - yallist: 3.1.1 + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: - yallist: 4.0.0 - - /lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - dev: false + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - sourcemap-codec: 1.4.8 - dev: false + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.1 - dev: false + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: - semver: 7.5.4 - dev: false + is-callable: 1.2.7 + dev: true - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} dependencies: - tmpl: 1.0.5 - dev: false + fetch-blob: 3.2.0 + dev: true - /map-stream@0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true - /mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - dev: false + /from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + dev: true - /mdn-data@2.0.4: - resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} - dev: false + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: false + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true - /memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} dependencies: - fs-monkey: 1.0.5 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: true - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: false + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + /fx@31.0.0: + resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==} + hasBin: true + dev: true - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: false + /get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + dev: true - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: - braces: 3.0.2 - picomatch: 2.3.1 + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} dependencies: - mime-db: 1.52.0 - dev: false - - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: false + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} dev: true - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true - /mini-css-extract-plugin@2.7.6(webpack@5.89.0): - resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: - schema-utils: 4.2.0 - webpack: 5.89.0 - dev: false + is-glob: 4.0.3 + dev: true - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: - brace-expansion: 1.1.11 + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: - brace-expansion: 2.0.1 - dev: false - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: - minimist: 1.2.8 - dev: false - - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: false + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.3 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true - /multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} dependencies: - dns-packet: 5.6.1 - thunky: 1.1.0 - dev: false + define-properties: 1.2.1 + dev: true - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: false + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 4.0.0 + dev: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: false + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: true - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: false + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: false + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.6.2 - dev: false + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} dev: true - /node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 + get-intrinsic: 1.2.2 dev: true - /node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: false + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: false + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 + function-bind: 1.1.2 dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: false + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: false + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: false + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: 4.0.0 + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} dev: true - /nth-check@1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: - boolbase: 1.0.0 - dev: false + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: - boolbase: 1.0.0 - dev: false - - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} - dev: false - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + once: 1.4.0 + wrappy: 1.0.2 + dev: true - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: false + /inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.5 - define-properties: 1.2.1 - dev: false + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 + has-tostringtag: 1.0.0 + dev: true - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 + has-bigints: 1.0.2 + dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 + binary-extensions: 2.2.0 + dev: true - /object.getownpropertydescriptors@2.1.7: - resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} - engines: {node: '>= 0.8'} + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: - array.prototype.reduce: 1.0.6 call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - safe-array-concat: 1.0.1 - dev: false + has-tostringtag: 1.0.0 + dev: true - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + builtin-modules: 3.3.0 + dev: true - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.3 + hasown: 2.0.0 + dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 + has-tostringtag: 1.0.0 + dev: true - /obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: false + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: false + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: false + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: - wrappy: 1.0.2 + call-bind: 1.0.5 + dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + /is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + + /is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} dependencies: - mimic-fn: 2.1.0 + get-east-asian-width: 1.2.0 + dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} dependencies: - mimic-fn: 4.0.0 + has-tostringtag: 1.0.0 dev: true - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: false + is-extglob: 2.1.1 + dev: true - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} + hasBin: true dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 + is-docker: 3.0.0 dev: true - /optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.5 - dev: false + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} dependencies: - p-try: 2.2.0 + has-tostringtag: 1.0.0 + dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: - yocto-queue: 0.1.0 + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - p-limit: 2.3.0 - dev: false + call-bind: 1.0.5 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: - p-limit: 2.3.0 + has-tostringtag: 1.0.0 + dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: - p-limit: 3.1.0 + has-symbols: 1.0.3 + dev: true - /p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - dev: false + which-typed-array: 1.1.13 + dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: false + call-bind: 1.0.5 + dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: - callsites: 3.1.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 + is-docker: 2.2.1 + dev: true - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: false + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: false + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: false - - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: false + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 dev: true - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: false + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true - /path@0.12.7: - resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} - dependencies: - process: 0.11.10 - util: 0.10.4 + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true dev: true - /pause-stream@0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - dependencies: - through: 2.3.8 + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true - /performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - dev: false + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true - /picocolors@0.2.1: - resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} - dev: false + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: false + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: false + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} dependencies: - find-up: 4.1.0 - dev: false + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.1.7 + dev: true - /pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: - find-up: 3.0.0 - dev: false + json-buffer: 3.0.1 + dev: true - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: true - /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.32): - resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + language-subtag-registry: 0.3.22 + dev: true - /postcss-browser-comments@4.0.0(browserslist@4.22.2)(postcss@8.4.32): - resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} - engines: {node: '>=8'} - peerDependencies: - browserslist: '>=4' - postcss: '>=8' + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - dev: false + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true - /postcss-calc@8.2.4(postcss@8.4.32): - resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} - peerDependencies: - postcss: ^8.2.2 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 - dev: false + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true - /postcss-clamp@4.1.0(postcss@8.4.32): - resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} - engines: {node: '>=7.6.0'} - peerDependencies: - postcss: ^8.4.6 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + dev: true - /postcss-color-functional-notation@4.2.4(postcss@8.4.32): - resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true - /postcss-color-hex-alpha@8.0.4(postcss@8.4.32): - resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 + /lint-staged@15.2.0: + resolution: {integrity: sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==} + engines: {node: '>=18.12.0'} + hasBin: true dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + chalk: 5.3.0 + commander: 11.1.0 + debug: 4.3.4 + execa: 8.0.1 + lilconfig: 3.0.0 + listr2: 8.0.0 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.4 + transitivePeerDependencies: + - supports-color + dev: true - /postcss-color-rebeccapurple@7.1.1(postcss@8.4.32): - resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /listr2@8.0.0: + resolution: {integrity: sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==} + engines: {node: '>=18.0.0'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.0.0 + rfdc: 1.3.0 + wrap-ansi: 9.0.0 + dev: true - /postcss-colormin@5.3.1(postcss@8.4.32): - resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: - browserslist: 4.22.2 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + p-locate: 4.1.0 + dev: true - /postcss-convert-values@5.1.3(postcss@8.4.32): - resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + p-locate: 5.0.0 + dev: true - /postcss-custom-media@8.0.2(postcss@8.4.32): - resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true - /postcss-custom-properties@12.1.11(postcss@8.4.32): - resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true - /postcss-custom-selectors@6.0.3(postcss@8.4.32): - resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 + /log-update@6.0.0: + resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + engines: {node: '>=18'} dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + ansi-escapes: 6.2.0 + cli-cursor: 4.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + dev: true - /postcss-dir-pseudo-class@6.0.5(postcss@8.4.32): - resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + js-tokens: 4.0.0 - /postcss-discard-comments@5.1.2(postcss@8.4.32): - resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: - postcss: 8.4.32 - dev: false + yallist: 3.1.1 + dev: true - /postcss-discard-duplicates@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: - postcss: 8.4.32 - dev: false + yallist: 4.0.0 + dev: true - /postcss-discard-empty@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - dev: false + /map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + dev: true - /postcss-discard-overridden@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - dev: false + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true - /postcss-double-position-gradients@3.1.2(postcss@8.4.32): - resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true - /postcss-env-function@4.0.6(postcss@8.4.32): - resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + braces: 3.0.2 + picomatch: 2.3.1 + dev: true - /postcss-flexbugs-fixes@5.0.2(postcss@8.4.32): - resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} - peerDependencies: - postcss: ^8.1.4 - dependencies: - postcss: 8.4.32 - dev: false + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true - /postcss-focus-visible@6.0.4(postcss@8.4.32): - resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true - /postcss-focus-within@5.0.4(postcss@8.4.32): - resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true - /postcss-font-variant@5.0.0(postcss@8.4.32): - resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} - peerDependencies: - postcss: ^8.1.0 + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: - postcss: 8.4.32 - dev: false + brace-expansion: 1.1.11 + dev: true - /postcss-gap-properties@3.0.5(postcss@8.4.32): - resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - dev: false + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true - /postcss-image-set-function@4.0.7(postcss@8.4.32): - resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true - /postcss-import@15.1.0(postcss@8.4.32): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - dev: false + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true - /postcss-initial@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} - peerDependencies: - postcss: ^8.0.0 + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: - postcss: 8.4.32 - dev: false + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true - /postcss-js@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.32 - dev: false + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true - /postcss-lab-function@4.2.1(postcss@8.4.32): - resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true - /postcss-load-config@4.0.2(postcss@8.4.32): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} + /next@14.0.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} + engines: {node: '>=18.17.0'} + hasBin: true peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 peerDependenciesMeta: - postcss: + '@opentelemetry/api': optional: true - ts-node: + sass: optional: true dependencies: - lilconfig: 3.0.0 - postcss: 8.4.32 - yaml: 2.3.4 + '@next/env': 14.0.4 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001570 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + watchpack: 2.4.0 + optionalDependencies: + '@next/swc-darwin-arm64': 14.0.4 + '@next/swc-darwin-x64': 14.0.4 + '@next/swc-linux-arm64-gnu': 14.0.4 + '@next/swc-linux-arm64-musl': 14.0.4 + '@next/swc-linux-x64-gnu': 14.0.4 + '@next/swc-linux-x64-musl': 14.0.4 + '@next/swc-win32-arm64-msvc': 14.0.4 + '@next/swc-win32-ia32-msvc': 14.0.4 + '@next/swc-win32-x64-msvc': 14.0.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros dev: false - /postcss-loader@6.2.1(postcss@8.4.32)(webpack@5.89.0): - resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: true + + /node-fetch@3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: - cosmiconfig: 7.1.0 - klona: 2.0.6 - postcss: 8.4.32 - semver: 7.5.4 - webpack: 5.89.0 - dev: false + path-key: 3.1.1 + dev: true - /postcss-logical@5.0.4(postcss@8.4.32): - resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - postcss: 8.4.32 - dev: false + path-key: 4.0.0 + dev: true - /postcss-media-minmax@5.0.0(postcss@8.4.32): - resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - dev: false + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true - /postcss-merge-longhand@5.1.7(postcss@8.4.32): - resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.4.32) - dev: false + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true - /postcss-merge-rules@5.1.4(postcss@8.4.32): - resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true - /postcss-minify-font-values@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true - /postcss-minify-gradients@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} dependencies: - colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true - /postcss-minify-params@5.1.4(postcss@8.4.32): - resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} dependencies: - browserslist: 4.22.2 - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true - /postcss-minify-selectors@5.2.1(postcss@8.4.32): - resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.32): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: - postcss: 8.4.32 - dev: false + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true - /postcss-modules-local-by-default@4.0.3(postcss@8.4.32): - resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true - /postcss-modules-scope@3.0.0(postcss@8.4.32): - resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + wrappy: 1.0.2 + dev: true - /postcss-modules-values@4.0.0(postcss@8.4.32): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - dev: false + mimic-fn: 2.1.0 + dev: true - /postcss-nested@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + mimic-fn: 4.0.0 + dev: true - /postcss-nesting@10.2.0(postcss@8.4.32): - resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true - /postcss-normalize-charset@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} dependencies: - postcss: 8.4.32 - dev: false + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true - /postcss-normalize-display-values@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + p-try: 2.2.0 + dev: true - /postcss-normalize-positions@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + yocto-queue: 0.1.0 + dev: true - /postcss-normalize-repeat-style@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + p-limit: 2.3.0 + dev: true - /postcss-normalize-string@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + p-limit: 3.1.0 + dev: true - /postcss-normalize-timing-functions@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + callsites: 3.1.0 + dev: true - /postcss-normalize-unicode@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true - /postcss-normalize-url@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - normalize-url: 6.1.0 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true - /postcss-normalize-whitespace@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true - /postcss-normalize@10.0.1(browserslist@4.22.2)(postcss@8.4.32): - resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} - engines: {node: '>= 12'} - peerDependencies: - browserslist: '>= 4' - postcss: '>= 8' + /path@0.12.7: + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} dependencies: - '@csstools/normalize.css': 12.0.0 - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-browser-comments: 4.0.0(browserslist@4.22.2)(postcss@8.4.32) - sanitize.css: 13.0.0 - dev: false + process: 0.11.10 + util: 0.10.4 + dev: true - /postcss-opacity-percentage@1.1.3(postcss@8.4.32): - resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} dependencies: - postcss: 8.4.32 - dev: false + through: 2.3.8 + dev: true - /postcss-ordered-values@5.1.3(postcss@8.4.32): - resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - /postcss-overflow-shorthand@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true - /postcss-page-break@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} - peerDependencies: - postcss: ^8 - dependencies: - postcss: 8.4.32 - dev: false + /pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + dev: true - /postcss-place@7.0.5(postcss@8.4.32): - resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true - /postcss-preset-env@7.8.3(postcss@8.4.32): - resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.32) - '@csstools/postcss-color-function': 1.1.1(postcss@8.4.32) - '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.32) - '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.32) - '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.32) - '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.32) - '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.32) - '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.32) - '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.32) - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.32) - '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.32) - '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.32) - '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.32) - autoprefixer: 10.4.16(postcss@8.4.32) - browserslist: 4.22.2 - css-blank-pseudo: 3.0.3(postcss@8.4.32) - css-has-pseudo: 3.0.4(postcss@8.4.32) - css-prefers-color-scheme: 6.0.3(postcss@8.4.32) - cssdb: 7.9.1 - postcss: 8.4.32 - postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.32) - postcss-clamp: 4.1.0(postcss@8.4.32) - postcss-color-functional-notation: 4.2.4(postcss@8.4.32) - postcss-color-hex-alpha: 8.0.4(postcss@8.4.32) - postcss-color-rebeccapurple: 7.1.1(postcss@8.4.32) - postcss-custom-media: 8.0.2(postcss@8.4.32) - postcss-custom-properties: 12.1.11(postcss@8.4.32) - postcss-custom-selectors: 6.0.3(postcss@8.4.32) - postcss-dir-pseudo-class: 6.0.5(postcss@8.4.32) - postcss-double-position-gradients: 3.1.2(postcss@8.4.32) - postcss-env-function: 4.0.6(postcss@8.4.32) - postcss-focus-visible: 6.0.4(postcss@8.4.32) - postcss-focus-within: 5.0.4(postcss@8.4.32) - postcss-font-variant: 5.0.0(postcss@8.4.32) - postcss-gap-properties: 3.0.5(postcss@8.4.32) - postcss-image-set-function: 4.0.7(postcss@8.4.32) - postcss-initial: 4.0.1(postcss@8.4.32) - postcss-lab-function: 4.2.1(postcss@8.4.32) - postcss-logical: 5.0.4(postcss@8.4.32) - postcss-media-minmax: 5.0.0(postcss@8.4.32) - postcss-nesting: 10.2.0(postcss@8.4.32) - postcss-opacity-percentage: 1.1.3(postcss@8.4.32) - postcss-overflow-shorthand: 3.0.4(postcss@8.4.32) - postcss-page-break: 3.0.4(postcss@8.4.32) - postcss-place: 7.0.5(postcss@8.4.32) - postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.32) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.32) - postcss-selector-not: 6.0.1(postcss@8.4.32) - postcss-value-parser: 4.2.0 - dev: false + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true - /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.32): - resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true - /postcss-reduce-initial@5.1.2(postcss@8.4.32): - resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} - engines: {node: ^10 || ^12 || >=14.0} + /postcss-import@15.1.0(postcss@8.4.32): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} peerDependencies: - postcss: ^8.2.15 + postcss: ^8.0.0 dependencies: - browserslist: 4.22.2 - caniuse-api: 3.0.0 postcss: 8.4.32 - dev: false + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: true - /postcss-reduce-transforms@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} - engines: {node: ^10 || ^12 || >=14.0} + /postcss-js@4.0.1(postcss@8.4.32): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} peerDependencies: - postcss: ^8.2.15 + postcss: ^8.4.21 dependencies: + camelcase-css: 2.0.1 postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false + dev: true - /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.32): - resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + /postcss-load-config@4.0.2(postcss@8.4.32): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} peerDependencies: - postcss: ^8.0.3 + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true dependencies: + lilconfig: 3.0.0 postcss: 8.4.32 - dev: false + yaml: 2.3.4 + dev: true - /postcss-selector-not@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} - engines: {node: ^12 || ^14 || >=16} + /postcss-nested@6.0.1(postcss@8.4.32): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} peerDependencies: - postcss: ^8.2 + postcss: ^8.2.14 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.0.13 - dev: false + dev: true /postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} @@ -8957,39 +3620,19 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: false - - /postcss-svgo@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - svgo: 2.8.0 - dev: false - - /postcss-unique-selectors@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false + dev: true /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: false + dev: true - /postcss@7.0.39: - resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} - engines: {node: '>=6.0.0'} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} dependencies: - picocolors: 0.2.1 - source-map: 0.6.1 + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 dev: false /postcss@8.4.32: @@ -8999,18 +3642,14 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: false - - /prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - dev: false + dev: true /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + dev: true - /prettier-plugin-packagejson@2.4.7: + /prettier-plugin-packagejson@2.4.7(prettier@3.1.1): resolution: {integrity: sha512-/n1HGcBbuJyTlD3tb2/tW1mT5WIR6FCo+bAijHF6pNoSBf8YoxoskawjSY2ku9/8d6mdzci7oMchziI7CYEWYg==} peerDependencies: prettier: '>= 1.16.0' @@ -9018,78 +3657,29 @@ packages: prettier: optional: true dependencies: + prettier: 3.1.1 sort-package-json: 2.6.0 synckit: 0.8.6 dev: true - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: false - - /pretty-error@4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} - dependencies: - lodash: 4.17.21 - renderkid: 3.0.0 - dev: false - - /pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - dev: false - - /pretty-format@28.1.3: - resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: false - - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + engines: {node: '>=14'} + hasBin: true + dev: true /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} dev: true - /promise@8.3.0: - resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} - dependencies: - asap: 2.0.6 - dev: false - - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: false - /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - dev: false + dev: true /ps-tree@1.2.0: resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} @@ -9099,241 +3689,29 @@ packages: event-stream: 3.3.4 dev: true - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: false - /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - - /q@1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - dev: false - - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: false - - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: false + dev: true /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - /raf@3.4.1: - resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} - dependencies: - performance-now: 2.1.0 - dev: false - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: false - - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: false - - /react-app-polyfill@3.0.0: - resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} - engines: {node: '>=14'} - dependencies: - core-js: 3.34.0 - object-assign: 4.1.1 - promise: 8.3.0 - raf: 3.4.1 - regenerator-runtime: 0.13.11 - whatwg-fetch: 3.6.20 - dev: false - - /react-dev-utils@12.0.1(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0): - resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/code-frame': 7.23.5 - address: 1.2.2 - browserslist: 4.22.2 - chalk: 4.1.2 - cross-spawn: 7.0.3 - detect-port-alt: 1.1.6 - escape-string-regexp: 4.0.0 - filesize: 8.0.7 - find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0) - global-modules: 2.0.0 - globby: 11.1.0 - gzip-size: 6.0.0 - immer: 9.0.21 - is-root: 2.1.0 - loader-utils: 3.2.1 - open: 8.4.2 - pkg-up: 3.1.0 - prompts: 2.4.2 - react-error-overlay: 6.0.11 - recursive-readdir: 2.2.3 - shell-quote: 1.8.1 - strip-ansi: 6.0.1 - text-table: 0.2.0 - typescript: 4.9.5 - webpack: 5.89.0 - transitivePeerDependencies: - - eslint - - supports-color - - vue-template-compiler - dev: false + dev: true /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - - /react-error-overlay@6.0.11: - resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} - dev: false - - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: false - - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: false - - /react-refresh@0.11.0: - resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} - engines: {node: '>=0.10.0'} - dev: false - - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(react@18.2.0)(typescript@4.9.5): - resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} - engines: {node: '>=14.0.0'} - hasBin: true - peerDependencies: - eslint: '*' - react: '>= 16' - typescript: ^3.2.1 || ^4 - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0) - '@svgr/webpack': 5.5.0 - babel-jest: 27.5.1(@babel/core@7.23.6) - babel-loader: 8.3.0(@babel/core@7.23.6)(webpack@5.89.0) - babel-plugin-named-asset-import: 0.3.8(@babel/core@7.23.6) - babel-preset-react-app: 10.0.1 - bfj: 7.1.0 - browserslist: 4.22.2 - camelcase: 6.3.0 - case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.8.1(webpack@5.89.0) - css-minimizer-webpack-plugin: 3.4.1(webpack@5.89.0) - dotenv: 10.0.0 - dotenv-expand: 5.1.0 - eslint: 8.56.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5) - eslint-webpack-plugin: 3.2.0(eslint@8.56.0)(webpack@5.89.0) - file-loader: 6.2.0(webpack@5.89.0) - fs-extra: 10.1.0 - html-webpack-plugin: 5.5.4(webpack@5.89.0) - identity-obj-proxy: 3.0.0 - jest: 27.5.1 - jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1) - mini-css-extract-plugin: 2.7.6(webpack@5.89.0) - postcss: 8.4.32 - postcss-flexbugs-fixes: 5.0.2(postcss@8.4.32) - postcss-loader: 6.2.1(postcss@8.4.32)(webpack@5.89.0) - postcss-normalize: 10.0.1(browserslist@4.22.2)(postcss@8.4.32) - postcss-preset-env: 7.8.3(postcss@8.4.32) - prompts: 2.4.2 + loose-envify: 1.4.0 react: 18.2.0 - react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0) - react-refresh: 0.11.0 - resolve: 1.22.8 - resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(webpack@5.89.0) - semver: 7.5.4 - source-map-loader: 3.0.2(webpack@5.89.0) - style-loader: 3.3.3(webpack@5.89.0) - tailwindcss: 3.3.6 - terser-webpack-plugin: 5.3.9(webpack@5.89.0) - typescript: 4.9.5 - webpack: 5.89.0 - webpack-dev-server: 4.15.1(webpack@5.89.0) - webpack-manifest-plugin: 4.1.1(webpack@5.89.0) - workbox-webpack-plugin: 6.6.0(webpack@5.89.0) - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - '@parcel/css' - - '@swc/core' - - '@types/babel__core' - - '@types/webpack' - - bufferutil - - canvas - - clean-css - - csso - - debug - - esbuild - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - fibers - - node-notifier - - node-sass - - rework - - rework-visit - - sass - - sass-embedded - - sockjs-client - - supports-color - - ts-node - - type-fest - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - webpack-hot-middleware - - webpack-plugin-serve + scheduler: 0.23.0 dev: false + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -9345,7 +3723,7 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 - dev: false + dev: true /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} @@ -9366,48 +3744,12 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.3 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: false - - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.3 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: false - /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: false - - /recursive-readdir@2.2.3: - resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} - engines: {node: '>=6.0.0'} - dependencies: - minimatch: 3.1.2 - dev: false - - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: false + dev: true /reflect-metadata@0.2.1: resolution: {integrity: sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==} @@ -9423,34 +3765,11 @@ packages: get-intrinsic: 1.2.2 globalthis: 1.0.3 which-builtin-type: 1.1.3 - - /regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: false - - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: false - - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: false + dev: true /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - dependencies: - '@babel/runtime': 7.23.6 - dev: false - - /regex-parser@2.2.11: - resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} - dev: false + dev: true /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} @@ -9464,18 +3783,7 @@ packages: call-bind: 1.0.5 define-properties: 1.2.1 set-function-name: 2.0.1 - - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - dev: false + dev: true /regjsparser@0.10.0: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} @@ -9484,86 +3792,15 @@ packages: jsesc: 0.5.0 dev: true - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: false - - /relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - dev: false - - /renderkid@3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - dependencies: - css-select: 4.3.0 - dom-converter: 0.2.0 - htmlparser2: 6.1.0 - lodash: 4.17.21 - strip-ansi: 6.0.1 - dev: false - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: false - - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: false - - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: false - - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: false - /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: false + dev: true /resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true - /resolve-url-loader@4.0.0: - resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} - engines: {node: '>=8.9'} - peerDependencies: - rework: 1.0.1 - rework-visit: 1.0.0 - peerDependenciesMeta: - rework: - optional: true - rework-visit: - optional: true - dependencies: - adjust-sourcemap-loader: 4.0.0 - convert-source-map: 1.9.0 - loader-utils: 2.0.4 - postcss: 7.0.39 - source-map: 0.6.1 - dev: false - - /resolve.exports@1.1.1: - resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} - engines: {node: '>=10'} - dev: false - /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: @@ -9578,6 +3815,7 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} @@ -9586,42 +3824,31 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: false + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 - - /rollup-plugin-terser@7.0.2(rollup@2.79.1): - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser - peerDependencies: - rollup: ^2.0.0 - dependencies: - '@babel/code-frame': 7.23.5 - jest-worker: 26.6.2 - rollup: 2.79.1 - serialize-javascript: 4.0.0 - terser: 5.26.0 - dev: false - - /rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: false + dev: true /run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} @@ -9634,6 +3861,7 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + dev: true /safe-array-concat@1.0.1: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} @@ -9643,14 +3871,7 @@ packages: get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false + dev: true /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} @@ -9658,49 +3879,7 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-regex: 1.1.4 - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - - /sanitize.css@13.0.0: - resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} - dev: false - - /sass-loader@12.6.0(webpack@5.89.0): - resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - dependencies: - klona: 2.0.6 - neo-async: 2.6.2 - webpack: 5.89.0 - dev: false - - /sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - dev: false - - /saxes@5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: false + dev: true /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} @@ -9708,55 +3887,6 @@ packages: loose-envify: 1.4.0 dev: false - /schema-utils@2.7.0: - resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: false - - /schema-utils@2.7.1: - resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: false - - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: false - - /schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) - dev: false - - /select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: false - - /selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - dependencies: - '@types/node-forge': 1.3.10 - node-forge: 1.3.1 - dev: false - /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -9765,6 +3895,7 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + dev: true /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} @@ -9772,66 +3903,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /serialize-javascript@4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} - dependencies: - randombytes: 2.1.0 - dev: false - - /serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} - dependencies: - randombytes: 2.1.0 - dev: false - - /serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - dev: false - - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: false + dev: true /set-function-length@1.1.1: resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} @@ -9841,6 +3913,7 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 + dev: true /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} @@ -9849,28 +3922,19 @@ packages: define-data-property: 1.1.1 functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 - - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: false - - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: false + dev: true /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 + dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: false + dev: true /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -9878,29 +3942,42 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 object-inspect: 1.13.1 + dev: true /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: false + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + dev: true /slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} + dev: true - /sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + /slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - dev: false + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + dev: true + + /slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + dev: true /sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} @@ -9919,55 +3996,9 @@ packages: sort-object-keys: 1.1.3 dev: true - /source-list-map@2.0.1: - resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} - dev: false - /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: false - - /source-map-loader@3.0.2(webpack@5.89.0): - resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - abab: 2.0.6 - iconv-lite: 0.6.3 - source-map-js: 1.0.2 - webpack: 5.89.0 - dev: false - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: false - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: false - - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: false - - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - dependencies: - whatwg-url: 7.1.0 - dev: false - - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: false + engines: {node: '>=0.10.0'} /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -9991,115 +4022,36 @@ packages: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true - /spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - dependencies: - debug: 4.3.4 - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.2 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - dev: false - - /spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - dependencies: - debug: 4.3.4 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: false - /split@0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} dependencies: through: 2.3.8 dev: true - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: false - - /stable@0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - dev: false - - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 - dev: false - - /stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: false - - /static-eval@2.0.2: - resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} - dependencies: - escodegen: 1.14.3 - dev: false - - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: false - - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: false - - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} - dependencies: - internal-slot: 1.0.6 - dev: false - /stream-combiner@0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} dependencies: duplexer: 0.1.2 dev: true - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - dev: false - - /string-length@5.0.1: - resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} - engines: {node: '>=12.20'} - dependencies: - char-regex: 2.0.1 - strip-ansi: 7.1.0 + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} dev: false - /string-natural-compare@3.0.1: - resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - dev: false + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + /string-width@7.0.0: + resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} + engines: {node: '>=18'} dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: false + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + dev: true /string.prototype.matchall@4.0.10: resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} @@ -10113,6 +4065,7 @@ packages: regexp.prototype.flags: 1.5.1 set-function-name: 2.0.1 side-channel: 1.0.4 + dev: true /string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} @@ -10121,6 +4074,7 @@ packages: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 + dev: true /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} @@ -10128,6 +4082,7 @@ packages: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 + dev: true /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} @@ -10135,58 +4090,31 @@ packages: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: false - - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - dev: false + dev: true /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 + dev: true /strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 - dev: false + dev: true /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: false - - /strip-comments@2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} - engines: {node: '>=10'} - dev: false + dev: true /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + dev: true /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} @@ -10198,29 +4126,28 @@ packages: engines: {node: '>=8'} dependencies: min-indent: 1.0.1 + dev: true /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + dev: true - /style-loader@3.3.3(webpack@5.89.0): - resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - webpack: 5.89.0 - dev: false - - /stylehacks@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} - engines: {node: ^10 || ^12 || >=14.0} + /styled-jsx@5.1.1(react@18.2.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} peerDependencies: - postcss: ^8.2.15 + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + client-only: 0.0.1 + react: 18.2.0 dev: false /sucrase@3.34.0: @@ -10235,81 +4162,26 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: false + dev: true /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: false - - /supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: false + dev: true /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - - /svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - dev: false - - /svgo@1.3.2: - resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} - engines: {node: '>=4.0.0'} - deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. - hasBin: true - dependencies: - chalk: 2.4.2 - coa: 2.0.2 - css-select: 2.1.0 - css-select-base-adapter: 0.1.1 - css-tree: 1.0.0-alpha.37 - csso: 4.2.0 - js-yaml: 3.14.1 - mkdirp: 0.5.6 - object.values: 1.1.7 - sax: 1.2.4 - stable: 0.1.8 - unquote: 1.1.1 - util.promisify: 1.0.1 - dev: false - - /svgo@2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} - engines: {node: '>=10.13.0'} - hasBin: true - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 4.3.0 - css-tree: 1.1.3 - csso: 4.2.0 - picocolors: 1.0.0 - stable: 0.1.8 - dev: false - - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: false + dev: true /synckit@0.8.6: resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} @@ -10348,162 +4220,50 @@ packages: sucrase: 3.34.0 transitivePeerDependencies: - ts-node - dev: false - - /tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - dev: false + dev: true /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - - /temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: false - - /tempy@0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} - engines: {node: '>=10'} - dependencies: - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - dev: false - - /terminal-link@2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.3.0 - dev: false - - /terser-webpack-plugin@5.3.9(webpack@5.89.0): - resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.20 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.26.0 - webpack: 5.89.0 - dev: false - - /terser@5.26.0: - resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.11.2 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: false - - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: false + dev: true /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true /thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: false + dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: false - - /throat@6.0.2: - resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} - dev: false + dev: true /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: false - /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} dev: true - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: false - /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} + dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: false - - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} - engines: {node: '>=6'} - dependencies: - psl: 1.9.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: false - - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - dependencies: - punycode: 2.3.1 - dev: false - - /tr46@2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} - dependencies: - punycode: 2.3.1 - dev: false - - /tryer@1.0.1: - resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} - dev: false + dev: true /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} @@ -10516,7 +4276,7 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: false + dev: true /tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -10525,6 +4285,7 @@ packages: json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 + dev: true /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -10532,16 +4293,6 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@4.9.5): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 4.9.5 - dev: false - /tsutils@3.21.0(typescript@5.3.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -10619,37 +4370,17 @@ packages: turbo-windows-arm64: 1.11.2 dev: true - /type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - dev: false - /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 - - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: false - - /type-fest@0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - dev: false + dev: true /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: false + dev: true /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} @@ -10661,13 +4392,10 @@ packages: engines: {node: '>=8'} dev: true - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - dev: false + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: true /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} @@ -10676,6 +4404,7 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 + dev: true /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} @@ -10685,6 +4414,7 @@ packages: for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 + dev: true /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} @@ -10695,6 +4425,7 @@ packages: for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 + dev: true /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} @@ -10702,18 +4433,7 @@ packages: call-bind: 1.0.5 for-each: 0.3.3 is-typed-array: 1.1.12 - - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: false - - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: false + dev: true /typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} @@ -10728,72 +4448,22 @@ packages: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + dev: true - /underscore@1.12.1: - resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} - dev: false - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: false - - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - dev: false - - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: false - - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: false - - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: false - - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: false + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: false - - /unquote@1.1.1: - resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} - dev: false + dev: true /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} dev: true - /upath@1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - dev: false - /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -10803,31 +4473,17 @@ packages: browserslist: 4.22.2 escalade: 3.1.1 picocolors: 1.0.0 + dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 - - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - dev: false + dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false - - /util.promisify@1.0.1: - resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.3 - has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.7 - dev: false + dev: true /util@0.10.4: resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} @@ -10835,29 +4491,6 @@ packages: inherits: 2.0.3 dev: true - /utila@0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - dev: false - - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: false - - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false - - /v8-to-istanbul@8.1.1: - resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} - engines: {node: '>=10.12.0'} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 1.9.0 - source-map: 0.7.4 - dev: false - /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -10865,31 +4498,6 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: false - - /w3c-hr-time@1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: false - - /w3c-xmlserializer@2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: false - - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - dependencies: - makeerror: 1.0.12 - dev: false - /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} @@ -10898,221 +4506,16 @@ packages: graceful-fs: 4.2.11 dev: false - /wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - dependencies: - minimalistic-assert: 1.0.1 - dev: false - /web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} dev: true - /web-vitals@2.1.4: - resolution: {integrity: sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==} - dev: false - - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: false - - /webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: false - - /webidl-conversions@6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: false - - /webpack-dev-middleware@5.3.3(webpack@5.89.0): - resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.89.0 - dev: false - - /webpack-dev-server@4.15.1(webpack@5.89.0): - resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.5 - '@types/sockjs': 0.3.36 - '@types/ws': 8.5.10 - ansi-html-community: 0.0.8 - bonjour-service: 1.1.1 - chokidar: 3.5.3 - colorette: 2.0.20 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.18.2 - graceful-fs: 4.2.11 - html-entities: 2.4.0 - http-proxy-middleware: 2.0.6(@types/express@4.17.21) - ipaddr.js: 2.1.0 - launch-editor: 2.6.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.2.0 - selfsigned: 2.4.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.89.0 - webpack-dev-middleware: 5.3.3(webpack@5.89.0) - ws: 8.15.1 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: false - - /webpack-manifest-plugin@4.1.1(webpack@5.89.0): - resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} - engines: {node: '>=12.22.0'} - peerDependencies: - webpack: ^4.44.2 || ^5.47.0 - dependencies: - tapable: 2.2.1 - webpack: 5.89.0 - webpack-sources: 2.3.1 - dev: false - - /webpack-sources@1.4.3: - resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: false - - /webpack-sources@2.3.1: - resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} - engines: {node: '>=10.13.0'} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: false - - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: false - - /webpack@5.89.0: - resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.11.2 - acorn-import-assertions: 1.9.0(acorn@8.11.2) - browserslist: 4.22.2 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.4.1 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(webpack@5.89.0) - watchpack: 2.4.0 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: false - /webpod@0.0.2: resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} hasBin: true dev: true - /websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.8 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: false - - /websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: false - - /whatwg-encoding@1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - dependencies: - iconv-lite: 0.4.24 - dev: false - - /whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - dev: false - - /whatwg-mimetype@2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: false - - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - dev: false - - /whatwg-url@8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 - dev: false - /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -11121,6 +4524,7 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 + dev: true /which-builtin-type@1.1.3: resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} @@ -11138,6 +4542,7 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.1 which-typed-array: 1.1.13 + dev: true /which-collection@1.0.1: resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} @@ -11146,6 +4551,7 @@ packages: is-set: 2.0.2 is-weakmap: 2.0.1 is-weakset: 2.0.2 + dev: true /which-typed-array@1.1.13: resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} @@ -11156,13 +4562,7 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: false + dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -11170,6 +4570,7 @@ packages: hasBin: true dependencies: isexe: 2.0.0 + dev: true /which@3.0.1: resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} @@ -11179,271 +4580,36 @@ packages: isexe: 2.0.0 dev: true - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: false - - /workbox-background-sync@6.6.0: - resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} - dependencies: - idb: 7.1.1 - workbox-core: 6.6.0 - dev: false - - /workbox-broadcast-update@6.6.0: - resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-build@6.6.0: - resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} - engines: {node: '>=10.0.0'} - dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) - '@babel/core': 7.23.6 - '@babel/preset-env': 7.23.6(@babel/core@7.23.6) - '@babel/runtime': 7.23.6 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.6)(rollup@2.79.1) - '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) - '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.12.0 - common-tags: 1.8.2 - fast-json-stable-stringify: 2.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - lodash: 4.17.21 - pretty-bytes: 5.6.0 - rollup: 2.79.1 - rollup-plugin-terser: 7.0.2(rollup@2.79.1) - source-map: 0.8.0-beta.0 - stringify-object: 3.3.0 - strip-comments: 2.0.1 - tempy: 0.6.0 - upath: 1.2.0 - workbox-background-sync: 6.6.0 - workbox-broadcast-update: 6.6.0 - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-google-analytics: 6.6.0 - workbox-navigation-preload: 6.6.0 - workbox-precaching: 6.6.0 - workbox-range-requests: 6.6.0 - workbox-recipes: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - workbox-streams: 6.6.0 - workbox-sw: 6.6.0 - workbox-window: 6.6.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: false - - /workbox-cacheable-response@6.6.0: - resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} - deprecated: workbox-background-sync@6.6.0 - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-core@6.6.0: - resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} - dev: false - - /workbox-expiration@6.6.0: - resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} - dependencies: - idb: 7.1.1 - workbox-core: 6.6.0 - dev: false - - /workbox-google-analytics@6.6.0: - resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} - dependencies: - workbox-background-sync: 6.6.0 - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: false - - /workbox-navigation-preload@6.6.0: - resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-precaching@6.6.0: - resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: false - - /workbox-range-requests@6.6.0: - resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-recipes@6.6.0: - resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} - dependencies: - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-precaching: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: false - - /workbox-routing@6.6.0: - resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-strategies@6.6.0: - resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} - dependencies: - workbox-core: 6.6.0 - dev: false - - /workbox-streams@6.6.0: - resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - dev: false - - /workbox-sw@6.6.0: - resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} - dev: false - - /workbox-webpack-plugin@6.6.0(webpack@5.89.0): - resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==} - engines: {node: '>=10.0.0'} - peerDependencies: - webpack: ^4.4.0 || ^5.9.0 - dependencies: - fast-json-stable-stringify: 2.1.0 - pretty-bytes: 5.6.0 - upath: 1.2.0 - webpack: 5.89.0 - webpack-sources: 1.4.3 - workbox-build: 6.6.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: false - - /workbox-window@6.6.0: - resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} - dependencies: - '@types/trusted-types': 2.0.7 - workbox-core: 6.6.0 - dev: false - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + /wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: false + ansi-styles: 6.2.1 + string-width: 7.0.0 + strip-ansi: 7.1.0 + dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: false - - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /ws@8.15.1: - resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /xml-name-validator@3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: false - - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: false - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: false + dev: true /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: false + dev: true /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} - - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: false - - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - dev: false + dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + dev: true /zx@7.2.3: resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} From 34fa3b4815a9bab74da6994624566f07e47804c4 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Mon, 18 Dec 2023 15:27:37 +0100 Subject: [PATCH 007/253] chore: build & dev packages --- packages/core/.eslintrc.js | 4 +- packages/core/package.json | 7 ++- packages/core/src/api/index.ts | 6 +- packages/core/src/index.ts | 3 +- packages/core/src/transport/Transport.ts | 8 +-- packages/core/src/transport/ble/bleModule.ts | 3 - packages/core/src/transport/ble/index.ts | 1 + packages/core/src/transport/index.ts | 4 ++ packages/core/src/transport/model/index.ts | 1 + .../core/src/transport/transportsModule.ts | 0 packages/eslint-config-dsdk/index.js | 60 +++++++++++++++++++ packages/eslint-config-dsdk/library.js | 34 ----------- packages/eslint-config-dsdk/package.json | 15 +++-- packages/signer/.eslintrc.js | 4 +- packages/signer/package.json | 6 +- packages/signer/src/index.ts | 1 + packages/trusted-apps/.eslintrc.js | 4 +- packages/trusted-apps/package.json | 6 +- packages/trusted-apps/src/index.ts | 1 + packages/ui/.eslintrc.js | 4 +- packages/ui/package.json | 6 +- packages/ui/src/index.ts | 1 + 22 files changed, 116 insertions(+), 63 deletions(-) delete mode 100644 packages/core/src/transport/ble/bleModule.ts create mode 100644 packages/core/src/transport/ble/index.ts create mode 100644 packages/core/src/transport/index.ts create mode 100644 packages/core/src/transport/model/index.ts delete mode 100644 packages/core/src/transport/transportsModule.ts create mode 100644 packages/eslint-config-dsdk/index.js delete mode 100644 packages/eslint-config-dsdk/library.js create mode 100644 packages/signer/src/index.ts create mode 100644 packages/trusted-apps/src/index.ts create mode 100644 packages/ui/src/index.ts diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index eb4c5f43a..f506119e1 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -1,4 +1,4 @@ module.exports = { root: true, - extends: ["dsdk/next"], -}; \ No newline at end of file + extends: ["@ledgerhq/dsdk"], +}; diff --git a/packages/core/package.json b/packages/core/package.json index 14c24e06e..a59594fac 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -8,7 +8,10 @@ "/lib" ], "scripts": { - "build": "tsc --noEmit", + "build": "tsc", + "dev": "tsc --watch", + "lint": "eslint --cache --ext .ts \"src\"", + "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "feature": "zx scripts/add-feature.mjs", "test": "echo \"Error: no test specified\" && exit 1" }, @@ -20,7 +23,7 @@ "@types/eslint": "^8.44.9", "@types/node": "^20.10.5", "eslint": "^8.56.0", - "eslint-config-dsdk": "workspace:*", + "@ledgerhq/eslint-config-dsdk": "workspace:*", "typescript": "^5.3.3" } } diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index c2912d19e..76b5ef838 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -1,4 +1,4 @@ -'use strict' +"use strict"; -export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder" -export { DeviceSdk } from "./DeviceSdk" +export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; +export { DeviceSdk } from "./DeviceSdk"; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 3318fdbc9..69d99520a 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1 +1,2 @@ -export * from './api' +export * from "./api"; +export * from "./transport"; diff --git a/packages/core/src/transport/Transport.ts b/packages/core/src/transport/Transport.ts index 6930c4a71..9c1c26209 100644 --- a/packages/core/src/transport/Transport.ts +++ b/packages/core/src/transport/Transport.ts @@ -1,7 +1,5 @@ -import {Response} from "./model/Response" -import { bletransport } from "./ble/bleModule" - +import { Response } from "./model/Response"; export interface Transport { - send(apduHex: String): Response | undefined; -} \ No newline at end of file + send(apduHex: String): Response | undefined; +} diff --git a/packages/core/src/transport/ble/bleModule.ts b/packages/core/src/transport/ble/bleModule.ts deleted file mode 100644 index f0c05f360..000000000 --- a/packages/core/src/transport/ble/bleModule.ts +++ /dev/null @@ -1,3 +0,0 @@ -import BleTransport from "./BleTransport" - -export { BleTransport } \ No newline at end of file diff --git a/packages/core/src/transport/ble/index.ts b/packages/core/src/transport/ble/index.ts new file mode 100644 index 000000000..af4ed328d --- /dev/null +++ b/packages/core/src/transport/ble/index.ts @@ -0,0 +1 @@ +export { BleTransport } from "./BleTransport" \ No newline at end of file diff --git a/packages/core/src/transport/index.ts b/packages/core/src/transport/index.ts new file mode 100644 index 000000000..d69b321ca --- /dev/null +++ b/packages/core/src/transport/index.ts @@ -0,0 +1,4 @@ +export type { Transport } from "./Transport"; + +export * from "./ble"; +export * from "./model"; diff --git a/packages/core/src/transport/model/index.ts b/packages/core/src/transport/model/index.ts new file mode 100644 index 000000000..7065f1f04 --- /dev/null +++ b/packages/core/src/transport/model/index.ts @@ -0,0 +1 @@ +export { Response } from "./Response"; diff --git a/packages/core/src/transport/transportsModule.ts b/packages/core/src/transport/transportsModule.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/eslint-config-dsdk/index.js b/packages/eslint-config-dsdk/index.js new file mode 100644 index 000000000..39bb5cd7f --- /dev/null +++ b/packages/eslint-config-dsdk/index.js @@ -0,0 +1,60 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: ["eslint:recommended", "prettier", "turbo"], + plugins: ["only-warn"], + globals: { + React: true, + JSX: true, + }, + env: { + node: true, + }, + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + "node_modules/", + "dist/", + ], + overrides: [ + { + files: ["**/*.{ts,tsx}"], + parser: "@typescript-eslint/parser", + extends: [ + "plugin:@typescript-eslint/recommended-type-checked", + "plugin:@typescript-eslint/stylistic-type-checked", + "prettier", + ], + parserOptions: { + project: [resolve(process.cwd(), "tsconfig.json")], + // tsconfigRootDir: __dirname, + }, + rules: { + "import/prefer-default-export": "off", + "no-void": "off", + "@typescript-eslint/consistent-type-definitions": ["error", "type"], + "@typescript-eslint/ban-ts-comment": "warn", + "@typescript-eslint/no-unsafe-member-access": "warn", + "@typescript-eslint/no-shadow": "warn", + "@typescript-eslint/require-await": "warn", + "@typescript-eslint/no-unsafe-assignment": "warn", + "@typescript-eslint/no-unsafe-return": "warn", + "@typescript-eslint/no-unsafe-call": "warn", + "@typescript-eslint/no-unused-vars": [ + "error", + { argsIgnorePattern: "^_" }, + ], + }, + }, + ], +}; diff --git a/packages/eslint-config-dsdk/library.js b/packages/eslint-config-dsdk/library.js deleted file mode 100644 index c4a07ff7f..000000000 --- a/packages/eslint-config-dsdk/library.js +++ /dev/null @@ -1,34 +0,0 @@ -const { resolve } = require("node:path"); - -const project = resolve(process.cwd(), "tsconfig.json"); - -/** @type {import("eslint").Linter.Config} */ -module.exports = { - extends: ["eslint:recommended", "prettier", "eslint-config-turbo"], - plugins: ["only-warn"], - globals: { - React: true, - JSX: true, - }, - env: { - node: true, - }, - settings: { - "import/resolver": { - typescript: { - project, - }, - }, - }, - ignorePatterns: [ - // Ignore dotfiles - ".*.js", - "node_modules/", - "dist/", - ], - overrides: [ - { - files: ["*.js?(x)", "*.ts?(x)"], - }, - ], -}; \ No newline at end of file diff --git a/packages/eslint-config-dsdk/package.json b/packages/eslint-config-dsdk/package.json index dad83384c..b671fe81a 100644 --- a/packages/eslint-config-dsdk/package.json +++ b/packages/eslint-config-dsdk/package.json @@ -1,11 +1,18 @@ { - "name": "eslint-config-dsdk", + "name": "@ledgerhq/eslint-config-dsdk", "license": "MIT", - "version": "0.0.0", + "version": "0.0.1", "private": true, - "files": ["library.js"], + "files": [ + "index.js" + ], "devDependencies": { + "@typescript-eslint/eslint-plugin": "^6.14.0", + "@typescript-eslint/parser": "^6.14.0", "@vercel/style-guide": "^5.1.0", - "eslint-config-turbo": "^1.10.12" + "eslint-config-prettier": "^9.1.0", + "eslint-config-turbo": "^1.10.12", + "eslint-plugin-only-warn": "^1.1.0", + "prettier": "^3.1.1" } } \ No newline at end of file diff --git a/packages/signer/.eslintrc.js b/packages/signer/.eslintrc.js index eb4c5f43a..f506119e1 100644 --- a/packages/signer/.eslintrc.js +++ b/packages/signer/.eslintrc.js @@ -1,4 +1,4 @@ module.exports = { root: true, - extends: ["dsdk/next"], -}; \ No newline at end of file + extends: ["@ledgerhq/dsdk"], +}; diff --git a/packages/signer/package.json b/packages/signer/package.json index ea7bf3b31..9cc5e0e2f 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -8,6 +8,10 @@ "/lib" ], "scripts": { + "build": "tsc", + "dev": "tsc --watch", + "lint": "eslint --cache --ext .ts \"src\"", + "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "test": "echo \"Error: no test specified\" && exit 1" }, "peerDependencies": { @@ -19,6 +23,6 @@ "@types/node": "^20.10.5", "eslint": "^8.56.0", "typescript": "^5.3.3", - "eslint-config-dsdk": "workspace:*" + "@ledgerhq/eslint-config-dsdk": "workspace:*" } } diff --git a/packages/signer/src/index.ts b/packages/signer/src/index.ts new file mode 100644 index 000000000..0ed59bceb --- /dev/null +++ b/packages/signer/src/index.ts @@ -0,0 +1 @@ +export const Hello = "World"; diff --git a/packages/trusted-apps/.eslintrc.js b/packages/trusted-apps/.eslintrc.js index eb4c5f43a..f506119e1 100644 --- a/packages/trusted-apps/.eslintrc.js +++ b/packages/trusted-apps/.eslintrc.js @@ -1,4 +1,4 @@ module.exports = { root: true, - extends: ["dsdk/next"], -}; \ No newline at end of file + extends: ["@ledgerhq/dsdk"], +}; diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 2b1c250c7..08ceb0218 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -8,6 +8,10 @@ "/lib" ], "scripts": { + "build": "tsc", + "lint": "eslint --cache --ext .ts \"src\"", + "lint:fix": "eslint --cache --fix --ext .ts \"src\"", + "dev": "tsc --watch", "test": "echo \"Error: no test specified\" && exit 1" }, "peerDependencies": { @@ -19,6 +23,6 @@ "@types/node": "^20.10.5", "eslint": "^8.56.0", "typescript": "^5.3.3", - "eslint-config-dsdk": "workspace:*" + "@ledgerhq/eslint-config-dsdk": "workspace:*" } } diff --git a/packages/trusted-apps/src/index.ts b/packages/trusted-apps/src/index.ts new file mode 100644 index 000000000..0ed59bceb --- /dev/null +++ b/packages/trusted-apps/src/index.ts @@ -0,0 +1 @@ +export const Hello = "World"; diff --git a/packages/ui/.eslintrc.js b/packages/ui/.eslintrc.js index eb4c5f43a..f506119e1 100644 --- a/packages/ui/.eslintrc.js +++ b/packages/ui/.eslintrc.js @@ -1,4 +1,4 @@ module.exports = { root: true, - extends: ["dsdk/next"], -}; \ No newline at end of file + extends: ["@ledgerhq/dsdk"], +}; diff --git a/packages/ui/package.json b/packages/ui/package.json index 707814c55..07dc40fe0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -8,6 +8,10 @@ "/lib" ], "scripts": { + "build": "tsc", + "dev": "tsc --watch", + "lint": "eslint --cache --ext .ts \"src\"", + "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "test": "echo \"Error: no test specified\" && exit 1" }, "peerDependencies": { @@ -19,6 +23,6 @@ "@types/node": "^20.10.5", "eslint": "^8.56.0", "typescript": "^5.3.3", - "eslint-config-dsdk": "workspace:*" + "@ledgerhq/eslint-config-dsdk": "workspace:*" } } diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts new file mode 100644 index 000000000..0ed59bceb --- /dev/null +++ b/packages/ui/src/index.ts @@ -0,0 +1 @@ +export const Hello = "World"; From 3715dbf3116fbe9cc827feadc5c86922c48fd2e0 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Mon, 18 Dec 2023 15:27:58 +0100 Subject: [PATCH 008/253] chore: update .gitignore --- .gitignore | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 4afb8ba6d..f13922b16 100644 --- a/.gitignore +++ b/.gitignore @@ -8,34 +8,28 @@ lib-cov *.gz *.swp -pids -logs -results -tmp - -# Build -public/css/main.css - # Coverage reports coverage # API keys and secrets .env -# Dependency directory +# node node_modules -bower_components -# Editors +# IDE .idea *.iml -# OS metadata +# misc .DS_Store Thumbs.db -# Ignore built ts files -dist/**/* +# build +lib + +# turbo +.turbo -# ignore yarn.lock -yarn.lock \ No newline at end of file +# eslint +.eslintcache \ No newline at end of file From f9883929063e0a4b1aa6d3b61ff821288667fb56 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Mon, 18 Dec 2023 15:28:44 +0100 Subject: [PATCH 009/253] chore: turbo build & dev --- .github/workflows/pull_request.yml | 36 + .github/workflows/size.yml | 12 - package.json | 16 +- pnpm-lock.yaml | 12048 ++++++++++++++++++++++----- tsconfig.base.json | 2 +- turbo.json | 5 +- 6 files changed, 9810 insertions(+), 2309 deletions(-) create mode 100644 .github/workflows/pull_request.yml delete mode 100644 .github/workflows/size.yml diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml new file mode 100644 index 000000000..62abe3619 --- /dev/null +++ b/.github/workflows/pull_request.yml @@ -0,0 +1,36 @@ +name: size +on: [pull_request] +jobs: + size: + runs-on: ubuntu-latest + env: + CI_JOB_NUMBER: 1 + steps: + - uses: actions/checkout@v3 + + - uses: pnpm/action-setup@v2 + name: Install pnpm + with: + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Lint + run: pnpm lint + + - name: Build + run: pnpm build \ No newline at end of file diff --git a/.github/workflows/size.yml b/.github/workflows/size.yml deleted file mode 100644 index 6021cda3e..000000000 --- a/.github/workflows/size.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: size -on: [pull_request] -jobs: - size: - runs-on: ubuntu-latest - env: - CI_JOB_NUMBER: 1 - steps: - - uses: actions/checkout@v1 - - uses: andresz1/size-limit-action@v1 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/package.json b/package.json index 75340822e..2404dbd16 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,29 @@ { "name": "@ledgerhq/device-sdk", "version": "1.0.0", + "private": true, "license": "MIT", + "workspaces": [ + "packages/*", + "apps/*" + ], "scripts": { "build": "turbo build", + "dev": "turbo dev", + "lint": "turbo run lint", + "lint:fix": "turbo run lint:fix", "core": "turbo --filter @ledgerhq/device-sdk-core", + "signer": "turbo --filter @ledgerhq/device-sdk-signer", + "trusted-apps": "turbo --filter @ledgerhq/device-sdk-trusted-apps", + "ui": "turbo --filter @ledgerhq/device-sdk-ui", + "sample": "turbo --filter @ledgerhq/device-sdk-sample", "test": "echo \"Error: no test specified\" && exit 1" }, "devDependencies": { + "@tsconfig/recommended": "^1.0.3", "eslint": "^8.56.0", - "eslint-config-dsdk": "workspace:*", + "@ledgerhq/eslint-config-dsdk": "workspace:*", + "lint-staged": "^15.2.0", "path": "^0.12.7", "turbo": "^1.11.2", "zx": "^7.2.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 660c7faac..5067149d9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,44 +31,187 @@ importers: version: 7.2.3 apps/sample: - dependencies: - next: - specifier: 14.0.4 - version: 14.0.4(react-dom@18.2.0)(react@18.2.0) - react: - specifier: ^18 - version: 18.2.0 - react-dom: - specifier: ^18 - version: 18.2.0(react@18.2.0) devDependencies: + '@babel/core': + specifier: ^7.16.0 + version: 7.23.6 + '@ledgerhq/eslint-config-dsdk': + specifier: workspace:* + version: link:../../packages/eslint-config-dsdk + '@pmmmwh/react-refresh-webpack-plugin': + specifier: ^0.5.3 + version: 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0) + '@svgr/webpack': + specifier: ^5.5.0 + version: 5.5.0 + '@testing-library/jest-dom': + specifier: ^5.17.0 + version: 5.17.0 + '@testing-library/react': + specifier: ^13.4.0 + version: 13.4.0(react-dom@18.2.0)(react@18.2.0) + '@testing-library/user-event': + specifier: ^13.5.0 + version: 13.5.0(@testing-library/dom@9.3.3) + '@types/jest': + specifier: ^27.5.2 + version: 27.5.2 '@types/node': - specifier: ^20 - version: 20.10.5 + specifier: ^16.18.68 + version: 16.18.68 '@types/react': - specifier: ^18 + specifier: ^18.2.45 version: 18.2.45 '@types/react-dom': - specifier: ^18 + specifier: ^18.2.17 version: 18.2.18 - autoprefixer: + '@types/web-bluetooth': + specifier: ^0.0.20 + version: 0.0.20 + babel-jest: + specifier: ^27.4.2 + version: 27.5.1(@babel/core@7.23.6) + babel-loader: + specifier: ^8.2.3 + version: 8.3.0(@babel/core@7.23.6)(webpack@5.89.0) + babel-plugin-named-asset-import: + specifier: ^0.3.8 + version: 0.3.8(@babel/core@7.23.6) + babel-preset-react-app: specifier: ^10.0.1 - version: 10.4.16(postcss@8.4.32) + version: 10.0.1 + bfj: + specifier: ^7.0.2 + version: 7.1.0 + browserslist: + specifier: ^4.18.1 + version: 4.22.2 + camelcase: + specifier: ^6.2.1 + version: 6.3.0 + case-sensitive-paths-webpack-plugin: + specifier: ^2.4.0 + version: 2.4.0 + css-loader: + specifier: ^6.5.1 + version: 6.8.1(webpack@5.89.0) + css-minimizer-webpack-plugin: + specifier: ^3.2.0 + version: 3.4.1(webpack@5.89.0) + dotenv: + specifier: ^10.0.0 + version: 10.0.0 + dotenv-expand: + specifier: ^5.1.0 + version: 5.1.0 eslint: - specifier: ^8 + specifier: ^8.56.0 version: 8.56.0 - eslint-config-next: - specifier: 14.0.4 - version: 14.0.4(eslint@8.56.0)(typescript@5.3.3) + eslint-config-react-app: + specifier: ^7.0.1 + version: 7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5) + eslint-webpack-plugin: + specifier: ^3.1.1 + version: 3.2.0(eslint@8.56.0)(webpack@5.89.0) + file-loader: + specifier: ^6.2.0 + version: 6.2.0(webpack@5.89.0) + fs-extra: + specifier: ^10.0.0 + version: 10.1.0 + html-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.4(webpack@5.89.0) + identity-obj-proxy: + specifier: ^3.0.0 + version: 3.0.0 + jest: + specifier: ^27.4.3 + version: 27.5.1 + jest-resolve: + specifier: ^27.4.2 + version: 27.5.1 + jest-watch-typeahead: + specifier: ^1.0.0 + version: 1.1.0(jest@27.5.1) + mini-css-extract-plugin: + specifier: ^2.4.5 + version: 2.7.6(webpack@5.89.0) postcss: - specifier: ^8 + specifier: ^8.4.4 version: 8.4.32 + postcss-flexbugs-fixes: + specifier: ^5.0.2 + version: 5.0.2(postcss@8.4.32) + postcss-loader: + specifier: ^6.2.1 + version: 6.2.1(postcss@8.4.32)(webpack@5.89.0) + postcss-normalize: + specifier: ^10.0.1 + version: 10.0.1(browserslist@4.22.2)(postcss@8.4.32) + postcss-preset-env: + specifier: ^7.0.1 + version: 7.8.3(postcss@8.4.32) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-app-polyfill: + specifier: ^3.0.0 + version: 3.0.0 + react-dev-utils: + specifier: ^12.0.1 + version: 12.0.1(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0) + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + react-refresh: + specifier: ^0.11.0 + version: 0.11.0 + resolve: + specifier: ^1.20.0 + version: 1.22.8 + resolve-url-loader: + specifier: ^4.0.0 + version: 4.0.0 + sass-loader: + specifier: ^12.3.0 + version: 12.6.0(webpack@5.89.0) + semver: + specifier: ^7.3.5 + version: 7.5.4 + source-map-loader: + specifier: ^3.0.0 + version: 3.0.2(webpack@5.89.0) + style-loader: + specifier: ^3.3.1 + version: 3.3.3(webpack@5.89.0) tailwindcss: - specifier: ^3.3.0 + specifier: ^3.0.2 version: 3.3.6 + terser-webpack-plugin: + specifier: ^5.2.5 + version: 5.3.9(webpack@5.89.0) typescript: - specifier: ^5 - version: 5.3.3 + specifier: ^4.9.5 + version: 4.9.5 + web-vitals: + specifier: ^2.1.4 + version: 2.1.4 + webpack: + specifier: ^5.64.4 + version: 5.89.0 + webpack-dev-server: + specifier: ^4.6.0 + version: 4.15.1(webpack@5.89.0) + webpack-manifest-plugin: + specifier: ^4.0.2 + version: 4.1.1(webpack@5.89.0) + workbox-webpack-plugin: + specifier: ^6.4.1 + version: 6.6.0(webpack@5.89.0) packages/core: dependencies: @@ -201,6 +344,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /@adobe/css-tools@4.3.2: + resolution: {integrity: sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==} + dev: true + /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -214,6 +361,18 @@ packages: '@jridgewell/trace-mapping': 0.3.20 dev: true + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.12.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: true + /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -274,6 +433,20 @@ packages: jsesc: 2.5.2 dev: true + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: true + /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} @@ -285,6 +458,51 @@ packages: semver: 6.3.1 dev: true + /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.6): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: true + + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.6): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} @@ -305,6 +523,13 @@ packages: '@babel/types': 7.23.6 dev: true + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: true + /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} @@ -326,6 +551,42 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: true + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.6): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: true + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: true + /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} @@ -333,6 +594,13 @@ packages: '@babel/types': 7.23.6 dev: true + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: true + /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} @@ -355,6 +623,15 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + dev: true + /@babel/helpers@7.23.6: resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} engines: {node: '>=6.9.0'} @@ -383,3232 +660,8884 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/runtime@7.23.6: - resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - regenerator-runtime: 0.14.1 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) dev: true - /@babel/traverse@7.23.6: - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/core': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@babel/plugin-proposal-decorators@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==} + engines: {node: '>=6.9.0'} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@babel/core': ^7.0.0-0 dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.6) dev: true - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) dev: true - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.6): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.23.6): + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) dev: true - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@microsoft/tsdoc-config@0.16.2: - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@microsoft/tsdoc@0.14.2: - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@next/env@14.0.4: - resolution: {integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==} - dev: false - - /@next/eslint-plugin-next@14.0.4: - resolution: {integrity: sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==} + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - glob: 7.1.7 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@next/swc-darwin-arm64@14.0.4: - resolution: {integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-darwin-x64@14.0.4: - resolution: {integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-gnu@14.0.4: - resolution: {integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-musl@14.0.4: - resolution: {integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true + /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@next/swc-linux-x64-gnu@14.0.4: - resolution: {integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@next/swc-linux-x64-musl@14.0.4: - resolution: {integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@next/swc-win32-arm64-msvc@14.0.4: - resolution: {integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@next/swc-win32-ia32-msvc@14.0.4: - resolution: {integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@next/swc-win32-x64-msvc@14.0.4: - resolution: {integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - eslint-scope: 5.1.1 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@pkgr/utils@2.4.2: - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@rushstack/eslint-patch@1.6.1: - resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - tslib: 2.6.2 - dev: false + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@tsconfig/recommended@1.0.3: - resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/eslint@8.44.9: - resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/fs-extra@11.0.4: - resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@types/jsonfile': 6.1.4 - '@types/node': 20.10.5 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) dev: true - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) dev: true - /@types/jsonfile@6.1.4: - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@types/node': 20.10.5 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/node@18.19.3: - resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - undici-types: 5.26.5 + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/node@20.10.5: - resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 dependencies: - undici-types: 5.26.5 + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) dev: true - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.6): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 dev: true - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 dev: true - /@types/ps-tree@1.1.6: - resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/react-dom@18.2.18: - resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@types/react': 18.2.45 + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/react@18.2.45: - resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.3 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) dev: true - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@types/which@3.0.3: - resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) dev: true - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} - engines: {node: ^16.0.0 || >=18.0.0} + /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} + engines: {node: '>=6.9.0'} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@babel/core': ^7.0.0-0 dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) dev: true - /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} - engines: {node: ^16.0.0 || >=18.0.0} + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + engines: {node: '>=6.9.0'} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@babel/core': ^7.0.0-0 dependencies: - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 - eslint: 8.56.0 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@typescript-eslint/scope-manager@6.14.0: - resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) dev: true - /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} - engines: {node: ^16.0.0 || >=18.0.0} + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@babel/core': ^7.0.0-0 dependencies: - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.56.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) dev: true - /@typescript-eslint/types@6.14.0: - resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} - engines: {node: ^16.0.0 || >=18.0.0} + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@babel/core': ^7.0.0-0 dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): - resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} - engines: {node: ^16.0.0 || >=18.0.0} + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@babel/core': ^7.0.0-0 dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + engines: {node: '>=6.9.0'} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - eslint: 8.56.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript + '@babel/core': 7.23.6 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 dev: true - /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - eslint: 8.56.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.6): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@typescript-eslint/visitor-keys@6.14.0: - resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} - engines: {node: ^16.0.0 || >=18.0.0} + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@typescript-eslint/types': 6.14.0 - eslint-visitor-keys: 3.4.3 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) dev: true - /@vercel/style-guide@5.1.0(eslint@8.56.0)(prettier@3.1.1)(typescript@5.3.3): - resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} - engines: {node: '>=16'} + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <15' - eslint: '>=8.48.0 <9' - prettier: '>=3.0.0 <4' - typescript: '>=4.8.0 <6' - peerDependenciesMeta: - '@next/eslint-plugin-next': - optional: true - eslint: - optional: true - prettier: - optional: true - typescript: - optional: true + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.6 - '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - eslint-config-prettier: 9.1.0(eslint@8.56.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.56.0) - prettier: 3.1.1 - prettier-plugin-packagejson: 2.4.7(prettier@3.1.1) - typescript: 5.3.3 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - jest - - supports-color + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) dev: true - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + engines: {node: '>=6.9.0'} peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@babel/core': ^7.0.0-0 dependencies: - acorn: 8.11.2 + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) dev: true - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) dev: true - /ansi-escapes@6.2.0: - resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} - engines: {node: '>=14.16'} + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - type-fest: 3.13.1 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - color-convert: 1.9.3 + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - color-convert: 2.0.1 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.6): + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 + '@babel/core': 7.23.6 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) dev: true - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/types': 7.23.6 dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - dequal: 2.0.3 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} + /@babel/plugin-transform-runtime@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-string: 1.0.7 + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) dev: true - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - has-symbols: 1.0.3 + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /autoprefixer@10.4.16(postcss@8.4.32): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} peerDependencies: - postcss: ^8.1.0 + '@babel/core': ^7.0.0-0 dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001570 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} + /@babel/preset-env@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.6) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.6) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) + core-js-compat: 3.34.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color dev: true - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.6): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - dequal: 2.0.3 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.6 + esutils: 2.0.3 dev: true - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /@babel/preset-react@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.6) dev: true - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} + /@babel/preset-typescript@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} + /@babel/runtime@7.23.6: + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + engines: {node: '>=6.9.0'} dependencies: - big-integer: 1.6.52 + regenerator-runtime: 0.14.1 dev: true - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + dev: true + + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + engines: {node: '>=6.9.0'} dependencies: - fill-range: 7.0.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} dependencies: - caniuse-lite: 1.0.30001570 - electron-to-chromium: 1.4.614 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 dev: true - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - dependencies: - run-applescript: 5.0.0 + /@csstools/normalize.css@12.0.0: + resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} dev: true - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + /@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.32): + resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - streamsearch: 1.1.0 - dev: false + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + /@csstools/postcss-color-function@1.1.1(postcss@8.4.32): + resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} + /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.32): + resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /caniuse-lite@1.0.30001570: - resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.32): + resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + /@csstools/postcss-nested-calc@1.0.0(postcss@8.4.32): + resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} + /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.32): + resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} + /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.32): + resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 dependencies: - escape-string-regexp: 1.0.5 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.32): + resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - restore-cursor: 4.0.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + /@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.32): + resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - slice-ansi: 5.0.0 - string-width: 7.0.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + /@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.32): + resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} + engines: {node: ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - color-name: 1.1.3 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + /@csstools/postcss-unset-value@1.0.2(postcss@8.4.32): + resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - color-name: 1.1.4 + postcss: 8.4.32 dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.13): + resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.10 + dependencies: + postcss-selector-parser: 6.0.13 dev: true - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 dev: true - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color dev: true - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color dev: true - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 dev: true - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} dev: true - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + /@jest/console@27.5.1: + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 dev: true - /data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} + /@jest/console@28.1.3: + resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 20.10.5 + chalk: 4.1.2 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + slash: 3.0.0 dev: true - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + /@jest/core@27.5.1: + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: - supports-color: '*' + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: - supports-color: + node-notifier: optional: true dependencies: - ms: 2.1.3 - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 27.5.1 + jest-config: 27.5.1 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 + micromatch: 4.0.5 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate dev: true - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} + /@jest/environment@27.5.1: + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + jest-mock: 27.5.1 dev: true - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} + /@jest/fake-timers@27.5.1: + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 + '@jest/types': 27.5.1 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 20.10.5 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} + /@jest/globals@27.5.1: + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 dev: true - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} + /@jest/reporters@27.5.1: + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + jest-haste-map: 27.5.1 + jest-resolve: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 8.1.1 + transitivePeerDependencies: + - supports-color dev: true - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + /@jest/schemas@28.1.3: + resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 - object-keys: 1.1.1 + '@sinclair/typebox': 0.24.51 dev: true - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} + /@jest/source-map@27.5.1: + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.11 + source-map: 0.6.1 dev: true - /detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} + /@jest/test-result@27.5.1: + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/types': 27.5.1 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 dev: true - /detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /@jest/test-result@28.1.3: + resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/console': 28.1.3 + '@jest/types': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 dev: true - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + /@jest/test-sequencer@27.5.1: + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-runtime: 27.5.1 + transitivePeerDependencies: + - supports-color dev: true - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + /@jest/transform@27.5.1: + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - path-type: 4.0.0 + '@babel/core': 7.23.6 + '@jest/types': 27.5.1 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.9.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color dev: true - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + /@jest/types@27.5.1: + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.10.5 + '@types/yargs': 16.0.9 + chalk: 4.1.2 dev: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + /@jest/types@28.1.3: + resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - esutils: 2.0.3 + '@jest/schemas': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.10.5 + '@types/yargs': 17.0.32 + chalk: 4.1.2 dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: - esutils: 2.0.3 + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 dev: true - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} dev: true - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} dev: true - /electron-to-chromium@1.4.614: - resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 dev: true - /emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 + /@leichtgewicht/ip-codec@2.0.4: + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} dev: true - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} dependencies: - is-arrayish: 0.2.1 + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 dev: true - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - 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.12 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - 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.13 + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} dev: true - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.6 - iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 + eslint-scope: 5.1.1 dev: true - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.0 + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.2 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 dev: true - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0): + resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <5.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.34.0 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.4.0 + loader-utils: 2.0.4 + react-refresh: 0.11.0 + schema-utils: 3.3.0 + source-map: 0.7.4 + webpack: 5.89.0 + webpack-dev-server: 4.15.1(webpack@5.89.0) dev: true - /eslint-config-next@14.0.4(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==} + /@rollup/plugin-babel@5.3.1(@babel/core@7.23.6)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 peerDependenciesMeta: - typescript: + '@types/babel__core': optional: true dependencies: - '@next/eslint-plugin-next': 14.0.4 - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(eslint@8.56.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - typescript: 5.3.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 dev: true - /eslint-config-prettier@9.1.0(eslint@8.56.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true + /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} peerDependencies: - eslint: '>=7.0.0' + rollup: ^1.20.0||^2.0.0 dependencies: - eslint: 8.56.0 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 2.79.1 dev: true - /eslint-config-turbo@1.11.2(eslint@8.56.0): - resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} + /@rollup/plugin-replace@2.4.2(rollup@2.79.1): + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} peerDependencies: - eslint: '>6.6.0' + rollup: ^1.20.0 || ^2.0.0 dependencies: - eslint: 8.56.0 - eslint-plugin-turbo: 1.11.2(eslint@8.56.0) + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + magic-string: 0.25.9 + rollup: 2.79.1 dev: true - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} + /@rollup/pluginutils@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} peerDependencies: - eslint-plugin-import: '>=1.4.0' + rollup: ^1.20.0||^2.0.0 dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 dev: true - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + /@rushstack/eslint-patch@1.6.1: + resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} + dev: true + + /@sinclair/typebox@0.24.51: + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + dev: true + + /@sinonjs/commons@1.8.6: + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color + type-detect: 4.0.8 dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' + /@sinonjs/fake-timers@8.1.0: + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(eslint@8.56.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color + '@sinonjs/commons': 1.8.6 dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' + /@surma/rollup-plugin-off-main-thread@2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color + ejs: 3.1.9 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.10 dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + /@svgr/babel-plugin-add-jsx-attribute@5.4.0: + resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-remove-jsx-attribute@5.4.0: + resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1: + resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1: + resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-svg-dynamic-title@5.4.0: + resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-svg-em-dimensions@5.4.0: + resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-transform-react-native-svg@5.4.0: + resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-transform-svg-component@5.5.0: + resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-preset@5.5.0: + resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} + engines: {node: '>=10'} dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - transitivePeerDependencies: - - supports-color + '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 + '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 + '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 + '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 + '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 + '@svgr/babel-plugin-transform-svg-component': 5.5.0 dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + /@svgr/core@5.5.0: + resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} + engines: {node: '>=10'} dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 + '@svgr/plugin-jsx': 5.5.0 + camelcase: 6.3.0 + cosmiconfig: 7.1.0 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + /@svgr/hast-util-to-babel-ast@5.5.0: + resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} + engines: {node: '>=10'} dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - transitivePeerDependencies: - - supports-color + '@babel/types': 7.23.6 dev: true - /eslint-module-utils@2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + /@svgr/plugin-jsx@5.5.0: + resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} + engines: {node: '>=10'} dependencies: - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 + '@babel/core': 7.23.6 + '@svgr/babel-preset': 5.5.0 + '@svgr/hast-util-to-babel-ast': 5.5.0 + svg-parser: 2.0.4 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' + /@svgr/plugin-svgo@5.5.0: + resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} + engines: {node: '>=10'} dependencies: - escape-string-regexp: 1.0.5 - eslint: 8.56.0 - ignore: 5.3.0 + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + svgo: 1.3.2 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + /@svgr/webpack@5.5.0: + resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} + engines: {node: '>=10'} dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.0 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 + '@babel/core': 7.23.6 + '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.23.6) + '@babel/preset-env': 7.23.6(@babel/core@7.23.6) + '@babel/preset-react': 7.23.3(@babel/core@7.23.6) + '@svgr/core': 5.5.0 + '@svgr/plugin-jsx': 5.5.0 + '@svgr/plugin-svgo': 5.5.0 + loader-utils: 2.0.4 transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - supports-color dev: true - /eslint-plugin-import@2.29.1(eslint@8.56.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + /@testing-library/dom@8.20.1: + resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} + engines: {node: '>=12'} dependencies: - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.0 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color + '@babel/code-frame': 7.23.5 + '@babel/runtime': 7.23.6 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true + /@testing-library/dom@9.3.3: + resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} + engines: {node: '>=14'} dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript + '@babel/code-frame': 7.23.5 + '@babel/runtime': 7.23.6 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + /@testing-library/jest-dom@5.17.0: + resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} + engines: {node: '>=8', npm: '>=6', yarn: '>=1'} dependencies: + '@adobe/css-tools': 4.3.2 '@babel/runtime': 7.23.6 + '@types/testing-library__jest-dom': 5.14.9 aria-query: 5.3.0 - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - hasown: 2.0.0 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.5.16 + lodash: 4.17.21 + redent: 3.0.0 dev: true - /eslint-plugin-only-warn@1.1.0: - resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} - engines: {node: '>=6'} + /@testing-library/react@13.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} + engines: {node: '>=12'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@babel/runtime': 7.23.6 + '@testing-library/dom': 8.20.1 + '@types/react-dom': 18.2.18 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: true - /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0): - resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + /@testing-library/user-event@13.5.0(@testing-library/dom@9.3.3): + resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} + engines: {node: '>=10', npm: '>=6'} peerDependencies: - eslint: '>=7' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true + '@testing-library/dom': '>=7.21.4' dependencies: - eslint: 8.56.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + '@babel/runtime': 7.23.6 + '@testing-library/dom': 9.3.3 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + /@tootallnate/once@1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: true + + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: true + + /@tsconfig/recommended@1.0.3: + resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} + dev: true + + /@types/aria-query@5.0.4: + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + dev: true + + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - eslint: 8.56.0 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.4 dev: true - /eslint-plugin-react@7.33.2(eslint@8.56.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 + '@babel/types': 7.23.6 dev: true - /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 dev: true - /eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + /@types/babel__traverse@7.20.4: + resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 + '@babel/types': 7.23.6 dev: true - /eslint-plugin-turbo@1.11.2(eslint@8.56.0): - resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} - peerDependencies: - eslint: '>6.6.0' + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: - dotenv: 16.0.3 - eslint: 8.56.0 + '@types/connect': 3.4.38 + '@types/node': 20.10.5 dev: true - /eslint-plugin-unicorn@48.0.1(eslint@8.56.0): - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.44.0' + /@types/bonjour@3.5.13: + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - ci-info: 3.9.0 - clean-regexp: 1.0.0 - eslint: 8.56.0 - esquery: 1.5.0 - indent-string: 4.0.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.27 - regjsparser: 0.10.0 - semver: 7.5.4 - strip-indent: 3.0.0 + '@types/node': 20.10.5 dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + /@types/connect-history-api-fallback@1.5.4: + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 + '@types/express-serve-static-core': 4.17.41 + '@types/node': 20.10.5 dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 + '@types/node': 20.10.5 dev: true - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + dependencies: + '@types/eslint': 8.44.9 + '@types/estree': 1.0.5 dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@types/eslint@8.44.9: + resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 dev: true - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/express-serve-static-core@4.17.41: + resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 + '@types/node': 20.10.5 + '@types/qs': 6.9.10 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: true + + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.17.41 + '@types/qs': 6.9.10 + '@types/serve-static': 1.15.5 + dev: true + + /@types/fs-extra@11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 20.10.5 + dev: true + + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + dependencies: + '@types/node': 20.10.5 + dev: true + + /@types/html-minifier-terser@6.1.0: + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + dev: true + + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: true + + /@types/http-proxy@1.17.14: + resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} + dependencies: + '@types/node': 20.10.5 + dev: true + + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: true + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: true + + /@types/jest@27.5.2: + resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} + dependencies: + jest-matcher-utils: 27.5.1 + pretty-format: 27.5.1 + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/jsonfile@6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + dependencies: + '@types/node': 20.10.5 + dev: true + + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: true + + /@types/mime@3.0.4: + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + dev: true + + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + dev: true + + /@types/node-forge@1.3.10: + resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} + dependencies: + '@types/node': 20.10.5 + dev: true + + /@types/node@16.18.68: + resolution: {integrity: sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==} + dev: true + + /@types/node@18.19.3: + resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/node@20.10.5: + resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true + + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: true + + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + dev: true + + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + dev: true + + /@types/ps-tree@1.1.6: + resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} + dev: true + + /@types/q@1.5.8: + resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} + dev: true + + /@types/qs@6.9.10: + resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} + dev: true + + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: true + + /@types/react-dom@18.2.18: + resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} + dependencies: + '@types/react': 18.2.45 + dev: true + + /@types/react@18.2.45: + resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} + dependencies: + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 + csstype: 3.1.3 + dev: true + + /@types/resolve@1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 20.10.5 + dev: true + + /@types/retry@0.12.0: + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + dev: true + + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + dev: true + + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + dev: true + + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.10.5 + dev: true + + /@types/serve-index@1.9.4: + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + dependencies: + '@types/express': 4.17.21 + dev: true + + /@types/serve-static@1.15.5: + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/mime': 3.0.4 + '@types/node': 20.10.5 + dev: true + + /@types/sockjs@0.3.36: + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + dependencies: + '@types/node': 20.10.5 + dev: true + + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: true + + /@types/testing-library__jest-dom@5.14.9: + resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} + dependencies: + '@types/jest': 27.5.2 + dev: true + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + dev: true + + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: true + + /@types/which@3.0.3: + resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} + dev: true + + /@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + dependencies: + '@types/node': 20.10.5 + dev: true + + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true + + /@types/yargs@16.0.9: + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: true + + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: true + + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 + eslint: 8.56.0 + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/experimental-utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + debug: 4.3.4 + eslint: 8.56.0 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + eslint: 8.56.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/scope-manager@6.14.0: + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 + dev: true + + /@typescript-eslint/type-utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + debug: 4.3.4 + eslint: 8.56.0 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.56.0 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/types@6.14.0: + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + eslint: 8.56.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + eslint: 8.56.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + eslint: 8.56.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@6.14.0: + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.14.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /@vercel/style-guide@5.1.0(eslint@8.56.0)(prettier@3.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} + engines: {node: '>=16'} + peerDependencies: + '@next/eslint-plugin-next': '>=12.3.0 <15' + eslint: '>=8.48.0 <9' + prettier: '>=3.0.0 <4' + typescript: '>=4.8.0 <6' + peerDependenciesMeta: + '@next/eslint-plugin-next': + optional: true + eslint: + optional: true + prettier: + optional: true + typescript: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-config-prettier: 9.1.0(eslint@8.56.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) + eslint-plugin-react: 7.33.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + eslint-plugin-testing-library: 6.2.0(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 48.0.1(eslint@8.56.0) + prettier: 3.1.1 + prettier-plugin-packagejson: 2.4.7(prettier@3.1.1) + typescript: 5.3.3 + transitivePeerDependencies: + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true + + /@webassemblyjs/ast@1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: true + + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: true + + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: true + + /@webassemblyjs/helper-buffer@1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + dev: true + + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: true + + /@webassemblyjs/helper-wasm-section@1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + dev: true + + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: true + + /@webassemblyjs/wasm-edit@1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 + dev: true + + /@webassemblyjs/wasm-gen@1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wasm-opt@1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + dev: true + + /@webassemblyjs/wasm-parser@1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wast-printer@1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + + /abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + dev: true + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: true + + /acorn-globals@6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + dev: true + + /acorn-import-assertions@1.9.0(acorn@8.11.2): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.11.2 + dev: true + + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + dev: true + + /acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + dev: true + + /adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + dependencies: + loader-utils: 2.0.4 + regex-parser: 2.2.11 + dev: true + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /ajv-formats@2.1.1(ajv@8.12.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: true + + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: true + + /ajv-keywords@5.1.0(ajv@8.12.0): + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + dependencies: + ajv: 8.12.0 + fast-deep-equal: 3.1.3 + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-escapes@6.2.0: + resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} + engines: {node: '>=14.16'} + dependencies: + type-fest: 3.13.1 + dev: true + + /ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + dependencies: + deep-equal: 2.2.3 + dev: true + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: true + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: true + + /array-flatten@2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + dev: true + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.reduce@1.0.6: + resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: true + + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true + + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: true + + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: true + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true + + /autoprefixer@10.4.16(postcss@8.4.32): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001570 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: true + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: true + + /babel-jest@27.5.1(@babel/core@7.23.6): + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.23.6 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.5.1(@babel/core@7.23.6) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-loader@8.3.0(@babel/core@7.23.6)(webpack@5.89.0): + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.23.6 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.89.0 + dev: true + + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.22.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-jest-hoist@27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.4 + dev: true + + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.23.6 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + dev: true + + /babel-plugin-named-asset-import@0.3.8(@babel/core@7.23.6): + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 + dependencies: + '@babel/core': 7.23.6 + dev: true + + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.6): + resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.6): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + core-js-compat: 3.34.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.6): + resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-react-remove-prop-types@0.4.24: + resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} + dev: true + + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + dev: true + + /babel-preset-jest@27.5.1(@babel/core@7.23.6): + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + dev: true + + /babel-preset-react-app@10.0.1: + resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-decorators': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.6) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.6) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-runtime': 7.23.6(@babel/core@7.23.6) + '@babel/preset-env': 7.23.6(@babel/core@7.23.6) + '@babel/preset-react': 7.23.3(@babel/core@7.23.6) + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/runtime': 7.23.6 + babel-plugin-macros: 3.1.0 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + transitivePeerDependencies: + - supports-color + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + dev: true + + /bfj@7.1.0: + resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} + engines: {node: '>= 8.0.0'} + dependencies: + bluebird: 3.7.2 + check-types: 11.2.3 + hoopy: 0.1.4 + jsonpath: 1.1.1 + tryer: 1.0.1 + dev: true + + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: true + + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + + /body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /bonjour-service@1.1.1: + resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} + dependencies: + array-flatten: 2.1.2 + dns-equal: 1.0.0 + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + dev: true + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: true + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.52 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browser-process-hrtime@1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + dev: true + + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001570 + electron-to-chromium: 1.4.614 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: true + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + + /bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: true + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: true + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.2 + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001570 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: true + + /caniuse-lite@1.0.30001570: + resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + dev: true + + /case-sensitive-paths-webpack-plugin@2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} + engines: {node: '>=4'} + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true + + /char-regex@2.0.1: + resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} + engines: {node: '>=12.20'} + dev: true + + /check-types@11.2.3: + resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: true + + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + dev: true + + /clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + dependencies: + source-map: 0.6.1 + dev: true + + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + dependencies: + slice-ansi: 5.0.0 + string-width: 7.0.0 + dev: true + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + /coa@2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} + engines: {node: '>= 4.0'} + dependencies: + '@types/q': 1.5.8 + chalk: 2.4.2 + q: 1.5.1 + dev: true + + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + + /commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + dev: true + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: true + + /common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: true + + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: true + + /connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + dev: true + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: true + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: true + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: true + + /core-js-compat@3.34.0: + resolution: {integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==} + dependencies: + browserslist: 4.22.2 + dev: true + + /core-js-pure@3.34.0: + resolution: {integrity: sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==} + requiresBuild: true + dev: true + + /core-js@3.34.0: + resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==} + requiresBuild: true + dev: true + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cosmiconfig@6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: true + + /css-blank-pseudo@3.0.3(postcss@8.4.32): + resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: true + + /css-declaration-sorter@6.4.1(postcss@8.4.32): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.32 + dev: true + + /css-has-pseudo@3.0.4(postcss@8.4.32): + resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: true + + /css-loader@6.8.1(webpack@5.89.0): + resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.32) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.32) + postcss-modules-scope: 3.0.0(postcss@8.4.32) + postcss-modules-values: 4.0.0(postcss@8.4.32) + postcss-value-parser: 4.2.0 + semver: 7.5.4 + webpack: 5.89.0 + dev: true + + /css-minimizer-webpack-plugin@3.4.1(webpack@5.89.0): + resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@parcel/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + dependencies: + cssnano: 5.1.15(postcss@8.4.32) + jest-worker: 27.5.1 + postcss: 8.4.32 + schema-utils: 4.2.0 + serialize-javascript: 6.0.1 + source-map: 0.6.1 + webpack: 5.89.0 + dev: true + + /css-prefers-color-scheme@6.0.3(postcss@8.4.32): + resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + dev: true + + /css-select-base-adapter@0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} + dev: true + + /css-select@2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} + dependencies: + boolbase: 1.0.0 + css-what: 3.4.2 + domutils: 1.7.0 + nth-check: 1.0.2 + dev: true + + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: true + + /css-tree@1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.4 + source-map: 0.6.1 + dev: true + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + + /css-what@3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} + engines: {node: '>= 6'} + dev: true + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: true + + /css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: true + + /cssdb@7.9.1: + resolution: {integrity: sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==} + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /cssnano-preset-default@5.2.14(postcss@8.4.32): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.32) + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-calc: 8.2.4(postcss@8.4.32) + postcss-colormin: 5.3.1(postcss@8.4.32) + postcss-convert-values: 5.1.3(postcss@8.4.32) + postcss-discard-comments: 5.1.2(postcss@8.4.32) + postcss-discard-duplicates: 5.1.0(postcss@8.4.32) + postcss-discard-empty: 5.1.1(postcss@8.4.32) + postcss-discard-overridden: 5.1.0(postcss@8.4.32) + postcss-merge-longhand: 5.1.7(postcss@8.4.32) + postcss-merge-rules: 5.1.4(postcss@8.4.32) + postcss-minify-font-values: 5.1.0(postcss@8.4.32) + postcss-minify-gradients: 5.1.1(postcss@8.4.32) + postcss-minify-params: 5.1.4(postcss@8.4.32) + postcss-minify-selectors: 5.2.1(postcss@8.4.32) + postcss-normalize-charset: 5.1.0(postcss@8.4.32) + postcss-normalize-display-values: 5.1.0(postcss@8.4.32) + postcss-normalize-positions: 5.1.1(postcss@8.4.32) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.32) + postcss-normalize-string: 5.1.0(postcss@8.4.32) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.32) + postcss-normalize-unicode: 5.1.1(postcss@8.4.32) + postcss-normalize-url: 5.1.0(postcss@8.4.32) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.32) + postcss-ordered-values: 5.1.3(postcss@8.4.32) + postcss-reduce-initial: 5.1.2(postcss@8.4.32) + postcss-reduce-transforms: 5.1.0(postcss@8.4.32) + postcss-svgo: 5.1.0(postcss@8.4.32) + postcss-unique-selectors: 5.1.1(postcss@8.4.32) + dev: true + + /cssnano-utils@3.1.0(postcss@8.4.32): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + dev: true + + /cssnano@5.1.15(postcss@8.4.32): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.32) + lilconfig: 2.1.0 + postcss: 8.4.32 + yaml: 1.10.2 + dev: true + + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + + /cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: true + + /cssom@0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + dev: true + + /cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + dev: true + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: true + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true + + /data-urls@2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + dev: true + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: true + + /dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: true + + /deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.2 + is-arguments: 1.1.1 + is-array-buffer: 3.0.2 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + dependencies: + execa: 5.1.1 + dev: true + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + + /depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: true + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: true + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: true + + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + dev: true + + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true + + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: true + + /detect-port-alt@1.1.6: + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} + hasBin: true + dependencies: + address: 1.2.2 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + dev: true + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /dns-equal@1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + dev: true + + /dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': 2.0.4 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dev: true + + /dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + dependencies: + utila: 0.4.0 + dev: true + + /dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + dev: true + + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: true + + /domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: true + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + + /domexception@2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead + dependencies: + webidl-conversions: 5.0.0 + dev: true + + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + + /domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: true + + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: true + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: true + + /dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dev: true + + /dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + dev: true + + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + dev: true + + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: true + + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: true + + /electron-to-chromium@1.4.614: + resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} + dev: true + + /emittery@0.10.2: + resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} + engines: {node: '>=12'} + dev: true + + /emittery@0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} + dev: true + + /emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: true + + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + dev: true + + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + 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.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + 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.13 + dev: true + + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true + + /es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.2 + is-set: 2.0.2 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: true + + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: true + + /es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + dev: true + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + + /eslint-config-prettier@9.1.0(eslint@8.56.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5): + resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} + engines: {node: '>=14.0.0'} + peerDependencies: + eslint: ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + babel-preset-react-app: 10.0.1 + confusing-browser-globals: 1.0.11 + eslint: 8.56.0 + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-react: 7.33.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + eslint-plugin-testing-library: 5.11.1(eslint@8.56.0)(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true + + /eslint-config-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + eslint: 8.56.0 + eslint-plugin-turbo: 1.11.2(eslint@8.56.0) + dev: true + + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + dependencies: + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.56.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + escape-string-regexp: 1.0.5 + eslint: 8.56.0 + ignore: 5.3.0 + dev: true + + /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0): + resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@babel/plugin-syntax-flow': ^7.14.5 + '@babel/plugin-transform-react-jsx': ^7.14.9 + eslint: ^8.1.0 + dependencies: + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + eslint: 8.56.0 + lodash: 4.17.21 + string-natural-compare: 3.0.1 + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5): + resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5) + '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + eslint: 8.56.0 + jest: 27.5.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.6 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.15 + eslint: 8.56.0 + hasown: 2.0.0 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + dev: true + + /eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} + dev: true + + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0): + resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + peerDependencies: + eslint: '>=7' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + dependencies: + eslint: 8.56.0 + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + dev: true + + /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-plugin-react@7.33.2(eslint@8.56.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.56.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: true + + /eslint-plugin-testing-library@5.11.1(eslint@8.56.0)(typescript@4.9.5): + resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + dev: true + + /eslint-plugin-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + dotenv: 16.0.3 + eslint: 8.56.0 + dev: true + + /eslint-plugin-unicorn@48.0.1(eslint@8.56.0): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.56.0 + esquery: 1.5.0 + indent-string: 4.0.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.27 + regjsparser: 0.10.0 + semver: 7.5.4 + strip-indent: 3.0.0 + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint-webpack-plugin@3.2.0(eslint@8.56.0)(webpack@5.89.0): + resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + webpack: ^5.0.0 + dependencies: + '@types/eslint': 8.44.9 + eslint: 8.56.0 + jest-worker: 28.1.3 + micromatch: 4.0.5 + normalize-path: 3.0.0 + schema-utils: 4.2.0 + webpack: 5.89.0 + dev: true + + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + dev: true + + /esprima@1.2.2: + resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: true + + /event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + dev: true + + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: true + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: true + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + 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 + dev: true + + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true + + /expect@27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-get-type: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + dev: true + + /express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: 0.7.4 + dev: true + + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: true + + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /file-loader@6.2.0(webpack@5.89.0): + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.89.0 + dev: true + + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + + /filesize@8.0.7: + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /follow-redirects@1.15.3: + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: true + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0): + resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@babel/code-frame': 7.23.5 + '@types/json-schema': 7.0.15 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 6.0.0 + deepmerge: 4.3.1 + eslint: 8.56.0 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.5.3 + minimatch: 3.1.2 + schema-utils: 2.7.0 + semver: 7.5.4 + tapable: 1.1.3 + typescript: 4.9.5 + webpack: 5.89.0 + dev: true + + /form-data@3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: true + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: true + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: true + + /from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + dev: true + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-monkey@1.0.5: + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /fx@31.0.0: + resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==} + hasBin: true + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + dev: true + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + + /get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: true + + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.3 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: true + + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: true + + /handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: true + + /harmony-reflect@1.6.2: + resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /hoopy@0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} + engines: {node: '>= 6.0.0'} + dev: true + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.8 + wbuf: 1.7.3 + dev: true + + /html-encoding-sniffer@2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + dependencies: + whatwg-encoding: 1.0.5 + dev: true + + /html-entities@2.4.0: + resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} + dev: true + + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.26.0 + dev: true + + /html-webpack-plugin@5.5.4(webpack@5.89.0): + resolution: {integrity: sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==} + engines: {node: '>=10.13.0'} + peerDependencies: + webpack: ^5.20.0 + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + webpack: 5.89.0 + dev: true + + /htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + dev: true + + /http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: true + + /http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: true + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: true + + /http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + dev: true + + /http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /http-proxy-middleware@2.0.6(@types/express@4.17.21): + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + dependencies: + '@types/express': 4.17.21 + '@types/http-proxy': 1.17.14 + http-proxy: 1.18.1 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.5 + transitivePeerDependencies: + - debug + dev: true + + /http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.3 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + dev: true + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /icss-utils@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 + dev: true + + /idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + dev: true + + /identity-obj-proxy@3.0.0: + resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} + engines: {node: '>=4'} + dependencies: + harmony-reflect: 1.6.2 + dev: true + + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + dev: true + + /immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: true + + /ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + engines: {node: '>= 10'} + dev: true + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + + /is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + dependencies: + get-east-asian-width: 1.2.0 + dev: true + + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: true + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-root@2.1.0: + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} + dev: true + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + dev: true + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: true + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.23.6 + '@babel/parser': 7.23.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: true + + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + + /jest-changed-files@27.5.1: + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + execa: 5.1.1 + throat: 6.0.2 + dev: true + + /jest-circus@27.5.1: + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-cli@27.5.1: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.1.0 + jest-config: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + prompts: 2.4.2 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /jest-config@27.5.1: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@jest/test-sequencer': 27.5.1 + '@jest/types': 27.5.1 + babel-jest: 27.5.1(@babel/core@7.23.6) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-get-type: 27.5.1 + jest-jasmine2: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runner: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 27.5.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + + /jest-diff@27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: true + + /jest-docblock@27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-each@27.5.1: + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + jest-get-type: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + dev: true + + /jest-environment-jsdom@27.5.1: + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + jest-mock: 27.5.1 + jest-util: 27.5.1 + jsdom: 16.7.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + + /jest-environment-node@27.5.1: + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + jest-mock: 27.5.1 + jest-util: 27.5.1 + dev: true + + /jest-get-type@27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /jest-haste-map@27.5.1: + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.10.5 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 27.5.1 + jest-serializer: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /jest-jasmine2@27.5.1: + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + co: 4.6.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-leak-detector@27.5.1: + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: true + + /jest-matcher-utils@27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: true + + /jest-message-util@27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 27.5.1 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-message-util@28.1.3: + resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 28.1.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 28.1.3 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-mock@27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + dev: true + + /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 27.5.1 + dev: true + + /jest-regex-util@27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /jest-regex-util@28.0.2: + resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + + /jest-resolve-dependencies@27.5.1: + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-regex-util: 27.5.1 + jest-snapshot: 27.5.1 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-resolve@27.5.1: + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) + jest-util: 27.5.1 + jest-validate: 27.5.1 + resolve: 1.22.8 + resolve.exports: 1.1.1 + slash: 3.0.0 + dev: true + + /jest-runner@27.5.1: + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + emittery: 0.8.1 + graceful-fs: 4.2.11 + jest-docblock: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-haste-map: 27.5.1 + jest-leak-detector: 27.5.1 + jest-message-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runtime: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + source-map-support: 0.5.21 + throat: 6.0.2 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + + /jest-runtime@27.5.1: + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/globals': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + execa: 5.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-serializer@27.5.1: + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/node': 20.10.5 + graceful-fs: 4.2.11 + dev: true + + /jest-snapshot@27.5.1: + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.23.6 + '@babel/generator': 7.23.6 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__traverse': 7.20.4 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + chalk: 4.1.2 + expect: 27.5.1 + graceful-fs: 4.2.11 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + jest-haste-map: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + natural-compare: 1.4.0 + pretty-format: 27.5.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-util@27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-util@28.1.3: + resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 20.10.5 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-validate@27.5.1: + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 27.5.1 + leven: 3.1.0 + pretty-format: 27.5.1 + dev: true + + /jest-watch-typeahead@1.1.0(jest@27.5.1): + resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + jest: ^27.0.0 || ^28.0.0 + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest: 27.5.1 + jest-regex-util: 28.0.2 + jest-watcher: 28.1.3 + slash: 4.0.0 + string-length: 5.0.1 + strip-ansi: 7.1.0 + dev: true + + /jest-watcher@27.5.1: + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.10.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest-util: 27.5.1 + string-length: 4.0.2 + dev: true + + /jest-watcher@28.1.3: + resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 20.10.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.10.2 + jest-util: 28.1.3 + string-length: 4.0.2 + dev: true + + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.10.5 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.10.5 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jest-worker@28.1.3: + resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@types/node': 20.10.5 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jest@27.5.1: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + import-local: 3.1.0 + jest-cli: 27.5.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true + + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsdom@16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.11.2 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.4.3 + domexception: 2.0.1 + escodegen: 2.1.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.9 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonpath@1.1.1: + resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 + esprima: 1.2.2 + static-eval: 2.0.2 + underscore: 1.12.1 dev: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} dependencies: - estraverse: 5.3.0 + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.1.7 dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 dev: true - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} dev: true - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} dev: true - /event-stream@3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} - dependencies: - duplexer: 0.1.2 - from: 0.1.7 - map-stream: 0.1.0 - pause-stream: 0.0.11 - split: 0.3.3 - stream-combiner: 0.0.4 - through: 2.3.8 + /klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} dev: true - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: true - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 + language-subtag-registry: 0.3.22 dev: true - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + /launch-editor@2.6.1: + resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - 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 + picocolors: 1.0.0 + shell-quote: 1.8.1 dev: true - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} dev: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + /levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 dev: true - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 + prelude-ls: 1.2.1 + type-check: 0.4.0 dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} dev: true - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} dev: true - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /lint-staged@15.2.0: + resolution: {integrity: sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==} + engines: {node: '>=18.12.0'} + hasBin: true dependencies: - reusify: 1.0.4 + chalk: 5.3.0 + commander: 11.1.0 + debug: 4.3.4 + execa: 8.0.1 + lilconfig: 3.0.0 + listr2: 8.0.0 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.4 + transitivePeerDependencies: + - supports-color dev: true - /fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} + /listr2@8.0.0: + resolution: {integrity: sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==} + engines: {node: '>=18.0.0'} dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.2.1 + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.0.0 + rfdc: 1.3.0 + wrap-ansi: 9.0.0 dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true + + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} dependencies: - flat-cache: 3.2.0 + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + /loader-utils@3.2.1: + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} + dev: true + + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} dependencies: - to-regex-range: 5.0.1 + p-locate: 3.0.0 + path-exists: 3.0.0 dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 + p-locate: 4.1.0 dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 + p-locate: 5.0.0 dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - dependencies: - fetch-blob: 3.2.0 + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true - /from@0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + /log-update@6.0.0: + resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + engines: {node: '>=18'} dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + ansi-escapes: 6.2.0 + cli-cursor: 4.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 dev: true - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 dev: true - optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.2 dev: true - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - functions-have-names: 1.2.3 + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 dev: true - /fx@31.0.0: - resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==} + /lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true dev: true - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 dev: true - /get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} - engines: {node: '>=18'} + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 dev: true - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 + semver: 7.5.4 dev: true - /get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 dev: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + /map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} dev: true - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + /mdn-data@2.0.4: + resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} dev: true - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: true + + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} dependencies: - resolve-pkg-maps: 1.0.0 + fs-monkey: 1.0.5 dev: true - /git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: false + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: true - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + braces: 3.0.2 + picomatch: 2.3.1 dev: true - /glob@7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.3 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + mime-db: 1.52.0 dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} + hasBin: true dev: true - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} dev: true - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /mini-css-extract-plugin@2.7.6(webpack@5.89.0): + resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 4.0.0 + schema-utils: 4.2.0 + webpack: 5.89.0 dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.2 + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 dev: true - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 dev: true - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 dev: true - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - dependencies: - get-intrinsic: 1.2.2 + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + /multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true dependencies: - has-symbols: 1.0.3 + dns-packet: 5.6.1 + thunky: 1.1.0 dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: - function-bind: 1.1.2 + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 dev: true - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} dev: true - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + lower-case: 2.0.2 + tslib: 2.6.2 dev: true - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} dev: true - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + /node-fetch@3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - once: 1.4.0 - wrappy: 1.0.2 + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 dev: true - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} dev: true - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} dev: true - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + path-key: 3.1.1 dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + path-key: 4.0.0 dev: true - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + /nth-check@1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} dependencies: - builtin-modules: 3.3.0 - dev: true - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} + boolbase: 1.0.0 dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: - hasown: 2.0.0 + boolbase: 1.0.0 dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 + /nwsapi@2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: true - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} dev: true - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + /object-is@1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 + define-properties: 1.2.1 dev: true - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} dev: true - /is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} dependencies: - get-east-asian-width: 1.2.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 dev: true - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} dependencies: - is-extglob: 2.1.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true + /object.getownpropertydescriptors@2.1.7: + resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} + engines: {node: '>= 0.8'} dependencies: - is-docker: 3.0.0 + array.prototype.reduce: 1.0.6 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + safe-array-concat: 1.0.1 dev: true - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + /obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: true - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 dev: true - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} dev: true - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + wrappy: 1.0.2 dev: true - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} dependencies: - call-bind: 1.0.5 + mimic-fn: 4.0.0 dev: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 dev: true - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 dev: true - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + /optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} dependencies: - has-tostringtag: 1.0.0 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} dependencies: - has-symbols: 1.0.3 + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: - which-typed-array: 1.1.13 + p-try: 2.2.0 dev: true - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 dev: true - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} dependencies: - call-bind: 1.0.5 + p-limit: 2.3.0 dev: true - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + p-limit: 3.1.0 dev: true - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + /p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} dependencies: - is-docker: 2.2.1 + '@types/retry': 0.12.0 + retry: 0.13.1 dev: true - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} dev: true - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 dev: true - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 + callsites: 3.1.0 dev: true - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 dev: true - /jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} dev: true - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 dev: true - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} - hasBin: true dev: true - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} dev: true - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} dev: true - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} dev: true - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} dev: true - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - dependencies: - minimist: 1.2.8 + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} dev: true - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + /path@0.12.7: + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.1.7 + process: 0.11.10 + util: 0.10.4 dev: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + /pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} dependencies: - json-buffer: 3.0.1 - dev: true - - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + through: 2.3.8 dev: true - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - dependencies: - language-subtag-registry: 0.3.22 + /performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 + /picocolors@0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} dev: true - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true dev: true - /lint-staged@15.2.0: - resolution: {integrity: sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==} - engines: {node: '>=18.12.0'} - hasBin: true - dependencies: - chalk: 5.3.0 - commander: 11.1.0 - debug: 4.3.4 - execa: 8.0.1 - lilconfig: 3.0.0 - listr2: 8.0.0 - micromatch: 4.0.5 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.3.4 - transitivePeerDependencies: - - supports-color + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} dev: true - /listr2@8.0.0: - resolution: {integrity: sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==} - engines: {node: '>=18.0.0'} - dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.0.0 - rfdc: 1.3.0 - wrap-ansi: 9.0.0 + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: - p-locate: 4.1.0 + find-up: 4.1.0 dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + /pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} dependencies: - p-locate: 5.0.0 + find-up: 3.0.0 dev: true - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} dev: true - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.32): + resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /log-update@6.0.0: - resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} - engines: {node: '>=18'} + /postcss-browser-comments@4.0.0(browserslist@4.22.2)(postcss@8.4.32): + resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} + engines: {node: '>=8'} + peerDependencies: + browserslist: '>=4' + postcss: '>=8' dependencies: - ansi-escapes: 6.2.0 - cli-cursor: 4.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 + browserslist: 4.22.2 + postcss: 8.4.32 dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + /postcss-calc@8.2.4(postcss@8.4.32): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 dependencies: - js-tokens: 4.0.0 + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: true - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + /postcss-clamp@4.1.0(postcss@8.4.32): + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 dependencies: - yallist: 3.1.1 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + /postcss-color-functional-notation@4.2.4(postcss@8.4.32): + resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - yallist: 4.0.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /map-stream@0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + /postcss-color-hex-alpha@8.0.4(postcss@8.4.32): + resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + /postcss-color-rebeccapurple@7.1.1(postcss@8.4.32): + resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + /postcss-colormin@5.3.1(postcss@8.4.32): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + /postcss-convert-values@5.1.3(postcss@8.4.32): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - braces: 3.0.2 - picomatch: 2.3.1 + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + /postcss-custom-media@8.0.2(postcss@8.4.32): + resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} + /postcss-custom-properties@12.1.11(postcss@8.4.32): + resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} + /postcss-custom-selectors@6.0.3(postcss@8.4.32): + resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + /postcss-dir-pseudo-class@6.0.5(postcss@8.4.32): + resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - brace-expansion: 1.1.11 + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + /postcss-discard-comments@5.1.2(postcss@8.4.32): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 dev: true - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + /postcss-discard-duplicates@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 dev: true - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /postcss-discard-empty@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 dev: true - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + /postcss-discard-overridden@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 + postcss: 8.4.32 dev: true - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + /postcss-double-position-gradients@3.1.2(postcss@8.4.32): + resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /next@14.0.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} - engines: {node: '>=18.17.0'} - hasBin: true + /postcss-env-function@4.0.6(postcss@8.4.32): + resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} + engines: {node: ^12 || ^14 || >=16} peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true + postcss: ^8.4 dependencies: - '@next/env': 14.0.4 - '@swc/helpers': 0.5.2 - busboy: 1.6.0 - caniuse-lite: 1.0.30001570 - graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) - watchpack: 2.4.0 - optionalDependencies: - '@next/swc-darwin-arm64': 14.0.4 - '@next/swc-darwin-x64': 14.0.4 - '@next/swc-linux-arm64-gnu': 14.0.4 - '@next/swc-linux-arm64-musl': 14.0.4 - '@next/swc-linux-x64-gnu': 14.0.4 - '@next/swc-linux-x64-musl': 14.0.4 - '@next/swc-win32-arm64-msvc': 14.0.4 - '@next/swc-win32-ia32-msvc': 14.0.4 - '@next/swc-win32-x64-msvc': 14.0.4 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /postcss-flexbugs-fixes@5.0.2(postcss@8.4.32): + resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} + peerDependencies: + postcss: ^8.1.4 dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 + postcss: 8.4.32 dev: true - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /postcss-focus-visible@6.0.4(postcss@8.4.32): + resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + /postcss-focus-within@5.0.4(postcss@8.4.32): + resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + /postcss-font-variant@5.0.0(postcss@8.4.32): + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.32 dev: true - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} + /postcss-gap-properties@3.0.5(postcss@8.4.32): + resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + /postcss-image-set-function@4.0.7(postcss@8.4.32): + resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - path-key: 3.1.1 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /postcss-import@15.1.0(postcss@8.4.32): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 dependencies: - path-key: 4.0.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + /postcss-initial@4.0.1(postcss@8.4.32): + resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.32 dev: true - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + /postcss-js@4.0.1(postcss@8.4.32): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.32 dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /postcss-lab-function@4.2.1(postcss@8.4.32): + resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + /postcss-load-config@4.0.2(postcss@8.4.32): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.0.0 + postcss: 8.4.32 + yaml: 2.3.4 dev: true - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + /postcss-loader@6.2.1(postcss@8.4.32)(webpack@5.89.0): + resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 + cosmiconfig: 7.1.0 + klona: 2.0.6 + postcss: 8.4.32 + semver: 7.5.4 + webpack: 5.89.0 dev: true - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} + /postcss-logical@5.0.4(postcss@8.4.32): + resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 + postcss: 8.4.32 dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} + /postcss-media-minmax@5.0.0(postcss@8.4.32): + resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.1.0 dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 + postcss: 8.4.32 dev: true - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + /postcss-merge-longhand@5.1.7(postcss@8.4.32): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.32) dev: true - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + /postcss-merge-rules@5.1.4(postcss@8.4.32): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.3 + browserslist: 4.22.2 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} + /postcss-minify-font-values@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + /postcss-minify-gradients@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - wrappy: 1.0.2 + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + /postcss-minify-params@5.1.4(postcss@8.4.32): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - mimic-fn: 2.1.0 + browserslist: 4.22.2 + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + /postcss-minify-selectors@5.2.1(postcss@8.4.32): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - mimic-fn: 4.0.0 + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} + /postcss-modules-extract-imports@3.0.0(postcss@8.4.32): + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 + postcss: 8.4.32 dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + /postcss-modules-local-by-default@4.0.3(postcss@8.4.32): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 + icss-utils: 5.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 dev: true - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + /postcss-modules-scope@3.0.0(postcss@8.4.32): + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - p-try: 2.2.0 + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + /postcss-modules-values@4.0.0(postcss@8.4.32): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - yocto-queue: 0.1.0 + icss-utils: 5.1.0(postcss@8.4.32) + postcss: 8.4.32 dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + /postcss-nested@6.0.1(postcss@8.4.32): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 dependencies: - p-limit: 2.3.0 + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + /postcss-nesting@10.2.0(postcss@8.4.32): + resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - p-limit: 3.1.0 + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + /postcss-normalize-charset@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + /postcss-normalize-display-values@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - callsites: 3.1.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + /postcss-normalize-positions@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - '@babel/code-frame': 7.23.5 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + /postcss-normalize-string@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} + /postcss-normalize-unicode@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + /postcss-normalize-url@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + /postcss-normalize-whitespace@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /path@0.12.7: - resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} + /postcss-normalize@10.0.1(browserslist@4.22.2)(postcss@8.4.32): + resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} + engines: {node: '>= 12'} + peerDependencies: + browserslist: '>= 4' + postcss: '>= 8' dependencies: - process: 0.11.10 - util: 0.10.4 + '@csstools/normalize.css': 12.0.0 + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-browser-comments: 4.0.0(browserslist@4.22.2)(postcss@8.4.32) + sanitize.css: 13.0.0 dev: true - /pause-stream@0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + /postcss-opacity-percentage@1.1.3(postcss@8.4.32): + resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 dependencies: - through: 2.3.8 + postcss: 8.4.32 dev: true - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /postcss-ordered-values@5.1.3(postcss@8.4.32): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.32) + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + dev: true - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + /postcss-overflow-shorthand@3.0.4(postcss@8.4.32): + resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true + /postcss-page-break@3.0.4(postcss@8.4.32): + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + dependencies: + postcss: 8.4.32 dev: true - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + /postcss-place@7.0.5(postcss@8.4.32): + resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + /postcss-preset-env@7.8.3(postcss@8.4.32): + resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.32) + '@csstools/postcss-color-function': 1.1.1(postcss@8.4.32) + '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.32) + '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.32) + '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.32) + '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.32) + '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.32) + '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.32) + '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.32) + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) + '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.32) + '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.32) + '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.32) + '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.32) + autoprefixer: 10.4.16(postcss@8.4.32) + browserslist: 4.22.2 + css-blank-pseudo: 3.0.3(postcss@8.4.32) + css-has-pseudo: 3.0.4(postcss@8.4.32) + css-prefers-color-scheme: 6.0.3(postcss@8.4.32) + cssdb: 7.9.1 + postcss: 8.4.32 + postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.32) + postcss-clamp: 4.1.0(postcss@8.4.32) + postcss-color-functional-notation: 4.2.4(postcss@8.4.32) + postcss-color-hex-alpha: 8.0.4(postcss@8.4.32) + postcss-color-rebeccapurple: 7.1.1(postcss@8.4.32) + postcss-custom-media: 8.0.2(postcss@8.4.32) + postcss-custom-properties: 12.1.11(postcss@8.4.32) + postcss-custom-selectors: 6.0.3(postcss@8.4.32) + postcss-dir-pseudo-class: 6.0.5(postcss@8.4.32) + postcss-double-position-gradients: 3.1.2(postcss@8.4.32) + postcss-env-function: 4.0.6(postcss@8.4.32) + postcss-focus-visible: 6.0.4(postcss@8.4.32) + postcss-focus-within: 5.0.4(postcss@8.4.32) + postcss-font-variant: 5.0.0(postcss@8.4.32) + postcss-gap-properties: 3.0.5(postcss@8.4.32) + postcss-image-set-function: 4.0.7(postcss@8.4.32) + postcss-initial: 4.0.1(postcss@8.4.32) + postcss-lab-function: 4.2.1(postcss@8.4.32) + postcss-logical: 5.0.4(postcss@8.4.32) + postcss-media-minmax: 5.0.0(postcss@8.4.32) + postcss-nesting: 10.2.0(postcss@8.4.32) + postcss-opacity-percentage: 1.1.3(postcss@8.4.32) + postcss-overflow-shorthand: 3.0.4(postcss@8.4.32) + postcss-page-break: 3.0.4(postcss@8.4.32) + postcss-place: 7.0.5(postcss@8.4.32) + postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.32) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.32) + postcss-selector-not: 6.0.1(postcss@8.4.32) + postcss-value-parser: 4.2.0 dev: true - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} + /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.32): + resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 dev: true - /postcss-import@15.1.0(postcss@8.4.32): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} + /postcss-reduce-initial@5.1.2(postcss@8.4.32): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.0.0 + postcss: ^8.2.15 dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 postcss: 8.4.32 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 dev: true - /postcss-js@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} + /postcss-reduce-transforms@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.4.21 + postcss: ^8.2.15 dependencies: - camelcase-css: 2.0.1 postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /postcss-load-config@4.0.2(postcss@8.4.32): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} + /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.32): + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + postcss: ^8.0.3 dependencies: - lilconfig: 3.0.0 postcss: 8.4.32 - yaml: 2.3.4 dev: true - /postcss-nested@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} + /postcss-selector-not@6.0.1(postcss@8.4.32): + resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} + engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2.14 + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.0.13 @@ -3622,18 +9551,38 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-svgo@5.1.0(postcss@8.4.32): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: true + + /postcss-unique-selectors@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: true + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + /postcss@7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: false + picocolors: 0.2.1 + source-map: 0.6.1 + dev: true /postcss@8.4.32: resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} @@ -3644,6 +9593,11 @@ packages: source-map-js: 1.0.2 dev: true + /prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3662,10 +9616,45 @@ packages: synckit: 0.8.6 dev: true - /prettier@3.1.1: - resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} - engines: {node: '>=14'} - hasBin: true + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: true + + /pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} + dependencies: + lodash: 4.17.21 + renderkid: 3.0.0 + dev: true + + /pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: true + + /pretty-format@28.1.3: + resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true /process@0.11.10: @@ -3673,6 +9662,20 @@ packages: engines: {node: '>= 0.6.0'} dev: true + /promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: true + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -3681,6 +9684,14 @@ packages: react-is: 16.13.1 dev: true + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: true + /ps-tree@1.2.0: resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} engines: {node: '>= 0.10'} @@ -3689,15 +9700,116 @@ packages: event-stream: 3.3.4 dev: true + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true + /q@1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + dev: true + + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: true + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + dependencies: + performance-now: 2.1.0 + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: true + + /raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: true + + /react-app-polyfill@3.0.0: + resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} + engines: {node: '>=14'} + dependencies: + core-js: 3.34.0 + object-assign: 4.1.1 + promise: 8.3.0 + raf: 3.4.1 + regenerator-runtime: 0.13.11 + whatwg-fetch: 3.6.20 + dev: true + + /react-dev-utils@12.0.1(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0): + resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=2.7' + webpack: '>=4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/code-frame': 7.23.5 + address: 1.2.2 + browserslist: 4.22.2 + chalk: 4.1.2 + cross-spawn: 7.0.3 + detect-port-alt: 1.1.6 + escape-string-regexp: 4.0.0 + filesize: 8.0.7 + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0) + global-modules: 2.0.0 + globby: 11.1.0 + gzip-size: 6.0.0 + immer: 9.0.21 + is-root: 2.1.0 + loader-utils: 3.2.1 + open: 8.4.2 + pkg-up: 3.1.0 + prompts: 2.4.2 + react-error-overlay: 6.0.11 + recursive-readdir: 2.2.3 + shell-quote: 1.8.1 + strip-ansi: 6.0.1 + text-table: 0.2.0 + typescript: 4.9.5 + webpack: 5.89.0 + transitivePeerDependencies: + - eslint + - supports-color + - vue-template-compiler + dev: true + /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -3706,18 +9818,35 @@ packages: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 - dev: false + dev: true + + /react-error-overlay@6.0.11: + resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} + dev: true /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: true + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + + /react-refresh@0.11.0: + resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} + engines: {node: '>=0.10.0'} + dev: true + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 - dev: false + dev: true /read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -3744,6 +9873,27 @@ packages: type-fest: 0.6.0 dev: true + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3751,6 +9901,21 @@ packages: picomatch: 2.3.1 dev: true + /recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + dependencies: + minimatch: 3.1.2 + dev: true + + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: true + /reflect-metadata@0.2.1: resolution: {integrity: sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==} dev: false @@ -3767,10 +9932,35 @@ packages: which-builtin-type: 1.1.3 dev: true + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.6 + dev: true + + /regex-parser@2.2.11: + resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} + dev: true + /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true @@ -3785,6 +9975,18 @@ packages: set-function-name: 2.0.1 dev: true + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: true + /regjsparser@0.10.0: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} hasBin: true @@ -3792,15 +9994,87 @@ packages: jsesc: 0.5.0 dev: true + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: true + + /renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 6.0.1 + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: true + + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + /resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true + /resolve-url-loader@4.0.0: + resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} + engines: {node: '>=8.9'} + peerDependencies: + rework: 1.0.1 + rework-visit: 1.0.0 + peerDependenciesMeta: + rework: + optional: true + rework-visit: + optional: true + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 7.0.39 + source-map: 0.6.1 + dev: true + + /resolve.exports@1.1.1: + resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + engines: {node: '>=10'} + dev: true + /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: @@ -3834,6 +10108,11 @@ packages: signal-exit: 3.0.7 dev: true + /retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: true + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -3850,6 +10129,27 @@ packages: glob: 7.2.3 dev: true + /rollup-plugin-terser@7.0.2(rollup@2.79.1): + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.23.5 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.26.0 + dev: true + + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + /run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} engines: {node: '>=12'} @@ -3873,6 +10173,14 @@ packages: isarray: 2.0.5 dev: true + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -3881,11 +10189,103 @@ packages: is-regex: 1.1.4 dev: true + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + + /sanitize.css@13.0.0: + resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} + dev: true + + /sass-loader@12.6.0(webpack@5.89.0): + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + klona: 2.0.6 + neo-async: 2.6.2 + webpack: 5.89.0 + dev: true + + /sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true + + /saxes@5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + dependencies: + xmlchars: 2.2.0 + dev: true + /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 - dev: false + dev: true + + /schema-utils@2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) + dev: true + + /select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: true + + /selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + dependencies: + '@types/node-forge': 1.3.10 + node-forge: 1.3.1 + dev: true /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} @@ -3905,6 +10305,66 @@ packages: lru-cache: 6.0.0 dev: true + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: true + /set-function-length@1.1.1: resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} engines: {node: '>= 0.4'} @@ -3924,6 +10384,14 @@ packages: has-property-descriptors: 1.0.1 dev: true + /setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: true + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3936,6 +10404,10 @@ packages: engines: {node: '>=8'} dev: true + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -3953,6 +10425,10 @@ packages: engines: {node: '>=14'} dev: true + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -3979,6 +10455,14 @@ packages: is-fullwidth-code-point: 5.0.0 dev: true + /sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + dev: true + /sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} dev: true @@ -3996,9 +10480,55 @@ packages: sort-object-keys: 1.1.3 dev: true + /source-list-map@2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: true + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + dev: true + + /source-map-loader@3.0.2(webpack@5.89.0): + resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + abab: 2.0.6 + iconv-lite: 0.6.3 + source-map-js: 1.0.2 + webpack: 5.89.0 + dev: true + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: true + + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -4022,28 +10552,121 @@ packages: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true + /spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.4 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.2 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.4 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /split@0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} dependencies: through: 2.3.8 dev: true + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + + /stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: true + + /static-eval@2.0.2: + resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} + dependencies: + escodegen: 1.14.3 + dev: true + + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: true + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: true + + /stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.6 + dev: true + /stream-combiner@0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} dependencies: duplexer: 0.1.2 dev: true - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false - /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} dev: true + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: true + + /string-length@5.0.1: + resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} + engines: {node: '>=12.20'} + dependencies: + char-regex: 2.0.1 + strip-ansi: 7.1.0 + dev: true + + /string-natural-compare@3.0.1: + resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + /string-width@7.0.0: resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} engines: {node: '>=18'} @@ -4092,6 +10715,27 @@ packages: es-abstract: 1.22.3 dev: true + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4111,6 +10755,16 @@ packages: engines: {node: '>=4'} dev: true + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + + /strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + dev: true + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -4133,22 +10787,25 @@ packages: engines: {node: '>=8'} dev: true - /styled-jsx@5.1.1(react@18.2.0): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} + /style-loader@3.3.3(webpack@5.89.0): + resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} + engines: {node: '>= 12.13.0'} peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true + webpack: ^5.0.0 dependencies: - client-only: 0.0.1 - react: 18.2.0 - dev: false + webpack: 5.89.0 + dev: true + + /stylehacks@5.1.1(postcss@8.4.32): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + dev: true /sucrase@3.34.0: resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} @@ -4178,11 +10835,69 @@ packages: has-flag: 4.0.0 dev: true + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true + /svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + dev: true + + /svgo@1.3.2: + resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} + engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true + dependencies: + chalk: 2.4.2 + coa: 2.0.2 + css-select: 2.1.0 + css-select-base-adapter: 0.1.1 + css-tree: 1.0.0-alpha.37 + csso: 4.2.0 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + object.values: 1.1.7 + sax: 1.2.4 + stable: 0.1.8 + unquote: 1.1.1 + util.promisify: 1.0.1 + dev: true + + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: true + + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true + /synckit@0.8.6: resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -4222,11 +10937,83 @@ packages: - ts-node dev: true + /tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: true + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} dev: true + /temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + dev: true + + /tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: true + + /terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + dev: true + + /terser-webpack-plugin@5.3.9(webpack@5.89.0): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.26.0 + webpack: 5.89.0 + dev: true + + /terser@5.26.0: + resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.11.2 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -4244,15 +11031,27 @@ packages: any-promise: 1.3.0 dev: true + /throat@6.0.2: + resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} + dev: true + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true + /thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: true + /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} dev: true + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -4265,6 +11064,38 @@ packages: is-number: 7.0.0 dev: true + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: true + + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: true + + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.1 + dev: true + + /tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + dependencies: + punycode: 2.3.1 + dev: true + + /tryer@1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} + dev: true + /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -4292,6 +11123,17 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + + /tsutils@3.21.0(typescript@4.9.5): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.9.5 + dev: true /tsutils@3.21.0(typescript@5.3.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -4370,6 +11212,13 @@ packages: turbo-windows-arm64: 1.11.2 dev: true + /type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: true + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -4377,11 +11226,26 @@ packages: prelude-ls: 1.2.1 dev: true + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -4397,6 +11261,14 @@ packages: engines: {node: '>=14.16'} dev: true + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: true + /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -4435,23 +11307,74 @@ packages: is-typed-array: 1.1.12 dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: true + + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /underscore@1.12.1: + resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} dev: true - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true + + /unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} dependencies: - call-bind: 1.0.5 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + crypto-random-string: 2.0.0 dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} dev: true /universalify@2.0.1: @@ -4459,11 +11382,25 @@ packages: engines: {node: '>= 10.0.0'} dev: true + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: true + + /unquote@1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + dev: true + /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} dev: true + /upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: true + /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -4481,16 +11418,55 @@ packages: punycode: 2.3.1 dev: true + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: true + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true + /util.promisify@1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.3 + has-symbols: 1.0.3 + object.getownpropertydescriptors: 2.1.7 + dev: true + /util@0.10.4: resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} dependencies: inherits: 2.0.3 dev: true + /utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + dev: true + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: true + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: true + + /v8-to-istanbul@8.1.1: + resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + engines: {node: '>=10.12.0'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 1.9.0 + source-map: 0.7.4 + dev: true + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -4498,24 +11474,254 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: true + + /w3c-hr-time@1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + dependencies: + browser-process-hrtime: 1.0.0 + dev: true + + /w3c-xmlserializer@2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + dependencies: + xml-name-validator: 3.0.0 + dev: true + + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: true + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: false + dev: true + + /wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: true /web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} dev: true + /web-vitals@2.1.4: + resolution: {integrity: sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==} + dev: true + + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true + + /webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + dev: true + + /webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + dev: true + + /webpack-dev-middleware@5.3.3(webpack@5.89.0): + resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.2.0 + webpack: 5.89.0 + dev: true + + /webpack-dev-server@4.15.1(webpack@5.89.0): + resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.5 + '@types/sockjs': 0.3.36 + '@types/ws': 8.5.10 + ansi-html-community: 0.0.8 + bonjour-service: 1.1.1 + chokidar: 3.5.3 + colorette: 2.0.20 + compression: 1.7.4 + connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 + express: 4.18.2 + graceful-fs: 4.2.11 + html-entities: 2.4.0 + http-proxy-middleware: 2.0.6(@types/express@4.17.21) + ipaddr.js: 2.1.0 + launch-editor: 2.6.1 + open: 8.4.2 + p-retry: 4.6.2 + rimraf: 3.0.2 + schema-utils: 4.2.0 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack: 5.89.0 + webpack-dev-middleware: 5.3.3(webpack@5.89.0) + ws: 8.15.1 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: true + + /webpack-manifest-plugin@4.1.1(webpack@5.89.0): + resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} + engines: {node: '>=12.22.0'} + peerDependencies: + webpack: ^4.44.2 || ^5.47.0 + dependencies: + tapable: 2.2.1 + webpack: 5.89.0 + webpack-sources: 2.3.1 + dev: true + + /webpack-sources@1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + + /webpack-sources@2.3.1: + resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} + engines: {node: '>=10.13.0'} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack@5.89.0: + resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.11.2 + acorn-import-assertions: 1.9.0(acorn@8.11.2) + browserslist: 4.22.2 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.4.1 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9(webpack@5.89.0) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + /webpod@0.0.2: resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} hasBin: true dev: true + /websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: true + + /websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: true + + /whatwg-encoding@1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + dependencies: + iconv-lite: 0.4.24 + dev: true + + /whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + dev: true + + /whatwg-mimetype@2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + dev: true + + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: true + + /whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + dev: true + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -4564,6 +11770,13 @@ packages: has-tostringtag: 1.0.0 dev: true + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4580,6 +11793,184 @@ packages: isexe: 2.0.0 dev: true + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /workbox-background-sync@6.6.0: + resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + dev: true + + /workbox-broadcast-update@6.6.0: + resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-build@6.6.0: + resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) + '@babel/core': 7.23.6 + '@babel/preset-env': 7.23.6(@babel/core@7.23.6) + '@babel/runtime': 7.23.6 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.6)(rollup@2.79.1) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.12.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-terser: 7.0.2(rollup@2.79.1) + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 6.6.0 + workbox-broadcast-update: 6.6.0 + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-google-analytics: 6.6.0 + workbox-navigation-preload: 6.6.0 + workbox-precaching: 6.6.0 + workbox-range-requests: 6.6.0 + workbox-recipes: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + workbox-streams: 6.6.0 + workbox-sw: 6.6.0 + workbox-window: 6.6.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: true + + /workbox-cacheable-response@6.6.0: + resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} + deprecated: workbox-background-sync@6.6.0 + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-core@6.6.0: + resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} + dev: true + + /workbox-expiration@6.6.0: + resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + dev: true + + /workbox-google-analytics@6.6.0: + resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} + dependencies: + workbox-background-sync: 6.6.0 + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: true + + /workbox-navigation-preload@6.6.0: + resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-precaching@6.6.0: + resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: true + + /workbox-range-requests@6.6.0: + resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-recipes@6.6.0: + resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} + dependencies: + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-precaching: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: true + + /workbox-routing@6.6.0: + resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-strategies@6.6.0: + resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-streams@6.6.0: + resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + dev: true + + /workbox-sw@6.6.0: + resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} + dev: true + + /workbox-webpack-plugin@6.6.0(webpack@5.89.0): + resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: ^4.4.0 || ^5.9.0 + dependencies: + fast-json-stable-stringify: 2.1.0 + pretty-bytes: 5.6.0 + upath: 1.2.0 + webpack: 5.89.0 + webpack-sources: 1.4.3 + workbox-build: 6.6.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: true + + /workbox-window@6.6.0: + resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 6.6.0 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrap-ansi@9.0.0: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} @@ -4593,6 +11984,54 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: true + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /ws@8.15.1: + resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /xml-name-validator@3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + dev: true + + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true @@ -4601,11 +12040,34 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} dev: true + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/tsconfig.base.json b/tsconfig.base.json index a09de0214..7d362eaa5 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,7 +1,7 @@ { "extends": "@tsconfig/recommended/tsconfig.json", "compilerOptions": { - "target": "ES2023", + "target": "ES2022", "sourceMap": true, "declaration": true, "declarationMap": true, diff --git a/turbo.json b/turbo.json index c6f5af7fe..9547e99b9 100644 --- a/turbo.json +++ b/turbo.json @@ -1,15 +1,16 @@ { "$schema": "https://turborepo.org/schema.json", - "globalDependencies": ["turbo.json"], "pipeline": { "build": { "dependsOn": ["^build"], - "outputs": ["dist/**", "lib/**", "build/**"] + "outputs": ["lib/**"], + "inputs": ["src/**/*.ts"] }, "lint": { "dependsOn": ["^lint"] }, "dev": { + "dependsOn": ["build"], "cache": false, "persistent": true } From 5ac9ec16605ea085b9888e324738a25d564c2de7 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 19 Dec 2023 11:50:32 +0100 Subject: [PATCH 010/253] chore: fix ci --- .github/workflows/pull_request.yml | 7 +- apps/sample/.eslintrc.json | 2 +- pnpm-lock.yaml | 12065 +++++---------------------- 3 files changed, 2306 insertions(+), 9768 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 62abe3619..78b2753b2 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,7 +1,7 @@ -name: size +name: pull_request on: [pull_request] jobs: - size: + lint: runs-on: ubuntu-latest env: CI_JOB_NUMBER: 1 @@ -31,6 +31,3 @@ jobs: - name: Lint run: pnpm lint - - - name: Build - run: pnpm build \ No newline at end of file diff --git a/apps/sample/.eslintrc.json b/apps/sample/.eslintrc.json index 266c88fca..5ef96bdda 100644 --- a/apps/sample/.eslintrc.json +++ b/apps/sample/.eslintrc.json @@ -1,3 +1,3 @@ { - "extends": ["next/core-web-vitals", "@ledger-hq/dsdk"] + "extends": ["next/core-web-vitals", "@ledgerhq/dsdk"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5067149d9..33b45ce1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,187 +31,47 @@ importers: version: 7.2.3 apps/sample: + dependencies: + next: + specifier: 14.0.4 + version: 14.0.4(react-dom@18.2.0)(react@18.2.0) + react: + specifier: ^18 + version: 18.2.0 + react-dom: + specifier: ^18 + version: 18.2.0(react@18.2.0) devDependencies: - '@babel/core': - specifier: ^7.16.0 - version: 7.23.6 '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../../packages/eslint-config-dsdk - '@pmmmwh/react-refresh-webpack-plugin': - specifier: ^0.5.3 - version: 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0) - '@svgr/webpack': - specifier: ^5.5.0 - version: 5.5.0 - '@testing-library/jest-dom': - specifier: ^5.17.0 - version: 5.17.0 - '@testing-library/react': - specifier: ^13.4.0 - version: 13.4.0(react-dom@18.2.0)(react@18.2.0) - '@testing-library/user-event': - specifier: ^13.5.0 - version: 13.5.0(@testing-library/dom@9.3.3) - '@types/jest': - specifier: ^27.5.2 - version: 27.5.2 '@types/node': - specifier: ^16.18.68 - version: 16.18.68 + specifier: ^20 + version: 20.10.5 '@types/react': - specifier: ^18.2.45 + specifier: ^18 version: 18.2.45 '@types/react-dom': - specifier: ^18.2.17 + specifier: ^18 version: 18.2.18 - '@types/web-bluetooth': - specifier: ^0.0.20 - version: 0.0.20 - babel-jest: - specifier: ^27.4.2 - version: 27.5.1(@babel/core@7.23.6) - babel-loader: - specifier: ^8.2.3 - version: 8.3.0(@babel/core@7.23.6)(webpack@5.89.0) - babel-plugin-named-asset-import: - specifier: ^0.3.8 - version: 0.3.8(@babel/core@7.23.6) - babel-preset-react-app: + autoprefixer: specifier: ^10.0.1 - version: 10.0.1 - bfj: - specifier: ^7.0.2 - version: 7.1.0 - browserslist: - specifier: ^4.18.1 - version: 4.22.2 - camelcase: - specifier: ^6.2.1 - version: 6.3.0 - case-sensitive-paths-webpack-plugin: - specifier: ^2.4.0 - version: 2.4.0 - css-loader: - specifier: ^6.5.1 - version: 6.8.1(webpack@5.89.0) - css-minimizer-webpack-plugin: - specifier: ^3.2.0 - version: 3.4.1(webpack@5.89.0) - dotenv: - specifier: ^10.0.0 - version: 10.0.0 - dotenv-expand: - specifier: ^5.1.0 - version: 5.1.0 + version: 10.4.16(postcss@8.4.32) eslint: - specifier: ^8.56.0 + specifier: ^8 version: 8.56.0 - eslint-config-react-app: - specifier: ^7.0.1 - version: 7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5) - eslint-webpack-plugin: - specifier: ^3.1.1 - version: 3.2.0(eslint@8.56.0)(webpack@5.89.0) - file-loader: - specifier: ^6.2.0 - version: 6.2.0(webpack@5.89.0) - fs-extra: - specifier: ^10.0.0 - version: 10.1.0 - html-webpack-plugin: - specifier: ^5.5.0 - version: 5.5.4(webpack@5.89.0) - identity-obj-proxy: - specifier: ^3.0.0 - version: 3.0.0 - jest: - specifier: ^27.4.3 - version: 27.5.1 - jest-resolve: - specifier: ^27.4.2 - version: 27.5.1 - jest-watch-typeahead: - specifier: ^1.0.0 - version: 1.1.0(jest@27.5.1) - mini-css-extract-plugin: - specifier: ^2.4.5 - version: 2.7.6(webpack@5.89.0) + eslint-config-next: + specifier: 14.0.4 + version: 14.0.4(eslint@8.56.0)(typescript@5.3.3) postcss: - specifier: ^8.4.4 + specifier: ^8 version: 8.4.32 - postcss-flexbugs-fixes: - specifier: ^5.0.2 - version: 5.0.2(postcss@8.4.32) - postcss-loader: - specifier: ^6.2.1 - version: 6.2.1(postcss@8.4.32)(webpack@5.89.0) - postcss-normalize: - specifier: ^10.0.1 - version: 10.0.1(browserslist@4.22.2)(postcss@8.4.32) - postcss-preset-env: - specifier: ^7.0.1 - version: 7.8.3(postcss@8.4.32) - prompts: - specifier: ^2.4.2 - version: 2.4.2 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-app-polyfill: - specifier: ^3.0.0 - version: 3.0.0 - react-dev-utils: - specifier: ^12.0.1 - version: 12.0.1(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0) - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - react-refresh: - specifier: ^0.11.0 - version: 0.11.0 - resolve: - specifier: ^1.20.0 - version: 1.22.8 - resolve-url-loader: - specifier: ^4.0.0 - version: 4.0.0 - sass-loader: - specifier: ^12.3.0 - version: 12.6.0(webpack@5.89.0) - semver: - specifier: ^7.3.5 - version: 7.5.4 - source-map-loader: - specifier: ^3.0.0 - version: 3.0.2(webpack@5.89.0) - style-loader: - specifier: ^3.3.1 - version: 3.3.3(webpack@5.89.0) tailwindcss: - specifier: ^3.0.2 + specifier: ^3.3.0 version: 3.3.6 - terser-webpack-plugin: - specifier: ^5.2.5 - version: 5.3.9(webpack@5.89.0) typescript: - specifier: ^4.9.5 - version: 4.9.5 - web-vitals: - specifier: ^2.1.4 - version: 2.1.4 - webpack: - specifier: ^5.64.4 - version: 5.89.0 - webpack-dev-server: - specifier: ^4.6.0 - version: 4.15.1(webpack@5.89.0) - webpack-manifest-plugin: - specifier: ^4.0.2 - version: 4.1.1(webpack@5.89.0) - workbox-webpack-plugin: - specifier: ^6.4.1 - version: 6.6.0(webpack@5.89.0) + specifier: ^5 + version: 5.3.3 packages/core: dependencies: @@ -344,10 +204,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@adobe/css-tools@4.3.2: - resolution: {integrity: sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==} - dev: true - /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -361,18 +217,6 @@ packages: '@jridgewell/trace-mapping': 0.3.20 dev: true - /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): - resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} - engines: {node: '>=10'} - peerDependencies: - ajv: '>=8' - dependencies: - ajv: 8.12.0 - json-schema: 0.4.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - dev: true - /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -433,20 +277,6 @@ packages: jsesc: 2.5.2 dev: true - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} @@ -458,51 +288,6 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - dev: true - - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.6): - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.3.2 - semver: 6.3.1 - dev: true - - /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.6): - resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} @@ -523,13 +308,6 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} @@ -551,42 +329,6 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.6): - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.20 - dev: true - - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: true - /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} @@ -594,13 +336,6 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} @@ -623,15 +358,6 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-wrap-function@7.22.20: - resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - dev: true - /@babel/helpers@7.23.6: resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} engines: {node: '>=6.9.0'} @@ -660,8884 +386,3232 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + /@babel/runtime@7.23.6: + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + regenerator-runtime: 0.14.1 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. - peerDependencies: - '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 dev: true - /@babel/plugin-proposal-decorators@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==} - engines: {node: '>=6.9.0'} + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.6) + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.6): - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. - peerDependencies: - '@babel/core': ^7.0.0-0 + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6): - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.23.6): - resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.6): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} dev: true - /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@next/env@14.0.4: + resolution: {integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==} + dev: false + + /@next/eslint-plugin-next@14.0.4: + resolution: {integrity: sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + glob: 7.1.7 dev: true - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + /@next/swc-darwin-arm64@14.0.4: + resolution: {integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + /@next/swc-darwin-x64@14.0.4: + resolution: {integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + /@next/swc-linux-arm64-gnu@14.0.4: + resolution: {integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + /@next/swc-linux-arm64-musl@14.0.4: + resolution: {integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + /@next/swc-linux-x64-gnu@14.0.4: + resolution: {integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + /@next/swc-linux-x64-musl@14.0.4: + resolution: {integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + /@next/swc-win32-arm64-msvc@14.0.4: + resolution: {integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + /@next/swc-win32-ia32-msvc@14.0.4: + resolution: {integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@next/swc-win32-x64-msvc@14.0.4: + resolution: {integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + eslint-scope: 5.1.1 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.6): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + cross-spawn: 7.0.3 + fast-glob: 3.3.2 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@rushstack/eslint-patch@1.6.1: + resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.6): - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + tslib: 2.6.2 + dev: false + + /@tsconfig/recommended@1.0.3: + resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} dev: true - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/eslint@8.44.9: + resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 dev: true - /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/fs-extra@11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + '@types/jsonfile': 6.1.4 + '@types/node': 20.10.5 dev: true - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/jsonfile@6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + '@types/node': 20.10.5 dev: true - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} dev: true - /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.6): - resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/node@18.19.3: + resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 + undici-types: 5.26.5 dev: true - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/node@20.10.5: + resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.15 + undici-types: 5.26.5 dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} dev: true - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /@types/ps-tree@1.1.6: + resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} dev: true - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/react-dom@18.2.18: + resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + '@types/react': 18.2.45 dev: true - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@types/react@18.2.45: + resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 + csstype: 3.1.3 dev: true - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} dev: true - /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + /@types/which@3.0.3: + resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} dev: true - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + eslint: 8.56.0 + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + eslint: 8.56.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@typescript-eslint/scope-manager@6.14.0: + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 dev: true - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.56.0 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 + /@typescript-eslint/types@6.14.0: + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} + engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.6): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + eslint: 8.56.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} - engines: {node: '>=6.9.0'} + /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^7.0.0 || ^8.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + eslint: 8.56.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript dev: true - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 dev: true - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@typescript-eslint/visitor-keys@6.14.0: + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + '@typescript-eslint/types': 6.14.0 + eslint-visitor-keys: 3.4.3 dev: true - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} - engines: {node: '>=6.9.0'} + /@vercel/style-guide@5.1.0(eslint@8.56.0)(prettier@3.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} + engines: {node: '>=16'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@next/eslint-plugin-next': '>=12.3.0 <15' + eslint: '>=8.48.0 <9' + prettier: '>=3.0.0 <4' + typescript: '>=4.8.0 <6' + peerDependenciesMeta: + '@next/eslint-plugin-next': + optional: true + eslint: + optional: true + prettier: + optional: true + typescript: + optional: true dependencies: '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-config-prettier: 9.1.0(eslint@8.56.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) + eslint-plugin-react: 7.33.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + eslint-plugin-testing-library: 6.2.0(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 48.0.1(eslint@8.56.0) + prettier: 3.1.1 + prettier-plugin-packagejson: 2.4.7(prettier@3.1.1) + typescript: 5.3.3 + transitivePeerDependencies: + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - jest + - supports-color dev: true - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} - engines: {node: '>=6.9.0'} + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: - '@babel/core': ^7.0.0-0 + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + acorn: 8.11.2 dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true dev: true - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 dev: true - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /ansi-escapes@6.2.0: + resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} + engines: {node: '>=14.16'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + type-fest: 3.13.1 dev: true - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} dev: true - /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} dev: true - /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + color-convert: 1.9.3 dev: true - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.6): - resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + color-convert: 2.0.1 dev: true - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) - '@babel/types': 7.23.6 + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} dev: true - /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - regenerator-transform: 0.15.2 + normalize-path: 3.0.0 + picomatch: 2.3.1 dev: true - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true - /@babel/plugin-transform-runtime@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + dequal: 2.0.3 dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + call-bind: 1.0.5 + is-array-buffer: 3.0.2 dev: true - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} dev: true - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 dev: true - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 dev: true - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 dev: true - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 dev: true - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true - /@babel/preset-env@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.6) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.6) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.6) - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) - core-js-compat: 3.34.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + has-symbols: 1.0.3 dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.6): - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + /autoprefixer@10.4.16(postcss@8.4.32): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + postcss: ^8.1.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.6 - esutils: 2.0.3 + browserslist: 4.22.2 + caniuse-lite: 1.0.30001570 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.32 + postcss-value-parser: 4.2.0 dev: true - /@babel/preset-react@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.6) - '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.6) + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} dev: true - /@babel/preset-typescript@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: true + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) + dequal: 2.0.3 dev: true - /@babel/regjsgen@0.8.0: - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /@babel/runtime@7.23.6: - resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} dev: true - /@babel/traverse@7.23.6: - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} - engines: {node: '>=6.9.0'} + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + big-integer: 1.6.52 dev: true - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} - engines: {node: '>=6.9.0'} + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 + balanced-match: 1.0.2 + concat-map: 0.0.1 dev: true - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 dev: true - /@csstools/normalize.css@12.0.0: - resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001570 + electron-to-chromium: 1.4.614 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true - /@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.32): - resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} dev: true - /@csstools/postcss-color-function@1.1.1(postcss@8.4.32): - resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + run-applescript: 5.0.0 dev: true - /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true + streamsearch: 1.1.0 + dev: false - /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.32): - resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 dev: true - /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} dev: true - /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.32): - resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} dev: true - /@csstools/postcss-nested-calc@1.0.0(postcss@8.4.32): - resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /caniuse-lite@1.0.30001570: + resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 dev: true - /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + ansi-styles: 4.3.0 + supports-color: 7.2.0 dev: true - /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.32): - resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true - /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.32): - resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 dev: true - /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} dev: true - /@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.32): - resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + escape-string-regexp: 1.0.5 dev: true - /@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.32): - resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} - engines: {node: ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + restore-cursor: 4.0.0 dev: true - /@csstools/postcss-unset-value@1.0.2(postcss@8.4.32): - resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} dependencies: - postcss: 8.4.32 + slice-ansi: 5.0.0 + string-width: 7.0.0 dev: true - /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.13): - resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss-selector-parser: ^6.0.10 + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: - postcss-selector-parser: 6.0.13 + color-name: 1.1.3 dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 + color-name: 1.1.4 dev: true - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + /commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 dev: true - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true dev: true - /@jest/console@27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true - /@jest/console@28.1.3: - resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 20.10.5 - chalk: 4.1.2 - jest-message-util: 28.1.3 - jest-util: 28.1.3 - slash: 3.0.0 + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} dev: true - /@jest/core@27.5.1: - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + supports-color: '*' peerDependenciesMeta: - node-notifier: + supports-color: optional: true dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.8.1 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 27.5.1 - jest-config: 27.5.1 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 - micromatch: 4.0.5 - rimraf: 3.0.2 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate + ms: 2.1.3 dev: true - /@jest/environment@27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - jest-mock: 27.5.1 + ms: 2.1.2 dev: true - /@jest/fake-timers@27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.1.0 - '@types/node': 20.10.5 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /@jest/globals@27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 + bplist-parser: 0.2.0 + untildify: 4.0.0 dev: true - /@jest/reporters@27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - jest-haste-map: 27.5.1 - jest-resolve: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - slash: 3.0.0 - source-map: 0.6.1 - string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 8.1.1 - transitivePeerDependencies: - - supports-color + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 dev: true - /@jest/schemas@28.1.3: - resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} dependencies: - '@sinclair/typebox': 0.24.51 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 dev: true - /@jest/source-map@27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - callsites: 3.1.0 - graceful-fs: 4.2.11 - source-map: 0.6.1 + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} dev: true - /@jest/test-result@27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} dependencies: - '@jest/console': 27.5.1 - '@jest/types': 27.5.1 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 dev: true - /@jest/test-result@28.1.3: - resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/console': 28.1.3 - '@jest/types': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} dev: true - /@jest/test-sequencer@27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-runtime: 27.5.1 - transitivePeerDependencies: - - supports-color + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} dev: true - /@jest/transform@27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.23.6 - '@jest/types': 27.5.1 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 1.9.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 - transitivePeerDependencies: - - supports-color + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /@jest/types@27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.5 - '@types/yargs': 16.0.9 - chalk: 4.1.2 + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: true - /@jest/types@28.1.3: - resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: - '@jest/schemas': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.5 - '@types/yargs': 17.0.32 - chalk: 4.1.2 + path-type: 4.0.0 dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + esutils: 2.0.3 dev: true - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} dev: true - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /electron-to-chromium@1.4.614: + resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} dev: true - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + /emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} dev: true - /@leichtgewicht/ip-codec@2.0.4: - resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /@microsoft/tsdoc-config@0.16.2: - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 + graceful-fs: 4.2.11 + tapable: 2.2.1 dev: true - /@microsoft/tsdoc@0.14.2: - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 dev: true - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} dependencies: - eslint-scope: 5.1.1 + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + 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.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + 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.13 dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 dev: true - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + hasown: 2.0.0 dev: true - /@pkgr/utils@2.4.2: - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 dev: true - /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.89.0): - resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <5.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - dependencies: - ansi-html-community: 0.0.8 - common-path-prefix: 3.0.0 - core-js-pure: 3.34.0 - error-stack-parser: 2.1.4 - find-up: 5.0.0 - html-entities: 2.4.0 - loader-utils: 2.0.4 - react-refresh: 0.11.0 - schema-utils: 3.3.0 - source-map: 0.7.4 - webpack: 5.89.0 - webpack-dev-server: 4.15.1(webpack@5.89.0) + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} dev: true - /@rollup/plugin-babel@5.3.1(@babel/core@7.23.6)(rollup@2.79.1): - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-imports': 7.22.15 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} dev: true - /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 2.79.1 + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} dev: true - /@rollup/plugin-replace@2.4.2(rollup@2.79.1): - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + /eslint-config-next@14.0.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==} peerDependencies: - rollup: ^1.20.0 || ^2.0.0 + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.9 - rollup: 2.79.1 + '@next/eslint-plugin-next': 14.0.4 + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-react: 7.33.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + typescript: 5.3.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color dev: true - /@rollup/pluginutils@3.1.0(rollup@2.79.1): - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} + /eslint-config-prettier@9.1.0(eslint@8.56.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true peerDependencies: - rollup: ^1.20.0||^2.0.0 + eslint: '>=7.0.0' dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - dev: true - - /@rushstack/eslint-patch@1.6.1: - resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} - dev: true - - /@sinclair/typebox@0.24.51: - resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + eslint: 8.56.0 dev: true - /@sinonjs/commons@1.8.6: - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + /eslint-config-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} + peerDependencies: + eslint: '>6.6.0' dependencies: - type-detect: 4.0.8 + eslint: 8.56.0 + eslint-plugin-turbo: 1.11.2(eslint@8.56.0) dev: true - /@sinonjs/fake-timers@8.1.0: - resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' dependencies: - '@sinonjs/commons': 1.8.6 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) dev: true - /@surma/rollup-plugin-off-main-thread@2.2.3: - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: - ejs: 3.1.9 - json5: 2.2.3 - magic-string: 0.25.9 - string.prototype.matchall: 4.0.10 - dev: true - - /@svgr/babel-plugin-add-jsx-attribute@5.4.0: - resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-remove-jsx-attribute@5.4.0: - resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1: - resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1: - resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-svg-dynamic-title@5.4.0: - resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-svg-em-dimensions@5.4.0: - resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-transform-react-native-svg@5.4.0: - resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-transform-svg-component@5.5.0: - resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} - engines: {node: '>=10'} + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color dev: true - /@svgr/babel-preset@5.5.0: - resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} - engines: {node: '>=10'} + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' dependencies: - '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 - '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 - '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 - '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 - '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 - '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 - '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 - '@svgr/babel-plugin-transform-svg-component': 5.5.0 + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.56.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(eslint@8.56.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color dev: true - /@svgr/core@5.5.0: - resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} - engines: {node: '>=10'} + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' dependencies: - '@svgr/plugin-jsx': 5.5.0 - camelcase: 6.3.0 - cosmiconfig: 7.1.0 + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.56.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack - supports-color dev: true - /@svgr/hast-util-to-babel-ast@5.5.0: - resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} - engines: {node: '>=10'} + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true dependencies: - '@babel/types': 7.23.6 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color dev: true - /@svgr/plugin-jsx@5.5.0: - resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} - engines: {node: '>=10'} + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true dependencies: - '@babel/core': 7.23.6 - '@svgr/babel-preset': 5.5.0 - '@svgr/hast-util-to-babel-ast': 5.5.0 - svg-parser: 2.0.4 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /@svgr/plugin-svgo@5.5.0: - resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} - engines: {node: '>=10'} + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true dependencies: - cosmiconfig: 7.1.0 - deepmerge: 4.3.1 - svgo: 1.3.2 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color dev: true - /@svgr/webpack@5.5.0: - resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} - engines: {node: '>=10'} + /eslint-module-utils@2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.23.6) - '@babel/preset-env': 7.23.6(@babel/core@7.23.6) - '@babel/preset-react': 7.23.3(@babel/core@7.23.6) - '@svgr/core': 5.5.0 - '@svgr/plugin-jsx': 5.5.0 - '@svgr/plugin-svgo': 5.5.0 - loader-utils: 2.0.4 + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /@testing-library/dom@8.20.1: - resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} - engines: {node: '>=12'} + /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.23.6 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 + escape-string-regexp: 1.0.5 + eslint: 8.56.0 + ignore: 5.3.0 dev: true - /@testing-library/dom@9.3.3: - resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} - engines: {node: '>=14'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.23.6 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: true - - /@testing-library/jest-dom@5.17.0: - resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} - engines: {node: '>=8', npm: '>=6', yarn: '>=1'} - dependencies: - '@adobe/css-tools': 4.3.2 - '@babel/runtime': 7.23.6 - '@types/testing-library__jest-dom': 5.14.9 - aria-query: 5.3.0 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.5.16 - lodash: 4.17.21 - redent: 3.0.0 - dev: true - - /@testing-library/react@13.4.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} - engines: {node: '>=12'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - dependencies: - '@babel/runtime': 7.23.6 - '@testing-library/dom': 8.20.1 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@testing-library/user-event@13.5.0(@testing-library/dom@9.3.3): - resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} - engines: {node: '>=10', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - dependencies: - '@babel/runtime': 7.23.6 - '@testing-library/dom': 9.3.3 - dev: true - - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true - - /@trysound/sax@0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: true - - /@tsconfig/recommended@1.0.3: - resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} - dev: true - - /@types/aria-query@5.0.4: - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - dev: true - - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.4 - dev: true - - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - dev: true - - /@types/babel__traverse@7.20.4: - resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.10.5 - dev: true - - /@types/bonjour@3.5.13: - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - dependencies: - '@types/node': 20.10.5 - dev: true - - /@types/connect-history-api-fallback@1.5.4: - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - dependencies: - '@types/express-serve-static-core': 4.17.41 - '@types/node': 20.10.5 - dev: true - - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 20.10.5 - dev: true - - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - dependencies: - '@types/eslint': 8.44.9 - '@types/estree': 1.0.5 - dev: true - - /@types/eslint@8.44.9: - resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - dev: true - - /@types/estree@0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: true - - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true - - /@types/express-serve-static-core@4.17.41: - resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} - dependencies: - '@types/node': 20.10.5 - '@types/qs': 6.9.10 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - dev: true - - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.41 - '@types/qs': 6.9.10 - '@types/serve-static': 1.15.5 - dev: true - - /@types/fs-extra@11.0.4: - resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} - dependencies: - '@types/jsonfile': 6.1.4 - '@types/node': 20.10.5 - dev: true - - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - dependencies: - '@types/node': 20.10.5 - dev: true - - /@types/html-minifier-terser@6.1.0: - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - dev: true - - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true - - /@types/http-proxy@1.17.14: - resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} - dependencies: - '@types/node': 20.10.5 - dev: true - - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: true - - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - dev: true - - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - dependencies: - '@types/istanbul-lib-report': 3.0.3 - dev: true - - /@types/jest@27.5.2: - resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} - dependencies: - jest-matcher-utils: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true - - /@types/jsonfile@6.1.4: - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - dependencies: - '@types/node': 20.10.5 - dev: true - - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true - - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - dev: true - - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: true - - /@types/node-forge@1.3.10: - resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} - dependencies: - '@types/node': 20.10.5 - dev: true - - /@types/node@16.18.68: - resolution: {integrity: sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==} - dev: true - - /@types/node@18.19.3: - resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/node@20.10.5: - resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true - - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: true - - /@types/prettier@2.7.3: - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - dev: true - - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - dev: true - - /@types/ps-tree@1.1.6: - resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} - dev: true - - /@types/q@1.5.8: - resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} - dev: true - - /@types/qs@6.9.10: - resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} - dev: true - - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true - - /@types/react-dom@18.2.18: - resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} - dependencies: - '@types/react': 18.2.45 - dev: true - - /@types/react@18.2.45: - resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} - dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.3 - dev: true - - /@types/resolve@1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - dependencies: - '@types/node': 20.10.5 - dev: true - - /@types/retry@0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: true - - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} - dev: true - - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: true - - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.10.5 - dev: true - - /@types/serve-index@1.9.4: - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - dependencies: - '@types/express': 4.17.21 - dev: true - - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} - dependencies: - '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 - '@types/node': 20.10.5 - dev: true - - /@types/sockjs@0.3.36: - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - dependencies: - '@types/node': 20.10.5 - dev: true - - /@types/stack-utils@2.0.3: - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - dev: true - - /@types/testing-library__jest-dom@5.14.9: - resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} - dependencies: - '@types/jest': 27.5.2 - dev: true - - /@types/trusted-types@2.0.7: - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - dev: true - - /@types/web-bluetooth@0.0.20: - resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - dev: true - - /@types/which@3.0.3: - resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} - dev: true - - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - dependencies: - '@types/node': 20.10.5 - dev: true - - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true - - /@types/yargs@16.0.9: - resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - debug: 4.3.4 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare-lite: 1.4.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/experimental-utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - debug: 4.3.4 - eslint: 8.56.0 - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 - eslint: 8.56.0 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - - /@typescript-eslint/scope-manager@6.14.0: - resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 - dev: true - - /@typescript-eslint/type-utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - debug: 4.3.4 - eslint: 8.56.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.56.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/types@6.14.0: - resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - - /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): - resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - eslint: 8.56.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - eslint: 8.56.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - eslint: 8.56.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@typescript-eslint/visitor-keys@6.14.0: - resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.14.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /@vercel/style-guide@5.1.0(eslint@8.56.0)(prettier@3.1.1)(typescript@5.3.3): - resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} - engines: {node: '>=16'} - peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <15' - eslint: '>=8.48.0 <9' - prettier: '>=3.0.0 <4' - typescript: '>=4.8.0 <6' - peerDependenciesMeta: - '@next/eslint-plugin-next': - optional: true - eslint: - optional: true - prettier: - optional: true - typescript: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - eslint-config-prettier: 9.1.0(eslint@8.56.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.56.0) - prettier: 3.1.1 - prettier-plugin-packagejson: 2.4.7(prettier@3.1.1) - typescript: 5.3.3 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - jest - - supports-color - dev: true - - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} - dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: true - - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: true - - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: true - - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - dev: true - - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@xtuc/long': 4.2.2 - dev: true - - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: true - - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - dev: true - - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - dependencies: - '@xtuc/ieee754': 1.2.0 - dev: true - - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - dependencies: - '@xtuc/long': 4.2.2 - dev: true - - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: true - - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 - dev: true - - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: true - - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - dev: true - - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: true - - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@xtuc/long': 4.2.2 - dev: true - - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true - - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true - - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead - dev: true - - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: true - - /acorn-globals@6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: true - - /acorn-import-assertions@1.9.0(acorn@8.11.2): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 - dependencies: - acorn: 8.11.2 - dev: true - - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.2 - dev: true - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - dev: true - - /adjust-sourcemap-loader@4.0.0: - resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} - engines: {node: '>=8.9'} - dependencies: - loader-utils: 2.0.4 - regex-parser: 2.2.11 - dev: true - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.12.0 - dev: true - - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: 6.12.6 - dev: true - - /ajv-keywords@5.1.0(ajv@8.12.0): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - dependencies: - ajv: 8.12.0 - fast-deep-equal: 3.1.3 - dev: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: true - - /ansi-escapes@6.2.0: - resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} - engines: {node: '>=14.16'} - dependencies: - type-fest: 3.13.1 - dev: true - - /ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true - - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true - - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} - dependencies: - deep-equal: 2.2.3 - dev: true - - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - dependencies: - dequal: 2.0.3 - dev: true - - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - dev: true - - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true - - /array-flatten@2.1.2: - resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} - dev: true - - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-string: 1.0.7 - dev: true - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true - - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - dev: true - - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.reduce@1.0.6: - resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: true - - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - dev: true - - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - dev: true - - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: true - - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true - - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: true - - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: true - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true - - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true - - /autoprefixer@10.4.16(postcss@8.4.32): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001570 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - dev: true - - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - dependencies: - dequal: 2.0.3 - dev: true - - /babel-jest@27.5.1(@babel/core@7.23.6): - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.23.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.23.6) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-loader@8.3.0(@babel/core@7.23.6)(webpack@5.89.0): - resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} - engines: {node: '>= 8.9'} - peerDependencies: - '@babel/core': ^7.0.0 - webpack: '>=2' - dependencies: - '@babel/core': 7.23.6 - find-cache-dir: 3.3.2 - loader-utils: 2.0.4 - make-dir: 3.1.0 - schema-utils: 2.7.1 - webpack: 5.89.0 - dev: true - - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-jest-hoist@27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.4 - dev: true - - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - dependencies: - '@babel/runtime': 7.23.6 - cosmiconfig: 7.1.0 - resolve: 1.22.8 - dev: true - - /babel-plugin-named-asset-import@0.3.8(@babel/core@7.23.6): - resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} - peerDependencies: - '@babel/core': ^7.1.0 - dependencies: - '@babel/core': 7.23.6 - dev: true - - /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.6): - resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.6): - resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) - core-js-compat: 3.34.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.6): - resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-transform-react-remove-prop-types@0.4.24: - resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} - dev: true - - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - dev: true - - /babel-preset-jest@27.5.1(@babel/core@7.23.6): - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) - dev: true - - /babel-preset-react-app@10.0.1: - resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-decorators': 7.23.6(@babel/core@7.23.6) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.6) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.6) - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-runtime': 7.23.6(@babel/core@7.23.6) - '@babel/preset-env': 7.23.6(@babel/core@7.23.6) - '@babel/preset-react': 7.23.3(@babel/core@7.23.6) - '@babel/preset-typescript': 7.23.3(@babel/core@7.23.6) - '@babel/runtime': 7.23.6 - babel-plugin-macros: 3.1.0 - babel-plugin-transform-react-remove-prop-types: 0.4.24 - transitivePeerDependencies: - - supports-color - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: true - - /bfj@7.1.0: - resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} - engines: {node: '>= 8.0.0'} - dependencies: - bluebird: 3.7.2 - check-types: 11.2.3 - hoopy: 0.1.4 - jsonpath: 1.1.1 - tryer: 1.0.1 - dev: true - - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - dev: true - - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: true - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: true - - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /bonjour-service@1.1.1: - resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} - dependencies: - array-flatten: 2.1.2 - dns-equal: 1.0.0 - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - dev: true - - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true - - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.52 - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /browser-process-hrtime@1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true - - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001570 - electron-to-chromium: 1.4.614 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) - dev: true - - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - dependencies: - node-int64: 0.4.0 - dev: true - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true - - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true - - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - dependencies: - run-applescript: 5.0.0 - dev: true - - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: true - - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true - - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.2 - dev: true - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true - - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true - - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true - - /caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001570 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - dev: true - - /caniuse-lite@1.0.30001570: - resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} - dev: true - - /case-sensitive-paths-webpack-plugin@2.4.0: - resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} - engines: {node: '>=4'} - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true - - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true - - /char-regex@2.0.1: - resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} - engines: {node: '>=12.20'} - dev: true - - /check-types@11.2.3: - resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: true - - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true - - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: true - - /clean-css@5.3.3: - resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} - engines: {node: '>= 10.0'} - dependencies: - source-map: 0.6.1 - dev: true - - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - restore-cursor: 4.0.0 - dev: true - - /cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} - dependencies: - slice-ansi: 5.0.0 - string-width: 7.0.0 - dev: true - - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true - - /coa@2.0.2: - resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} - engines: {node: '>= 4.0'} - dependencies: - '@types/q': 1.5.8 - chalk: 2.4.2 - q: 1.5.1 - dev: true - - /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - dev: true - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - dev: true - - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: true - - /commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - dev: true - - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true - - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true - - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: true - - /commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - dev: true - - /common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: true - - /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: true - - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true - - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: true - - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: true - - /connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: true - - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true - - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true - - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true - - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: true - - /core-js-compat@3.34.0: - resolution: {integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==} - dependencies: - browserslist: 4.22.2 - dev: true - - /core-js-pure@3.34.0: - resolution: {integrity: sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==} - requiresBuild: true - dev: true - - /core-js@3.34.0: - resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==} - requiresBuild: true - dev: true - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true - - /cosmiconfig@6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} - engines: {node: '>=8'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: true - - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true - - /css-blank-pseudo@3.0.3(postcss@8.4.32): - resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true - - /css-declaration-sorter@6.4.1(postcss@8.4.32): - resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} - engines: {node: ^10 || ^12 || >=14} - peerDependencies: - postcss: ^8.0.9 - dependencies: - postcss: 8.4.32 - dev: true - - /css-has-pseudo@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true - - /css-loader@6.8.1(webpack@5.89.0): - resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.32) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.32) - postcss-modules-scope: 3.0.0(postcss@8.4.32) - postcss-modules-values: 4.0.0(postcss@8.4.32) - postcss-value-parser: 4.2.0 - semver: 7.5.4 - webpack: 5.89.0 - dev: true - - /css-minimizer-webpack-plugin@3.4.1(webpack@5.89.0): - resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@parcel/css': '*' - clean-css: '*' - csso: '*' - esbuild: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@parcel/css': - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - dependencies: - cssnano: 5.1.15(postcss@8.4.32) - jest-worker: 27.5.1 - postcss: 8.4.32 - schema-utils: 4.2.0 - serialize-javascript: 6.0.1 - source-map: 0.6.1 - webpack: 5.89.0 - dev: true - - /css-prefers-color-scheme@6.0.3(postcss@8.4.32): - resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - dev: true - - /css-select-base-adapter@0.1.1: - resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} - dev: true - - /css-select@2.1.0: - resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} - dependencies: - boolbase: 1.0.0 - css-what: 3.4.2 - domutils: 1.7.0 - nth-check: 1.0.2 - dev: true - - /css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - dev: true - - /css-tree@1.0.0-alpha.37: - resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.4 - source-map: 0.6.1 - dev: true - - /css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - dev: true - - /css-what@3.4.2: - resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} - engines: {node: '>= 6'} - dev: true - - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true - - /css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - dev: true - - /cssdb@7.9.1: - resolution: {integrity: sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==} - dev: true - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /cssnano-preset-default@5.2.14(postcss@8.4.32): - resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - css-declaration-sorter: 6.4.1(postcss@8.4.32) - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-calc: 8.2.4(postcss@8.4.32) - postcss-colormin: 5.3.1(postcss@8.4.32) - postcss-convert-values: 5.1.3(postcss@8.4.32) - postcss-discard-comments: 5.1.2(postcss@8.4.32) - postcss-discard-duplicates: 5.1.0(postcss@8.4.32) - postcss-discard-empty: 5.1.1(postcss@8.4.32) - postcss-discard-overridden: 5.1.0(postcss@8.4.32) - postcss-merge-longhand: 5.1.7(postcss@8.4.32) - postcss-merge-rules: 5.1.4(postcss@8.4.32) - postcss-minify-font-values: 5.1.0(postcss@8.4.32) - postcss-minify-gradients: 5.1.1(postcss@8.4.32) - postcss-minify-params: 5.1.4(postcss@8.4.32) - postcss-minify-selectors: 5.2.1(postcss@8.4.32) - postcss-normalize-charset: 5.1.0(postcss@8.4.32) - postcss-normalize-display-values: 5.1.0(postcss@8.4.32) - postcss-normalize-positions: 5.1.1(postcss@8.4.32) - postcss-normalize-repeat-style: 5.1.1(postcss@8.4.32) - postcss-normalize-string: 5.1.0(postcss@8.4.32) - postcss-normalize-timing-functions: 5.1.0(postcss@8.4.32) - postcss-normalize-unicode: 5.1.1(postcss@8.4.32) - postcss-normalize-url: 5.1.0(postcss@8.4.32) - postcss-normalize-whitespace: 5.1.1(postcss@8.4.32) - postcss-ordered-values: 5.1.3(postcss@8.4.32) - postcss-reduce-initial: 5.1.2(postcss@8.4.32) - postcss-reduce-transforms: 5.1.0(postcss@8.4.32) - postcss-svgo: 5.1.0(postcss@8.4.32) - postcss-unique-selectors: 5.1.1(postcss@8.4.32) - dev: true - - /cssnano-utils@3.1.0(postcss@8.4.32): - resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - dev: true - - /cssnano@5.1.15(postcss@8.4.32): - resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-preset-default: 5.2.14(postcss@8.4.32) - lilconfig: 2.1.0 - postcss: 8.4.32 - yaml: 1.10.2 - dev: true - - /csso@4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} - engines: {node: '>=8.0.0'} - dependencies: - css-tree: 1.1.3 - dev: true - - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true - - /cssom@0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true - - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: true - - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: true - - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true - - /data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - dev: true - - /data-urls@2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - dev: true - - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true - - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: true - - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: true - - /deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.2 - is-arguments: 1.1.1 - is-array-buffer: 3.0.2 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - isarray: 2.0.5 - object-is: 1.1.5 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true - - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - dev: true - - /default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - dependencies: - execa: 5.1.1 - dev: true - - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: true - - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true - - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 - object-keys: 1.1.1 - dev: true - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true - - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true - - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true - - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: true - - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true - - /detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - dev: true - - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true - - /detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: true - - /detect-port-alt@1.1.6: - resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} - engines: {node: '>= 4.2.1'} - hasBin: true - dependencies: - address: 1.2.2 - debug: 2.6.9 - transitivePeerDependencies: - - supports-color - dev: true - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true - - /diff-sequences@27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true - - /dns-equal@1.0.0: - resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} - dev: true - - /dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - dependencies: - '@leichtgewicht/ip-codec': 2.0.4 - dev: true - - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dev: true - - /dom-converter@0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - dependencies: - utila: 0.4.0 - dev: true - - /dom-serializer@0.2.2: - resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} - dependencies: - domelementtype: 2.3.0 - entities: 2.2.0 - dev: true - - /dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - dev: true - - /domelementtype@1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - dev: true - - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true - - /domexception@2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - deprecated: Use your platform's native DOMException instead - dependencies: - webidl-conversions: 5.0.0 - dev: true - - /domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: true - - /domutils@1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} - dependencies: - dom-serializer: 0.2.2 - domelementtype: 1.3.1 - dev: true - - /domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - dev: true - - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: true - - /dotenv-expand@5.1.0: - resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} - dev: true - - /dotenv@10.0.0: - resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} - engines: {node: '>=10'} - dev: true - - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - dev: true - - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true - - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.7 - dev: true - - /electron-to-chromium@1.4.614: - resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} - dev: true - - /emittery@0.10.2: - resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} - engines: {node: '>=12'} - dev: true - - /emittery@0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} - dev: true - - /emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - dev: true - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true - - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: true - - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true - - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: true - - /entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: true - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: true - - /error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - dependencies: - stackframe: 1.3.4 - dev: true - - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - 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.12 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - 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.13 - dev: true - - /es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - dev: true - - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - dev: true - - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} - dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.6 - iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 - dev: true - - /es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} - dev: true - - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 - dev: true - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.0 - dev: true - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /escodegen@1.14.3: - resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} - engines: {node: '>=4.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 4.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - - /eslint-config-prettier@9.1.0(eslint@8.56.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.56.0 - dev: true - - /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5): - resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} - engines: {node: '>=14.0.0'} - peerDependencies: - eslint: ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - babel-preset-react-app: 10.0.1 - confusing-browser-globals: 1.0.11 - eslint: 8.56.0 - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - eslint-plugin-testing-library: 5.11.1(eslint@8.56.0)(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - jest - - supports-color - dev: true - - /eslint-config-turbo@1.11.2(eslint@8.56.0): - resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} - peerDependencies: - eslint: '>6.6.0' - dependencies: - eslint: 8.56.0 - eslint-plugin-turbo: 1.11.2(eslint@8.56.0) - dev: true - - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' - dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - dev: true - - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - escape-string-regexp: 1.0.5 - eslint: 8.56.0 - ignore: 5.3.0 - dev: true - - /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.56.0): - resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@babel/plugin-syntax-flow': ^7.14.5 - '@babel/plugin-transform-react-jsx': ^7.14.9 - eslint: ^8.1.0 - dependencies: - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) - eslint: 8.56.0 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - dev: true - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.0 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.0 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(jest@27.5.1)(typescript@4.9.5): - resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@4.9.5) - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - eslint: 8.56.0 - jest: 27.5.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.23.6 - aria-query: 5.3.0 - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - hasown: 2.0.0 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - dev: true - - /eslint-plugin-only-warn@1.1.0: - resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} - engines: {node: '>=6'} - dev: true - - /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0): - resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} - peerDependencies: - eslint: '>=7' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true - dependencies: - eslint: 8.56.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - dev: true - - /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.56.0 - dev: true - - /eslint-plugin-react@7.33.2(eslint@8.56.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: true - - /eslint-plugin-testing-library@5.11.1(eslint@8.56.0)(typescript@4.9.5): - resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - dev: true - - /eslint-plugin-turbo@1.11.2(eslint@8.56.0): - resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} - peerDependencies: - eslint: '>6.6.0' - dependencies: - dotenv: 16.0.3 - eslint: 8.56.0 - dev: true - - /eslint-plugin-unicorn@48.0.1(eslint@8.56.0): - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.44.0' - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - ci-info: 3.9.0 - clean-regexp: 1.0.0 - eslint: 8.56.0 - esquery: 1.5.0 - indent-string: 4.0.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.27 - regjsparser: 0.10.0 - semver: 7.5.4 - strip-indent: 3.0.0 - dev: true - - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint-webpack-plugin@3.2.0(eslint@8.56.0)(webpack@5.89.0): - resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - webpack: ^5.0.0 - dependencies: - '@types/eslint': 8.44.9 - eslint: 8.56.0 - jest-worker: 28.1.3 - micromatch: 4.0.5 - normalize-path: 3.0.0 - schema-utils: 4.2.0 - webpack: 5.89.0 - dev: true - - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - dev: true - - /esprima@1.2.2: - resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true - - /event-stream@3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} - dependencies: - duplexer: 0.1.2 - from: 0.1.7 - map-stream: 0.1.0 - pause-stream: 0.0.11 - split: 0.3.3 - stream-combiner: 0.0.4 - through: 2.3.8 - dev: true - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true - - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true - - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - 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 - dev: true - - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - dev: true - - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true - - /expect@27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-get-type: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - dev: true - - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: true - - /faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: true - - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - dependencies: - bser: 2.1.1 - dev: true - - /fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.2.1 - dev: true - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - dev: true - - /file-loader@6.2.0(webpack@5.89.0): - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - webpack: 5.89.0 - dev: true - - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.6 - dev: true - - /filesize@8.0.7: - resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} - engines: {node: '>= 0.4.0'} - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: true - - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: true - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true - - /follow-redirects@1.15.3: - resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true - - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - - /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0): - resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} - engines: {node: '>=10', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - dependencies: - '@babel/code-frame': 7.23.5 - '@types/json-schema': 7.0.15 - chalk: 4.1.2 - chokidar: 3.5.3 - cosmiconfig: 6.0.0 - deepmerge: 4.3.1 - eslint: 8.56.0 - fs-extra: 9.1.0 - glob: 7.2.3 - memfs: 3.5.3 - minimatch: 3.1.2 - schema-utils: 2.7.0 - semver: 7.5.4 - tapable: 1.1.3 - typescript: 4.9.5 - webpack: 5.89.0 - dev: true - - /form-data@3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - - /formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - dependencies: - fetch-blob: 3.2.0 - dev: true - - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true - - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true - - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true - - /from@0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - dev: true - - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fs-monkey@1.0.5: - resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true - - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /fx@31.0.0: - resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==} - hasBin: true - dev: true - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} - engines: {node: '>=18'} - dev: true - - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} - dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - dev: true - - /get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - dev: true - - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true - - /get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true - - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true - - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} - dependencies: - resolve-pkg-maps: 1.0.0 - dev: true - - /git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true - - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.3 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} - dependencies: - global-prefix: 3.0.0 - dev: true - - /global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} - dependencies: - ini: 1.3.8 - kind-of: 6.0.3 - which: 1.3.1 - dev: true - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true - - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - dev: true - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.2 - dev: true - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - dependencies: - duplexer: 0.1.2 - dev: true - - /handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: true - - /harmony-reflect@1.6.2: - resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} - dev: true - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - dependencies: - get-intrinsic: 1.2.2 - dev: true - - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - dev: true - - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true - - /hoopy@0.1.4: - resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} - engines: {node: '>= 6.0.0'} - dev: true - - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - - /hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - dev: true - - /html-encoding-sniffer@2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: true - - /html-entities@2.4.0: - resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} - dev: true - - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true - - /html-minifier-terser@6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} - engines: {node: '>=12'} - hasBin: true - dependencies: - camel-case: 4.1.2 - clean-css: 5.3.3 - commander: 8.3.0 - he: 1.2.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 5.26.0 - dev: true - - /html-webpack-plugin@5.5.4(webpack@5.89.0): - resolution: {integrity: sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==} - engines: {node: '>=10.13.0'} - peerDependencies: - webpack: ^5.20.0 - dependencies: - '@types/html-minifier-terser': 6.1.0 - html-minifier-terser: 6.1.0 - lodash: 4.17.21 - pretty-error: 4.0.0 - tapable: 2.2.1 - webpack: 5.89.0 - dev: true - - /htmlparser2@6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 2.2.0 - dev: true - - /http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: true - - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - dev: true - - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - dev: true - - /http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: true - - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /http-proxy-middleware@2.0.6(@types/express@4.17.21): - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - dependencies: - '@types/express': 4.17.21 - '@types/http-proxy': 1.17.14 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.5 - transitivePeerDependencies: - - debug - dev: true - - /http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.3 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - dev: true - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true - - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true - - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /icss-utils@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - dev: true - - /idb@7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - dev: true - - /identity-obj-proxy@3.0.0: - resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} - engines: {node: '>=4'} - dependencies: - harmony-reflect: 1.6.2 - dev: true - - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: true - - /immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: true - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true - - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 - dev: true - - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true - - /ipaddr.js@2.1.0: - resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} - engines: {node: '>= 10'} - dev: true - - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true - - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true - - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true - - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.0 - dev: true - - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - dependencies: - call-bind: 1.0.5 - dev: true - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true - - /is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} - dependencies: - get-east-asian-width: 1.2.0 - dev: true - - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true - - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true - - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - dev: true - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: true - - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: true - - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true - - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true - - /is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - dev: true - - /is-root@2.1.0: - resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} - engines: {node: '>=6'} - dev: true - - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true - - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.5 - dev: true - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.13 - dev: true - - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true - - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.5 - dev: true - - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true - - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true - - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.23.6 - '@babel/parser': 7.23.6 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - dev: true - - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - dev: true - - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 - dev: true - - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true - dependencies: - async: 3.2.5 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - dev: true - - /jest-changed-files@27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - execa: 5.1.1 - throat: 6.0.2 - dev: true - - /jest-circus@27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - co: 4.6.0 - dedent: 0.7.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - throat: 6.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-cli@27.5.1: - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 peerDependenciesMeta: - node-notifier: + '@typescript-eslint/parser': optional: true dependencies: - '@jest/core': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - import-local: 3.1.0 - jest-config: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - prompts: 2.4.2 - yargs: 16.2.0 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 transitivePeerDependencies: - - bufferutil - - canvas + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack - supports-color - - ts-node - - utf-8-validate dev: true - /jest-config@27.5.1: - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /eslint-plugin-import@2.29.1(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} peerDependencies: - ts-node: '>=9.0.0' + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 peerDependenciesMeta: - ts-node: + '@typescript-eslint/parser': optional: true dependencies: - '@babel/core': 7.23.6 - '@jest/test-sequencer': 27.5.1 - '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.23.6) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-get-type: 27.5.1 - jest-jasmine2: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runner: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 27.5.1 - slash: 3.0.0 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /jest-diff@27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-docblock@27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - detect-newline: 3.1.0 - dev: true - - /jest-each@27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - jest-get-type: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-environment-jsdom@27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - jest-mock: 27.5.1 - jest-util: 27.5.1 - jsdom: 16.7.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /jest-environment-node@27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: true - - /jest-get-type@27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /jest-haste-map@27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.10.5 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 27.5.1 - jest-serializer: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /jest-jasmine2@27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - co: 4.6.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - throat: 6.0.2 + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack - supports-color dev: true - /jest-leak-detector@27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-matcher-utils@27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-message-util@27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 27.5.1 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-message-util@28.1.3: - resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 28.1.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 28.1.3 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-mock@27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - dev: true - - /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: - jest-resolve: '*' + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' peerDependenciesMeta: - jest-resolve: + '@typescript-eslint/eslint-plugin': + optional: true + jest: optional: true dependencies: - jest-resolve: 27.5.1 - dev: true - - /jest-regex-util@27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /jest-regex-util@28.0.2: - resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dev: true - - /jest-resolve-dependencies@27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-regex-util: 27.5.1 - jest-snapshot: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-resolve@27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) - jest-util: 27.5.1 - jest-validate: 27.5.1 - resolve: 1.22.8 - resolve.exports: 1.1.1 - slash: 3.0.0 - dev: true - - /jest-runner@27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - emittery: 0.8.1 - graceful-fs: 4.2.11 - jest-docblock: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-haste-map: 27.5.1 - jest-leak-detector: 27.5.1 - jest-message-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runtime: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - source-map-support: 0.5.21 - throat: 6.0.2 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /jest-runtime@27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/globals': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - cjs-module-lexer: 1.2.3 - collect-v8-coverage: 1.0.2 - execa: 5.1.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-serializer@27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/node': 20.10.5 - graceful-fs: 4.2.11 - dev: true - - /jest-snapshot@27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.23.6 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__traverse': 7.20.4 - '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) - chalk: 4.1.2 - expect: 27.5.1 - graceful-fs: 4.2.11 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - jest-haste-map: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - natural-compare: 1.4.0 - pretty-format: 27.5.1 - semver: 7.5.4 + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 transitivePeerDependencies: - supports-color + - typescript dev: true - /jest-util@27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-util@28.1.3: - resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 20.10.5 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-validate@27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 27.5.1 - leven: 3.1.0 - pretty-format: 27.5.1 - dev: true - - /jest-watch-typeahead@1.1.0(jest@27.5.1): - resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} peerDependencies: - jest: ^27.0.0 || ^28.0.0 - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest: 27.5.1 - jest-regex-util: 28.0.2 - jest-watcher: 28.1.3 - slash: 4.0.0 - string-length: 5.0.1 - strip-ansi: 7.1.0 - dev: true - - /jest-watcher@27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.10.5 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest-util: 27.5.1 - string-length: 4.0.2 - dev: true - - /jest-watcher@28.1.3: - resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/test-result': 28.1.3 - '@jest/types': 28.1.3 - '@types/node': 20.10.5 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.10.2 - jest-util: 28.1.3 - string-length: 4.0.2 - dev: true - - /jest-worker@26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 20.10.5 - merge-stream: 2.0.0 - supports-color: 7.2.0 - dev: true - - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@types/node': 20.10.5 - merge-stream: 2.0.0 - supports-color: 8.1.1 + '@babel/runtime': 7.23.6 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.15 + eslint: 8.56.0 + hasown: 2.0.0 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 dev: true - /jest-worker@28.1.3: - resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@types/node': 20.10.5 - merge-stream: 2.0.0 - supports-color: 8.1.1 + /eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} dev: true - /jest@27.5.1: - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0): + resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + eslint: '>=7' + eslint-plugin-jest: '>=25' peerDependenciesMeta: - node-notifier: + eslint-plugin-jest: optional: true dependencies: - '@jest/core': 27.5.1 - import-local: 3.1.0 - jest-cli: 27.5.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: true - - /jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - dev: true - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + eslint: 8.56.0 + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) dev: true - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - argparse: 1.0.10 - esprima: 4.0.1 + eslint: 8.56.0 dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + /eslint-plugin-react@7.33.2(eslint@8.56.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - argparse: 2.0.1 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.56.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 dev: true - /jsdom@16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} + /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true + eslint: ^7.5.0 || ^8.0.0 dependencies: - abab: 2.0.6 - acorn: 8.11.2 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.4.3 - domexception: 2.0.1 - escodegen: 2.1.0 - form-data: 3.0.1 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.1.3 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.9 - xml-name-validator: 3.0.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 transitivePeerDependencies: - - bufferutil - supports-color - - utf-8-validate - dev: true - - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true + - typescript dev: true - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true + /eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 dev: true - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + /eslint-plugin-turbo@1.11.2(eslint@8.56.0): + resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + dotenv: 16.0.3 + eslint: 8.56.0 dev: true - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + /eslint-plugin-unicorn@48.0.1(eslint@8.56.0): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.56.0 + esquery: 1.5.0 + indent-string: 4.0.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.27 + regjsparser: 0.10.0 + semver: 7.5.4 + strip-indent: 3.0.0 dev: true - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 dev: true - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 dev: true - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} dev: true - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - minimist: 1.2.8 - dev: true - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 dev: true - /jsonpath@1.1.1: - resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} dependencies: - esprima: 1.2.2 - static-eval: 2.0.2 - underscore: 1.12.1 - dev: true - - /jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} + estraverse: 5.3.0 dev: true - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.1.7 - dev: true - - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: true - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} + estraverse: 5.3.0 dev: true - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} dev: true - /klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} dev: true - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} dev: true - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + /event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} dependencies: - language-subtag-registry: 0.3.22 + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 dev: true - /launch-editor@2.6.1: - resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} - dependencies: - picocolors: 1.0.0 - shell-quote: 1.8.1 + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} dev: true - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 dev: true - /levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + 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 dev: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 dev: true - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /lint-staged@15.2.0: - resolution: {integrity: sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==} - engines: {node: '>=18.12.0'} - hasBin: true - dependencies: - chalk: 5.3.0 - commander: 11.1.0 - debug: 4.3.4 - execa: 8.0.1 - lilconfig: 3.0.0 - listr2: 8.0.0 - micromatch: 4.0.5 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.3.4 - transitivePeerDependencies: - - supports-color + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /listr2@8.0.0: - resolution: {integrity: sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==} - engines: {node: '>=18.0.0'} + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.0.0 - rfdc: 1.3.0 - wrap-ansi: 9.0.0 - dev: true - - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} + reusify: 1.0.4 dev: true - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 dev: true - /loader-utils@3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} - engines: {node: '>= 12.13.0'} + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 dev: true - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 + to-regex-range: 5.0.1 dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: - p-locate: 4.1.0 + locate-path: 5.0.0 + path-exists: 4.0.0 dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: - p-locate: 5.0.0 + locate-path: 6.0.0 + path-exists: 4.0.0 dev: true - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 dev: true - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 dev: true - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 dev: true - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} dev: true - /log-update@6.0.0: - resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} - engines: {node: '>=18'} + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} dependencies: - ansi-escapes: 6.2.0 - cli-cursor: 4.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.6.2 + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true dev: true + optional: true - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} dependencies: - yallist: 4.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 dev: true - /lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - dependencies: - sourcemap-codec: 1.4.8 + /fx@31.0.0: + resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==} + hasBin: true dev: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.1 + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} dev: true - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - dependencies: - semver: 7.5.4 + /get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} dev: true - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: - tmpl: 1.0.5 + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 dev: true - /map-stream@0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} dev: true - /mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} dev: true - /mdn-data@2.0.4: - resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} dev: true - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 dev: true - /memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} dependencies: - fs-monkey: 1.0.5 + resolve-pkg-maps: 1.0.0 dev: true - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} dev: true - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 dev: true - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 dev: true - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: false - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: - braces: 3.0.2 - picomatch: 2.3.1 + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 dev: true - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: - mime-db: 1.52.0 + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.3 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 dev: true - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - hasBin: true dev: true - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 dev: true - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 dev: true - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 3.0.0 dev: true - /mini-css-extract-plugin@2.7.6(webpack@5.89.0): - resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - schema-utils: 4.2.0 - webpack: 5.89.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 4.0.0 dev: true - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 dev: true - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} dev: true - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - dependencies: - minimist: 1.2.8 + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} dev: true - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 dev: true - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} dev: true - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} dev: true - /multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} dependencies: - dns-packet: 5.6.1 - thunky: 1.1.0 + has-symbols: 1.0.3 dev: true - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 + function-bind: 1.1.2 dev: true - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} dev: true - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} dev: true - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} dev: true - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} dev: true - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: - lower-case: 2.0.2 - tslib: 2.6.2 + parent-module: 1.0.1 + resolve-from: 4.0.0 dev: true - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} dev: true - /node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 + once: 1.4.0 + wrappy: 1.0.2 dev: true - /node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} + /inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} dev: true - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 dev: true - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 dev: true - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - path-key: 3.1.1 + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 dev: true - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} dependencies: - path-key: 4.0.0 + builtin-modules: 3.3.0 dev: true - /nth-check@1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} - dependencies: - boolbase: 1.0.0 + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} dev: true - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - boolbase: 1.0.0 + hasown: 2.0.0 dev: true - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true dev: true - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} dev: true - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: call-bind: 1.0.5 - define-properties: 1.2.1 dev: true - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + /is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} dev: true - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + /is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 + get-east-asian-width: 1.2.0 dev: true - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 + has-tostringtag: 1.0.0 dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 + is-extglob: 2.1.1 dev: true - /object.getownpropertydescriptors@2.1.7: - resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} - engines: {node: '>= 0.8'} + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true dependencies: - array.prototype.reduce: 1.0.6 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - safe-array-concat: 1.0.1 + is-docker: 3.0.0 dev: true - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.3 + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 + has-tostringtag: 1.0.0 dev: true - /obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} dev: true - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} dev: true - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: - wrappy: 1.0.2 + call-bind: 1.0.5 + has-tostringtag: 1.0.0 dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - mimic-fn: 4.0.0 + call-bind: 1.0.5 dev: true - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} dev: true - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.5 + has-tostringtag: 1.0.0 dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 + has-symbols: 1.0.3 dev: true - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} dependencies: - p-try: 2.2.0 + which-typed-array: 1.1.13 dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} dev: true - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - p-limit: 2.3.0 + call-bind: 1.0.5 dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: - p-limit: 2.3.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} dependencies: - p-limit: 3.1.0 + is-docker: 2.2.1 dev: true - /p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.23.5 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 dev: true - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true dev: true - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true dev: true - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true dev: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 dev: true - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 dev: true - /path@0.12.7: - resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} dependencies: - process: 0.11.10 - util: 0.10.4 + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.1.7 dev: true - /pause-stream@0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: - through: 2.3.8 + json-buffer: 3.0.1 dev: true - /performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: true - /picocolors@0.2.1: - resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + dependencies: + language-subtag-registry: 0.3.22 dev: true - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 dev: true - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} dev: true - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} dev: true - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + /lint-staged@15.2.0: + resolution: {integrity: sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==} + engines: {node: '>=18.12.0'} + hasBin: true + dependencies: + chalk: 5.3.0 + commander: 11.1.0 + debug: 4.3.4 + execa: 8.0.1 + lilconfig: 3.0.0 + listr2: 8.0.0 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.4 + transitivePeerDependencies: + - supports-color dev: true - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + /listr2@8.0.0: + resolution: {integrity: sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==} + engines: {node: '>=18.0.0'} dependencies: - find-up: 4.1.0 + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.0.0 + rfdc: 1.3.0 + wrap-ansi: 9.0.0 dev: true - /pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: - find-up: 3.0.0 + p-locate: 4.1.0 dev: true - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 dev: true - /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.32): - resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /postcss-browser-comments@4.0.0(browserslist@4.22.2)(postcss@8.4.32): - resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} - engines: {node: '>=8'} - peerDependencies: - browserslist: '>=4' - postcss: '>=8' - dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /postcss-calc@8.2.4(postcss@8.4.32): - resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} - peerDependencies: - postcss: ^8.2.2 + /log-update@6.0.0: + resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + engines: {node: '>=18'} dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 + ansi-escapes: 6.2.0 + cli-cursor: 4.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 dev: true - /postcss-clamp@4.1.0(postcss@8.4.32): - resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} - engines: {node: '>=7.6.0'} - peerDependencies: - postcss: ^8.4.6 + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true + js-tokens: 4.0.0 - /postcss-color-functional-notation@4.2.4(postcss@8.4.32): - resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + yallist: 3.1.1 dev: true - /postcss-color-hex-alpha@8.0.4(postcss@8.4.32): - resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + yallist: 4.0.0 dev: true - /postcss-color-rebeccapurple@7.1.1(postcss@8.4.32): - resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} dev: true - /postcss-colormin@5.3.1(postcss@8.4.32): - resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /postcss-convert-values@5.1.3(postcss@8.4.32): - resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true - /postcss-custom-media@8.0.2(postcss@8.4.32): - resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + braces: 3.0.2 + picomatch: 2.3.1 dev: true - /postcss-custom-properties@12.1.11(postcss@8.4.32): - resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} dev: true - /postcss-custom-selectors@6.0.3(postcss@8.4.32): - resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} dev: true - /postcss-dir-pseudo-class@6.0.5(postcss@8.4.32): - resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} dev: true - /postcss-discard-comments@5.1.2(postcss@8.4.32): - resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: - postcss: 8.4.32 + brace-expansion: 1.1.11 dev: true - /postcss-discard-duplicates@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /postcss-discard-empty@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /postcss-discard-overridden@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /postcss-double-position-gradients@3.1.2(postcss@8.4.32): - resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 dev: true - /postcss-env-function@4.0.6(postcss@8.4.32): - resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /postcss-flexbugs-fixes@5.0.2(postcss@8.4.32): - resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} + /next@14.0.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} + engines: {node: '>=18.17.0'} + hasBin: true peerDependencies: - postcss: ^8.1.4 + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true dependencies: - postcss: 8.4.32 + '@next/env': 14.0.4 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001570 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + watchpack: 2.4.0 + optionalDependencies: + '@next/swc-darwin-arm64': 14.0.4 + '@next/swc-darwin-x64': 14.0.4 + '@next/swc-linux-arm64-gnu': 14.0.4 + '@next/swc-linux-arm64-musl': 14.0.4 + '@next/swc-linux-x64-gnu': 14.0.4 + '@next/swc-linux-x64-musl': 14.0.4 + '@next/swc-win32-arm64-msvc': 14.0.4 + '@next/swc-win32-ia32-msvc': 14.0.4 + '@next/swc-win32-x64-msvc': 14.0.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} dev: true - /postcss-focus-visible@6.0.4(postcss@8.4.32): - resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 + /node-fetch@3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 dev: true - /postcss-focus-within@5.0.4(postcss@8.4.32): - resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true - /postcss-font-variant@5.0.0(postcss@8.4.32): - resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} - peerDependencies: - postcss: ^8.1.0 + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: - postcss: 8.4.32 + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 dev: true - /postcss-gap-properties@3.0.5(postcss@8.4.32): - resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} dev: true - /postcss-image-set-function@4.0.7(postcss@8.4.32): - resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} dev: true - /postcss-import@15.1.0(postcss@8.4.32): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 + path-key: 3.1.1 dev: true - /postcss-initial@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} - peerDependencies: - postcss: ^8.0.0 + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - postcss: 8.4.32 + path-key: 4.0.0 dev: true - /postcss-js@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.32 + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} dev: true - /postcss-lab-function@4.2.1(postcss@8.4.32): - resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} dev: true - /postcss-load-config@4.0.2(postcss@8.4.32): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 3.0.0 - postcss: 8.4.32 - yaml: 2.3.4 + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true - /postcss-loader@6.2.1(postcss@8.4.32)(webpack@5.89.0): - resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - dependencies: - cosmiconfig: 7.1.0 - klona: 2.0.6 - postcss: 8.4.32 - semver: 7.5.4 - webpack: 5.89.0 + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} dev: true - /postcss-logical@5.0.4(postcss@8.4.32): - resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} dependencies: - postcss: 8.4.32 + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 dev: true - /postcss-media-minmax@5.0.0(postcss@8.4.32): - resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.1.0 + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} dependencies: - postcss: 8.4.32 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /postcss-merge-longhand@5.1.7(postcss@8.4.32): - resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.4.32) + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /postcss-merge-rules@5.1.4(postcss@8.4.32): - resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - browserslist: 4.22.2 - caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 dev: true - /postcss-minify-font-values@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /postcss-minify-gradients@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} dependencies: - colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /postcss-minify-params@5.1.4(postcss@8.4.32): - resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: - browserslist: 4.22.2 - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + wrappy: 1.0.2 dev: true - /postcss-minify-selectors@5.2.1(postcss@8.4.32): - resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + mimic-fn: 2.1.0 dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.32): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} dependencies: - postcss: 8.4.32 + mimic-fn: 4.0.0 dev: true - /postcss-modules-local-by-default@4.0.3(postcss@8.4.32): - resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 dev: true - /postcss-modules-scope@3.0.0(postcss@8.4.32): - resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 dev: true - /postcss-modules-values@4.0.0(postcss@8.4.32): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 + p-try: 2.2.0 dev: true - /postcss-nested@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + yocto-queue: 0.1.0 dev: true - /postcss-nesting@10.2.0(postcss@8.4.32): - resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + p-limit: 2.3.0 dev: true - /postcss-normalize-charset@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: - postcss: 8.4.32 + p-limit: 3.1.0 dev: true - /postcss-normalize-display-values@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} dev: true - /postcss-normalize-positions@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + callsites: 3.1.0 dev: true - /postcss-normalize-repeat-style@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 dev: true - /postcss-normalize-string@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} dev: true - /postcss-normalize-timing-functions@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} dev: true - /postcss-normalize-unicode@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} dev: true - /postcss-normalize-url@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - normalize-url: 6.1.0 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} dev: true - /postcss-normalize-whitespace@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /postcss-normalize@10.0.1(browserslist@4.22.2)(postcss@8.4.32): - resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} - engines: {node: '>= 12'} - peerDependencies: - browserslist: '>= 4' - postcss: '>= 8' - dependencies: - '@csstools/normalize.css': 12.0.0 - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-browser-comments: 4.0.0(browserslist@4.22.2)(postcss@8.4.32) - sanitize.css: 13.0.0 + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} dev: true - /postcss-opacity-percentage@1.1.3(postcss@8.4.32): - resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 + /path@0.12.7: + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} dependencies: - postcss: 8.4.32 + process: 0.11.10 + util: 0.10.4 dev: true - /postcss-ordered-values@5.1.3(postcss@8.4.32): - resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 + /pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} dependencies: - cssnano-utils: 3.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + through: 2.3.8 dev: true - /postcss-overflow-shorthand@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} dev: true - /postcss-page-break@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} - peerDependencies: - postcss: ^8 - dependencies: - postcss: 8.4.32 + /pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true dev: true - /postcss-place@7.0.5(postcss@8.4.32): - resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} dev: true - /postcss-preset-env@7.8.3(postcss@8.4.32): - resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.32) - '@csstools/postcss-color-function': 1.1.1(postcss@8.4.32) - '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.32) - '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.32) - '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.32) - '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.32) - '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.32) - '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.32) - '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.32) - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) - '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.32) - '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.32) - '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.32) - '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.32) - autoprefixer: 10.4.16(postcss@8.4.32) - browserslist: 4.22.2 - css-blank-pseudo: 3.0.3(postcss@8.4.32) - css-has-pseudo: 3.0.4(postcss@8.4.32) - css-prefers-color-scheme: 6.0.3(postcss@8.4.32) - cssdb: 7.9.1 - postcss: 8.4.32 - postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.32) - postcss-clamp: 4.1.0(postcss@8.4.32) - postcss-color-functional-notation: 4.2.4(postcss@8.4.32) - postcss-color-hex-alpha: 8.0.4(postcss@8.4.32) - postcss-color-rebeccapurple: 7.1.1(postcss@8.4.32) - postcss-custom-media: 8.0.2(postcss@8.4.32) - postcss-custom-properties: 12.1.11(postcss@8.4.32) - postcss-custom-selectors: 6.0.3(postcss@8.4.32) - postcss-dir-pseudo-class: 6.0.5(postcss@8.4.32) - postcss-double-position-gradients: 3.1.2(postcss@8.4.32) - postcss-env-function: 4.0.6(postcss@8.4.32) - postcss-focus-visible: 6.0.4(postcss@8.4.32) - postcss-focus-within: 5.0.4(postcss@8.4.32) - postcss-font-variant: 5.0.0(postcss@8.4.32) - postcss-gap-properties: 3.0.5(postcss@8.4.32) - postcss-image-set-function: 4.0.7(postcss@8.4.32) - postcss-initial: 4.0.1(postcss@8.4.32) - postcss-lab-function: 4.2.1(postcss@8.4.32) - postcss-logical: 5.0.4(postcss@8.4.32) - postcss-media-minmax: 5.0.0(postcss@8.4.32) - postcss-nesting: 10.2.0(postcss@8.4.32) - postcss-opacity-percentage: 1.1.3(postcss@8.4.32) - postcss-overflow-shorthand: 3.0.4(postcss@8.4.32) - postcss-page-break: 3.0.4(postcss@8.4.32) - postcss-place: 7.0.5(postcss@8.4.32) - postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.32) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.32) - postcss-selector-not: 6.0.1(postcss@8.4.32) - postcss-value-parser: 4.2.0 + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} dev: true - /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.32): - resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} dev: true - /postcss-reduce-initial@5.1.2(postcss@8.4.32): - resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} - engines: {node: ^10 || ^12 || >=14.0} + /postcss-import@15.1.0(postcss@8.4.32): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} peerDependencies: - postcss: ^8.2.15 + postcss: ^8.0.0 dependencies: - browserslist: 4.22.2 - caniuse-api: 3.0.0 postcss: 8.4.32 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 dev: true - /postcss-reduce-transforms@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} - engines: {node: ^10 || ^12 || >=14.0} + /postcss-js@4.0.1(postcss@8.4.32): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} peerDependencies: - postcss: ^8.2.15 + postcss: ^8.4.21 dependencies: + camelcase-css: 2.0.1 postcss: 8.4.32 - postcss-value-parser: 4.2.0 dev: true - /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.32): - resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + /postcss-load-config@4.0.2(postcss@8.4.32): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} peerDependencies: - postcss: ^8.0.3 + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true dependencies: + lilconfig: 3.0.0 postcss: 8.4.32 + yaml: 2.3.4 dev: true - /postcss-selector-not@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} - engines: {node: ^12 || ^14 || >=16} + /postcss-nested@6.0.1(postcss@8.4.32): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} peerDependencies: - postcss: ^8.2 + postcss: ^8.2.14 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.0.13 @@ -9551,38 +3625,18 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss-svgo@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - svgo: 2.8.0 - dev: true - - /postcss-unique-selectors@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true - /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@7.0.39: - resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} - engines: {node: '>=6.0.0'} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} dependencies: - picocolors: 0.2.1 - source-map: 0.6.1 - dev: true + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false /postcss@8.4.32: resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} @@ -9593,11 +3647,6 @@ packages: source-map-js: 1.0.2 dev: true - /prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - dev: true - /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -9622,60 +3671,11 @@ packages: hasBin: true dev: true - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true - - /pretty-error@4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} - dependencies: - lodash: 4.17.21 - renderkid: 3.0.0 - dev: true - - /pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - dev: true - - /pretty-format@28.1.3: - resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true - - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true - /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} dev: true - /promise@8.3.0: - resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} - dependencies: - asap: 2.0.6 - dev: true - - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: true - /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -9684,130 +3684,21 @@ packages: react-is: 16.13.1 dev: true - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - dev: true - /ps-tree@1.2.0: resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true - dependencies: - event-stream: 3.3.4 - dev: true - - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: true - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true - - /q@1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - dev: true - - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: true - - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /raf@3.4.1: - resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} - dependencies: - performance-now: 2.1.0 - dev: true - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true - - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} + engines: {node: '>= 0.10'} + hasBin: true dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 + event-stream: 3.3.4 dev: true - /react-app-polyfill@3.0.0: - resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} - engines: {node: '>=14'} - dependencies: - core-js: 3.34.0 - object-assign: 4.1.1 - promise: 8.3.0 - raf: 3.4.1 - regenerator-runtime: 0.13.11 - whatwg-fetch: 3.6.20 + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} dev: true - /react-dev-utils@12.0.1(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0): - resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/code-frame': 7.23.5 - address: 1.2.2 - browserslist: 4.22.2 - chalk: 4.1.2 - cross-spawn: 7.0.3 - detect-port-alt: 1.1.6 - escape-string-regexp: 4.0.0 - filesize: 8.0.7 - find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.56.0)(typescript@4.9.5)(webpack@5.89.0) - global-modules: 2.0.0 - globby: 11.1.0 - gzip-size: 6.0.0 - immer: 9.0.21 - is-root: 2.1.0 - loader-utils: 3.2.1 - open: 8.4.2 - pkg-up: 3.1.0 - prompts: 2.4.2 - react-error-overlay: 6.0.11 - recursive-readdir: 2.2.3 - shell-quote: 1.8.1 - strip-ansi: 6.0.1 - text-table: 0.2.0 - typescript: 4.9.5 - webpack: 5.89.0 - transitivePeerDependencies: - - eslint - - supports-color - - vue-template-compiler + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true /react-dom@18.2.0(react@18.2.0): @@ -9818,35 +3709,18 @@ packages: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 - dev: true - - /react-error-overlay@6.0.11: - resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} - dev: true + dev: false /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true - /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: true - - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true - - /react-refresh@0.11.0: - resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} - engines: {node: '>=0.10.0'} - dev: true - /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 - dev: true + dev: false /read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -9873,27 +3747,6 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: true - - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -9901,21 +3754,6 @@ packages: picomatch: 2.3.1 dev: true - /recursive-readdir@2.2.3: - resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} - engines: {node: '>=6.0.0'} - dependencies: - minimatch: 3.1.2 - dev: true - - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true - /reflect-metadata@0.2.1: resolution: {integrity: sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==} dev: false @@ -9932,35 +3770,10 @@ packages: which-builtin-type: 1.1.3 dev: true - /regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: true - - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true - - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true - /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - dependencies: - '@babel/runtime': 7.23.6 - dev: true - - /regex-parser@2.2.11: - resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} - dev: true - /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true @@ -9975,18 +3788,6 @@ packages: set-function-name: 2.0.1 dev: true - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - dev: true - /regjsparser@0.10.0: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} hasBin: true @@ -9994,87 +3795,15 @@ packages: jsesc: 0.5.0 dev: true - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: true - - /relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - dev: true - - /renderkid@3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - dependencies: - css-select: 4.3.0 - dom-converter: 0.2.0 - htmlparser2: 6.1.0 - lodash: 4.17.21 - strip-ansi: 6.0.1 - dev: true - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true - - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true - - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: true - /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true - /resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true - /resolve-url-loader@4.0.0: - resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} - engines: {node: '>=8.9'} - peerDependencies: - rework: 1.0.1 - rework-visit: 1.0.0 - peerDependenciesMeta: - rework: - optional: true - rework-visit: - optional: true - dependencies: - adjust-sourcemap-loader: 4.0.0 - convert-source-map: 1.9.0 - loader-utils: 2.0.4 - postcss: 7.0.39 - source-map: 0.6.1 - dev: true - - /resolve.exports@1.1.1: - resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} - engines: {node: '>=10'} - dev: true - /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: @@ -10108,11 +3837,6 @@ packages: signal-exit: 3.0.7 dev: true - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true - /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -10129,27 +3853,6 @@ packages: glob: 7.2.3 dev: true - /rollup-plugin-terser@7.0.2(rollup@2.79.1): - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser - peerDependencies: - rollup: ^2.0.0 - dependencies: - '@babel/code-frame': 7.23.5 - jest-worker: 26.6.2 - rollup: 2.79.1 - serialize-javascript: 4.0.0 - terser: 5.26.0 - dev: true - - /rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - /run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} engines: {node: '>=12'} @@ -10173,14 +3876,6 @@ packages: isarray: 2.0.5 dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -10189,103 +3884,11 @@ packages: is-regex: 1.1.4 dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - - /sanitize.css@13.0.0: - resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} - dev: true - - /sass-loader@12.6.0(webpack@5.89.0): - resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - dependencies: - klona: 2.0.6 - neo-async: 2.6.2 - webpack: 5.89.0 - dev: true - - /sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - dev: true - - /saxes@5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: true - /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 - dev: true - - /schema-utils@2.7.0: - resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - - /schema-utils@2.7.1: - resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - - /schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) - dev: true - - /select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: true - - /selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - dependencies: - '@types/node-forge': 1.3.10 - node-forge: 1.3.1 - dev: true + dev: false /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} @@ -10305,66 +3908,6 @@ packages: lru-cache: 6.0.0 dev: true - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /serialize-javascript@4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} - dependencies: - randombytes: 2.1.0 - dev: true - - /serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} - dependencies: - randombytes: 2.1.0 - dev: true - - /serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: true - /set-function-length@1.1.1: resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} engines: {node: '>= 0.4'} @@ -10384,14 +3927,6 @@ packages: has-property-descriptors: 1.0.1 dev: true - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: true - - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true - /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -10404,10 +3939,6 @@ packages: engines: {node: '>=8'} dev: true - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true - /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -10425,10 +3956,6 @@ packages: engines: {node: '>=14'} dev: true - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true - /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -10455,80 +3982,26 @@ packages: is-fullwidth-code-point: 5.0.0 dev: true - /sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - dev: true - - /sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - dev: true - - /sort-package-json@2.6.0: - resolution: {integrity: sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==} - hasBin: true - dependencies: - detect-indent: 7.0.1 - detect-newline: 4.0.1 - get-stdin: 9.0.0 - git-hooks-list: 3.1.0 - globby: 13.2.2 - is-plain-obj: 4.1.0 - sort-object-keys: 1.1.3 - dev: true - - /source-list-map@2.0.1: - resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} - dev: true - - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map-loader@3.0.2(webpack@5.89.0): - resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - abab: 2.0.6 - iconv-lite: 0.6.3 - source-map-js: 1.0.2 - webpack: 5.89.0 - dev: true - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} dev: true - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} + /sort-package-json@2.6.0: + resolution: {integrity: sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==} + hasBin: true dependencies: - whatwg-url: 7.1.0 + detect-indent: 7.0.1 + detect-newline: 4.0.1 + get-stdin: 9.0.0 + git-hooks-list: 3.1.0 + globby: 13.2.2 + is-plain-obj: 4.1.0 + sort-object-keys: 1.1.3 dev: true - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: true + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -10552,121 +4025,28 @@ packages: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true - /spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - dependencies: - debug: 4.3.4 - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.2 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - dev: true - - /spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - dependencies: - debug: 4.3.4 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /split@0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} dependencies: through: 2.3.8 dev: true - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true - - /stable@0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - dev: true - - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 - dev: true - - /stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: true - - /static-eval@2.0.2: - resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} - dependencies: - escodegen: 1.14.3 - dev: true - - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true - - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true - - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} - dependencies: - internal-slot: 1.0.6 - dev: true - /stream-combiner@0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} dependencies: duplexer: 0.1.2 dev: true + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} dev: true - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - dev: true - - /string-length@5.0.1: - resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} - engines: {node: '>=12.20'} - dependencies: - char-regex: 2.0.1 - strip-ansi: 7.1.0 - dev: true - - /string-natural-compare@3.0.1: - resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - dev: true - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - /string-width@7.0.0: resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} engines: {node: '>=18'} @@ -10715,27 +4095,6 @@ packages: es-abstract: 1.22.3 dev: true - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: true - - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - dev: true - /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -10755,16 +4114,6 @@ packages: engines: {node: '>=4'} dev: true - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true - - /strip-comments@2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} - engines: {node: '>=10'} - dev: true - /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -10787,25 +4136,22 @@ packages: engines: {node: '>=8'} dev: true - /style-loader@3.3.3(webpack@5.89.0): - resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - webpack: 5.89.0 - dev: true - - /stylehacks@5.1.1(postcss@8.4.32): - resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} - engines: {node: ^10 || ^12 || >=14.0} + /styled-jsx@5.1.1(react@18.2.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} peerDependencies: - postcss: ^8.2.15 + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + client-only: 0.0.1 + react: 18.2.0 + dev: false /sucrase@3.34.0: resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} @@ -10835,69 +4181,11 @@ packages: has-flag: 4.0.0 dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - dev: true - - /svgo@1.3.2: - resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} - engines: {node: '>=4.0.0'} - deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. - hasBin: true - dependencies: - chalk: 2.4.2 - coa: 2.0.2 - css-select: 2.1.0 - css-select-base-adapter: 0.1.1 - css-tree: 1.0.0-alpha.37 - csso: 4.2.0 - js-yaml: 3.14.1 - mkdirp: 0.5.6 - object.values: 1.1.7 - sax: 1.2.4 - stable: 0.1.8 - unquote: 1.1.1 - util.promisify: 1.0.1 - dev: true - - /svgo@2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} - engines: {node: '>=10.13.0'} - hasBin: true - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 4.3.0 - css-tree: 1.1.3 - csso: 4.2.0 - picocolors: 1.0.0 - stable: 0.1.8 - dev: true - - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true - /synckit@0.8.6: resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -10937,83 +4225,11 @@ packages: - ts-node dev: true - /tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - dev: true - /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} dev: true - /temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: true - - /tempy@0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} - engines: {node: '>=10'} - dependencies: - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - dev: true - - /terminal-link@2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.3.0 - dev: true - - /terser-webpack-plugin@5.3.9(webpack@5.89.0): - resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.20 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.26.0 - webpack: 5.89.0 - dev: true - - /terser@5.26.0: - resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.11.2 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: true - - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true - /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -11031,27 +4247,15 @@ packages: any-promise: 1.3.0 dev: true - /throat@6.0.2: - resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} - dev: true - /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: true - /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} dev: true - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true - /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -11064,38 +4268,6 @@ packages: is-number: 7.0.0 dev: true - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true - - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} - engines: {node: '>=6'} - dependencies: - psl: 1.9.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: true - - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - dependencies: - punycode: 2.3.1 - dev: true - - /tr46@2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} - dependencies: - punycode: 2.3.1 - dev: true - - /tryer@1.0.1: - resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} - dev: true - /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -11123,17 +4295,6 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true - - /tsutils@3.21.0(typescript@4.9.5): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 4.9.5 - dev: true /tsutils@3.21.0(typescript@5.3.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -11212,13 +4373,6 @@ packages: turbo-windows-arm64: 1.11.2 dev: true - /type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - dev: true - /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -11226,26 +4380,11 @@ packages: prelude-ls: 1.2.1 dev: true - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true - - /type-fest@0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - dev: true - /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true - /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -11261,14 +4400,6 @@ packages: engines: {node: '>=14.16'} dev: true - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - dev: true - /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -11302,79 +4433,28 @@ packages: /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - is-typed-array: 1.1.12 - dev: true - - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: true - - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true - - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.5 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true - - /underscore@1.12.1: - resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} - dev: true - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: true - - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - dev: true - - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.12 dev: true - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true dev: true - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - crypto-random-string: 2.0.0 + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 dev: true - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true /universalify@2.0.1: @@ -11382,25 +4462,11 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true - - /unquote@1.1.1: - resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} - dev: true - /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} dev: true - /upath@1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -11418,55 +4484,16 @@ packages: punycode: 2.3.1 dev: true - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - dev: true - /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util.promisify@1.0.1: - resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.3 - has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.7 - dev: true - /util@0.10.4: resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} dependencies: inherits: 2.0.3 dev: true - /utila@0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - dev: true - - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true - - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true - - /v8-to-istanbul@8.1.1: - resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} - engines: {node: '>=10.12.0'} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 1.9.0 - source-map: 0.7.4 - dev: true - /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -11474,254 +4501,24 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true - - /w3c-hr-time@1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: true - - /w3c-xmlserializer@2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: true - - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - dependencies: - makeerror: 1.0.12 - dev: true - /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: true - - /wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - dependencies: - minimalistic-assert: 1.0.1 - dev: true + dev: false /web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} dev: true - /web-vitals@2.1.4: - resolution: {integrity: sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==} - dev: true - - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true - - /webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: true - - /webidl-conversions@6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: true - - /webpack-dev-middleware@5.3.3(webpack@5.89.0): - resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.89.0 - dev: true - - /webpack-dev-server@4.15.1(webpack@5.89.0): - resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.5 - '@types/sockjs': 0.3.36 - '@types/ws': 8.5.10 - ansi-html-community: 0.0.8 - bonjour-service: 1.1.1 - chokidar: 3.5.3 - colorette: 2.0.20 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.18.2 - graceful-fs: 4.2.11 - html-entities: 2.4.0 - http-proxy-middleware: 2.0.6(@types/express@4.17.21) - ipaddr.js: 2.1.0 - launch-editor: 2.6.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.2.0 - selfsigned: 2.4.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.89.0 - webpack-dev-middleware: 5.3.3(webpack@5.89.0) - ws: 8.15.1 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: true - - /webpack-manifest-plugin@4.1.1(webpack@5.89.0): - resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} - engines: {node: '>=12.22.0'} - peerDependencies: - webpack: ^4.44.2 || ^5.47.0 - dependencies: - tapable: 2.2.1 - webpack: 5.89.0 - webpack-sources: 2.3.1 - dev: true - - /webpack-sources@1.4.3: - resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: true - - /webpack-sources@2.3.1: - resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} - engines: {node: '>=10.13.0'} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: true - - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true - - /webpack@5.89.0: - resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.11.2 - acorn-import-assertions: 1.9.0(acorn@8.11.2) - browserslist: 4.22.2 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.4.1 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(webpack@5.89.0) - watchpack: 2.4.0 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: true - /webpod@0.0.2: resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} hasBin: true dev: true - /websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.8 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: true - - /websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: true - - /whatwg-encoding@1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - dependencies: - iconv-lite: 0.4.24 - dev: true - - /whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - dev: true - - /whatwg-mimetype@2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: true - - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - dev: true - - /whatwg-url@8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 - dev: true - /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -11770,13 +4567,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -11793,184 +4583,6 @@ packages: isexe: 2.0.0 dev: true - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true - - /workbox-background-sync@6.6.0: - resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} - dependencies: - idb: 7.1.1 - workbox-core: 6.6.0 - dev: true - - /workbox-broadcast-update@6.6.0: - resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-build@6.6.0: - resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} - engines: {node: '>=10.0.0'} - dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) - '@babel/core': 7.23.6 - '@babel/preset-env': 7.23.6(@babel/core@7.23.6) - '@babel/runtime': 7.23.6 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.6)(rollup@2.79.1) - '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) - '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.12.0 - common-tags: 1.8.2 - fast-json-stable-stringify: 2.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - lodash: 4.17.21 - pretty-bytes: 5.6.0 - rollup: 2.79.1 - rollup-plugin-terser: 7.0.2(rollup@2.79.1) - source-map: 0.8.0-beta.0 - stringify-object: 3.3.0 - strip-comments: 2.0.1 - tempy: 0.6.0 - upath: 1.2.0 - workbox-background-sync: 6.6.0 - workbox-broadcast-update: 6.6.0 - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-google-analytics: 6.6.0 - workbox-navigation-preload: 6.6.0 - workbox-precaching: 6.6.0 - workbox-range-requests: 6.6.0 - workbox-recipes: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - workbox-streams: 6.6.0 - workbox-sw: 6.6.0 - workbox-window: 6.6.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: true - - /workbox-cacheable-response@6.6.0: - resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} - deprecated: workbox-background-sync@6.6.0 - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-core@6.6.0: - resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} - dev: true - - /workbox-expiration@6.6.0: - resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} - dependencies: - idb: 7.1.1 - workbox-core: 6.6.0 - dev: true - - /workbox-google-analytics@6.6.0: - resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} - dependencies: - workbox-background-sync: 6.6.0 - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: true - - /workbox-navigation-preload@6.6.0: - resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-precaching@6.6.0: - resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: true - - /workbox-range-requests@6.6.0: - resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-recipes@6.6.0: - resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} - dependencies: - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-precaching: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: true - - /workbox-routing@6.6.0: - resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-strategies@6.6.0: - resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-streams@6.6.0: - resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - dev: true - - /workbox-sw@6.6.0: - resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} - dev: true - - /workbox-webpack-plugin@6.6.0(webpack@5.89.0): - resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==} - engines: {node: '>=10.0.0'} - peerDependencies: - webpack: ^4.4.0 || ^5.9.0 - dependencies: - fast-json-stable-stringify: 2.1.0 - pretty-bytes: 5.6.0 - upath: 1.2.0 - webpack: 5.89.0 - webpack-sources: 1.4.3 - workbox-build: 6.6.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: true - - /workbox-window@6.6.0: - resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} - dependencies: - '@types/trusted-types': 2.0.7 - workbox-core: 6.6.0 - dev: true - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - /wrap-ansi@9.0.0: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} @@ -11984,54 +4596,6 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: true - - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /ws@8.15.1: - resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /xml-name-validator@3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true - - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true @@ -12040,34 +4604,11 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: true - /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} dev: true - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true - - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - dev: true - /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} From 6a04b8f94bb812bef354d7ec0adf496f6a0755d4 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 19 Dec 2023 16:49:28 +0100 Subject: [PATCH 011/253] chore: review ci --- .github/pull_request_template.md | 42 ++++++++++++++++++++++++++++++ .github/workflows/main.yml | 32 ----------------------- .github/workflows/pull_request.yml | 7 ++++- 3 files changed, 48 insertions(+), 33 deletions(-) create mode 100644 .github/pull_request_template.md delete mode 100644 .github/workflows/main.yml diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..5c583d88d --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,42 @@ + + +### 📝 Description + +_Replace this text by a clear and concise description of what this pull request is about and why it is needed. Be sure to explain the problem you're addressing and the solution you're proposing._ +_For libraries, you can add a code sample of how to use it._ +_For bugfixes, you can explain the previous behavior and how it was fixed._ +_In case of visual features, please attach screenshots or video recordings to demonstrate the changes._ + + + +### ❓ Context + +- **JIRA or GitHub link**: + +### ✅ Checklist + +Pull Requests must pass the CI and be code reviewed. Set as Draft if the PR is not ready. + +- [ ] `npx changeset` was attached. +- [ ] **Covered by automatic tests.** +- [ ] **Impact of the changes:** + - + +--- + +### 🧐 Checklist for the PR Reviewers + + + +- [ ] **The code aligns with the requirements** described in the linked JIRA or GitHub issue. +- [ ] **The PR description clearly documents the changes** made and explains any technical trade-offs or design decisions. +- [ ] **There are no undocumented trade-offs**, technical debt, or maintainability issues. +- [ ] **The PR has been tested** thoroughly, and any potential edge cases have been considered and handled. +- [ ] **Any new dependencies** have been justified and documented. diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 7b7cb9b8d..000000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: CI -on: [push] -jobs: - build: - name: Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }} - - runs-on: ${{ matrix.os }} - strategy: - matrix: - node: ['10.x', '12.x', '14.x'] - os: ubuntu-latest - - steps: - - name: Checkout repo - uses: actions/checkout@v2 - - - name: Use Node ${{ matrix.node }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node }} - - - name: Install deps and build (with cache) - uses: bahmutov/npm-install@v1 - - - name: Lint - run: yarn lint - - - name: Test - run: pnpm test --ci --coverage --maxWorkers=2 - - - name: Build - run: yarn build diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 78b2753b2..172405300 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -2,12 +2,17 @@ name: pull_request on: [pull_request] jobs: lint: - runs-on: ubuntu-latest + runs-on: [device-sdk-4xlarge-linux] env: CI_JOB_NUMBER: 1 steps: - uses: actions/checkout@v3 + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + - uses: pnpm/action-setup@v2 name: Install pnpm with: From d386dcde55ec195ffdb4a196b4a17233e172d2b5 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 26 Dec 2023 11:08:38 +0100 Subject: [PATCH 012/253] chore: tsconfig as a module --- apps/sample/package.json | 5 +- apps/sample/tsconfig.json | 14 +-- package.json | 5 +- packages/core/package.json | 5 +- packages/core/tsconfig.json | 2 +- packages/signer/package.json | 5 +- packages/signer/tsconfig.json | 2 +- packages/trusted-apps/package.json | 5 +- packages/trusted-apps/tsconfig.json | 2 +- packages/tsconfig-dsdk/package.json | 15 +++ .../tsconfig-dsdk/sdk.json | 0 packages/tsconfig-dsdk/web.json | 17 ++++ packages/ui/package.json | 5 +- packages/ui/tsconfig.json | 2 +- pnpm-lock.yaml | 92 +++++++------------ 15 files changed, 79 insertions(+), 97 deletions(-) create mode 100644 packages/tsconfig-dsdk/package.json rename tsconfig.base.json => packages/tsconfig-dsdk/sdk.json (100%) create mode 100644 packages/tsconfig-dsdk/web.json diff --git a/apps/sample/package.json b/apps/sample/package.json index 5f0d06002..7913dc952 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -14,15 +14,12 @@ "next": "14.0.4" }, "devDependencies": { - "typescript": "^5", - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", "autoprefixer": "^10.0.1", "postcss": "^8", "tailwindcss": "^3.3.0", "eslint": "^8", "eslint-config-next": "14.0.4", + "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*" } } diff --git a/apps/sample/tsconfig.json b/apps/sample/tsconfig.json index e59724b28..7ff288875 100644 --- a/apps/sample/tsconfig.json +++ b/apps/sample/tsconfig.json @@ -1,18 +1,6 @@ { + "extends": "@ledgerhq/tsconfig-dsdk/web", "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, "plugins": [ { "name": "next" diff --git a/package.json b/package.json index 2404dbd16..801d90ec5 100644 --- a/package.json +++ b/package.json @@ -20,12 +20,13 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "devDependencies": { - "@tsconfig/recommended": "^1.0.3", - "eslint": "^8.56.0", "@ledgerhq/eslint-config-dsdk": "workspace:*", + "@ledgerhq/tsconfig-dsdk": "workspace:*", "lint-staged": "^15.2.0", "path": "^0.12.7", "turbo": "^1.11.2", + "eslint": "^8.56.0", + "typescript": "^5.3.3", "zx": "^7.2.3" }, "lint-staged": { diff --git a/packages/core/package.json b/packages/core/package.json index a59594fac..736e332c2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,10 +20,7 @@ "tsyringe": "^4.8.0" }, "devDependencies": { - "@types/eslint": "^8.44.9", - "@types/node": "^20.10.5", - "eslint": "^8.56.0", "@ledgerhq/eslint-config-dsdk": "workspace:*", - "typescript": "^5.3.3" + "@ledgerhq/tsconfig-dsdk": "workspace:*" } } diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 54c91c599..f134eba37 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "@ledgerhq/tsconfig-dsdk/sdk", "compilerOptions": { "outDir": "./lib" }, diff --git a/packages/signer/package.json b/packages/signer/package.json index 9cc5e0e2f..5ce6af4e4 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -19,10 +19,7 @@ "tsyringe": "^4.8.0" }, "devDependencies": { - "@types/eslint": "^8.44.9", - "@types/node": "^20.10.5", - "eslint": "^8.56.0", - "typescript": "^5.3.3", + "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*" } } diff --git a/packages/signer/tsconfig.json b/packages/signer/tsconfig.json index 54c91c599..f134eba37 100644 --- a/packages/signer/tsconfig.json +++ b/packages/signer/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "@ledgerhq/tsconfig-dsdk/sdk", "compilerOptions": { "outDir": "./lib" }, diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 08ceb0218..8a2a4d402 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -19,10 +19,7 @@ "tsyringe": "^4.8.0" }, "devDependencies": { - "@types/eslint": "^8.44.9", - "@types/node": "^20.10.5", - "eslint": "^8.56.0", - "typescript": "^5.3.3", + "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*" } } diff --git a/packages/trusted-apps/tsconfig.json b/packages/trusted-apps/tsconfig.json index 54c91c599..f134eba37 100644 --- a/packages/trusted-apps/tsconfig.json +++ b/packages/trusted-apps/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "@ledgerhq/tsconfig-dsdk/sdk", "compilerOptions": { "outDir": "./lib" }, diff --git a/packages/tsconfig-dsdk/package.json b/packages/tsconfig-dsdk/package.json new file mode 100644 index 000000000..02d9572ba --- /dev/null +++ b/packages/tsconfig-dsdk/package.json @@ -0,0 +1,15 @@ +{ + "name": "@ledgerhq/tsconfig-dsdk", + "version": "0.0.2", + "files": [ + "sdk.json", + "web.json" + ], + "devDependencies": { + "@tsconfig/recommended": "^1.0.3", + "@types/node": "^20", + "@types/react": "^18", + "@types/eslint": "^8.44.9", + "@types/react-dom": "^18" + } +} \ No newline at end of file diff --git a/tsconfig.base.json b/packages/tsconfig-dsdk/sdk.json similarity index 100% rename from tsconfig.base.json rename to packages/tsconfig-dsdk/sdk.json diff --git a/packages/tsconfig-dsdk/web.json b/packages/tsconfig-dsdk/web.json new file mode 100644 index 000000000..48e2c4476 --- /dev/null +++ b/packages/tsconfig-dsdk/web.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true + } +} diff --git a/packages/ui/package.json b/packages/ui/package.json index 07dc40fe0..2a92c0871 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -19,10 +19,7 @@ "tsyringe": "^4.8.0" }, "devDependencies": { - "@types/eslint": "^8.44.9", - "@types/node": "^20.10.5", - "eslint": "^8.56.0", - "typescript": "^5.3.3", + "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*" } } diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 54c91c599..f134eba37 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "@ledgerhq/tsconfig-dsdk/sdk", "compilerOptions": { "outDir": "./lib" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 33b45ce1a..8e7823976 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,9 +11,9 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:packages/eslint-config-dsdk - '@tsconfig/recommended': - specifier: ^1.0.3 - version: 1.0.3 + '@ledgerhq/tsconfig-dsdk': + specifier: workspace:* + version: link:packages/tsconfig-dsdk eslint: specifier: ^8.56.0 version: 8.56.0 @@ -26,6 +26,9 @@ importers: turbo: specifier: ^1.11.2 version: 1.11.2 + typescript: + specifier: ^5.3.3 + version: 5.3.3 zx: specifier: ^7.2.3 version: 7.2.3 @@ -45,15 +48,9 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../../packages/eslint-config-dsdk - '@types/node': - specifier: ^20 - version: 20.10.5 - '@types/react': - specifier: ^18 - version: 18.2.45 - '@types/react-dom': - specifier: ^18 - version: 18.2.18 + '@ledgerhq/tsconfig-dsdk': + specifier: workspace:* + version: link:../../packages/tsconfig-dsdk autoprefixer: specifier: ^10.0.1 version: 10.4.16(postcss@8.4.32) @@ -69,9 +66,6 @@ importers: tailwindcss: specifier: ^3.3.0 version: 3.3.6 - typescript: - specifier: ^5 - version: 5.3.3 packages/core: dependencies: @@ -85,18 +79,9 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../eslint-config-dsdk - '@types/eslint': - specifier: ^8.44.9 - version: 8.44.9 - '@types/node': - specifier: ^20.10.5 - version: 20.10.5 - eslint: - specifier: ^8.56.0 - version: 8.56.0 - typescript: - specifier: ^5.3.3 - version: 5.3.3 + '@ledgerhq/tsconfig-dsdk': + specifier: workspace:* + version: link:../tsconfig-dsdk packages/eslint-config-dsdk: devDependencies: @@ -134,18 +119,9 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../eslint-config-dsdk - '@types/eslint': - specifier: ^8.44.9 - version: 8.44.9 - '@types/node': - specifier: ^20.10.5 - version: 20.10.5 - eslint: - specifier: ^8.56.0 - version: 8.56.0 - typescript: - specifier: ^5.3.3 - version: 5.3.3 + '@ledgerhq/tsconfig-dsdk': + specifier: workspace:* + version: link:../tsconfig-dsdk packages/trusted-apps: dependencies: @@ -159,18 +135,27 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../eslint-config-dsdk + '@ledgerhq/tsconfig-dsdk': + specifier: workspace:* + version: link:../tsconfig-dsdk + + packages/tsconfig-dsdk: + devDependencies: + '@tsconfig/recommended': + specifier: ^1.0.3 + version: 1.0.3 '@types/eslint': specifier: ^8.44.9 version: 8.44.9 '@types/node': - specifier: ^20.10.5 + specifier: ^20 version: 20.10.5 - eslint: - specifier: ^8.56.0 - version: 8.56.0 - typescript: - specifier: ^5.3.3 - version: 5.3.3 + '@types/react': + specifier: ^18 + version: 18.2.45 + '@types/react-dom': + specifier: ^18 + version: 18.2.18 packages/ui: dependencies: @@ -184,18 +169,9 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../eslint-config-dsdk - '@types/eslint': - specifier: ^8.44.9 - version: 8.44.9 - '@types/node': - specifier: ^20.10.5 - version: 20.10.5 - eslint: - specifier: ^8.56.0 - version: 8.56.0 - typescript: - specifier: ^5.3.3 - version: 5.3.3 + '@ledgerhq/tsconfig-dsdk': + specifier: workspace:* + version: link:../tsconfig-dsdk packages: From 78bc0c6d5242bbbd4d2433f66a72e6251ee02c6f Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 26 Dec 2023 11:09:09 +0100 Subject: [PATCH 013/253] fix: lint --- packages/core/src/api/DeviceSdk.ts | 17 ++++++++--------- packages/core/src/api/DeviceSdkBuilder.ts | 18 +++++++++--------- packages/core/src/transport/Transport.ts | 4 ++-- .../core/src/transport/ble/BleTransport.ts | 4 ++-- packages/eslint-config-dsdk/index.js | 5 ++++- 5 files changed, 25 insertions(+), 23 deletions(-) diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 36baf7f47..06b71cc4a 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -1,11 +1,10 @@ export class DeviceSdk { + /** @internal */ + constructor() { + console.log("Hello world"); + } - /** @internal */ - constructor(){ - - } - - scan() { - - } -} \ No newline at end of file + scan() { + return; + } +} diff --git a/packages/core/src/api/DeviceSdkBuilder.ts b/packages/core/src/api/DeviceSdkBuilder.ts index 86bbca4e0..ebe31a742 100644 --- a/packages/core/src/api/DeviceSdkBuilder.ts +++ b/packages/core/src/api/DeviceSdkBuilder.ts @@ -1,12 +1,12 @@ -import {DeviceSdk} from "./DeviceSdk" +import { DeviceSdk } from "./DeviceSdk"; export class LedgerDeviceSdkBuilder { + //props + constructor() { + console.log("New build"); + } - //props - constructor() { - } - - build(): DeviceSdk { - return new DeviceSdk() - } -} \ No newline at end of file + build(): DeviceSdk { + return new DeviceSdk(); + } +} diff --git a/packages/core/src/transport/Transport.ts b/packages/core/src/transport/Transport.ts index 9c1c26209..071f1dc40 100644 --- a/packages/core/src/transport/Transport.ts +++ b/packages/core/src/transport/Transport.ts @@ -1,5 +1,5 @@ -import { Response } from "./model/Response"; +import { Response } from "./model"; export interface Transport { - send(apduHex: String): Response | undefined; + send(apduHex: string): Response | undefined; } diff --git a/packages/core/src/transport/ble/BleTransport.ts b/packages/core/src/transport/ble/BleTransport.ts index d8edd0060..78ba7f612 100644 --- a/packages/core/src/transport/ble/BleTransport.ts +++ b/packages/core/src/transport/ble/BleTransport.ts @@ -1,8 +1,8 @@ import { Transport } from "../Transport"; -import { Response } from "../model/Response"; +import { Response } from "../model"; export class BleTransport implements Transport { - send(_apduHex: String): Response | undefined { + send(_apduHex: string): Response | undefined { return undefined; } } diff --git a/packages/eslint-config-dsdk/index.js b/packages/eslint-config-dsdk/index.js index 39bb5cd7f..30b405a41 100644 --- a/packages/eslint-config-dsdk/index.js +++ b/packages/eslint-config-dsdk/index.js @@ -42,7 +42,10 @@ module.exports = { rules: { "import/prefer-default-export": "off", "no-void": "off", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], + "@typescript-eslint/consistent-type-definitions": [ + "error", + "interface", + ], "@typescript-eslint/ban-ts-comment": "warn", "@typescript-eslint/no-unsafe-member-access": "warn", "@typescript-eslint/no-shadow": "warn", From f75b4626b13c36e0cf37a41a1ec0a5b00f7959be Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 26 Dec 2023 17:34:54 +0100 Subject: [PATCH 014/253] refactor: mv config packages in separate folder --- .../eslint}/index.js | 0 .../eslint}/package.json | 0 .../eslint}/pnpm-lock.yaml | 0 .../typescript}/package.json | 0 .../typescript}/sdk.json | 0 .../typescript}/web.json | 0 pnpm-lock.yaml | 90 +++++++++---------- pnpm-workspace.yaml | 3 +- 8 files changed, 47 insertions(+), 46 deletions(-) rename packages/{eslint-config-dsdk => config/eslint}/index.js (100%) rename packages/{eslint-config-dsdk => config/eslint}/package.json (100%) rename packages/{eslint-config-dsdk => config/eslint}/pnpm-lock.yaml (100%) rename packages/{tsconfig-dsdk => config/typescript}/package.json (100%) rename packages/{tsconfig-dsdk => config/typescript}/sdk.json (100%) rename packages/{tsconfig-dsdk => config/typescript}/web.json (100%) diff --git a/packages/eslint-config-dsdk/index.js b/packages/config/eslint/index.js similarity index 100% rename from packages/eslint-config-dsdk/index.js rename to packages/config/eslint/index.js diff --git a/packages/eslint-config-dsdk/package.json b/packages/config/eslint/package.json similarity index 100% rename from packages/eslint-config-dsdk/package.json rename to packages/config/eslint/package.json diff --git a/packages/eslint-config-dsdk/pnpm-lock.yaml b/packages/config/eslint/pnpm-lock.yaml similarity index 100% rename from packages/eslint-config-dsdk/pnpm-lock.yaml rename to packages/config/eslint/pnpm-lock.yaml diff --git a/packages/tsconfig-dsdk/package.json b/packages/config/typescript/package.json similarity index 100% rename from packages/tsconfig-dsdk/package.json rename to packages/config/typescript/package.json diff --git a/packages/tsconfig-dsdk/sdk.json b/packages/config/typescript/sdk.json similarity index 100% rename from packages/tsconfig-dsdk/sdk.json rename to packages/config/typescript/sdk.json diff --git a/packages/tsconfig-dsdk/web.json b/packages/config/typescript/web.json similarity index 100% rename from packages/tsconfig-dsdk/web.json rename to packages/config/typescript/web.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e7823976..7c95f6d14 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,10 +10,10 @@ importers: devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* - version: link:packages/eslint-config-dsdk + version: link:packages/config/eslint '@ledgerhq/tsconfig-dsdk': specifier: workspace:* - version: link:packages/tsconfig-dsdk + version: link:packages/config/typescript eslint: specifier: ^8.56.0 version: 8.56.0 @@ -47,10 +47,10 @@ importers: devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* - version: link:../../packages/eslint-config-dsdk + version: link:../../packages/config/eslint '@ledgerhq/tsconfig-dsdk': specifier: workspace:* - version: link:../../packages/tsconfig-dsdk + version: link:../../packages/config/typescript autoprefixer: specifier: ^10.0.1 version: 10.4.16(postcss@8.4.32) @@ -67,23 +67,7 @@ importers: specifier: ^3.3.0 version: 3.3.6 - packages/core: - dependencies: - reflect-metadata: - specifier: ^0.2.1 - version: 0.2.1 - tsyringe: - specifier: ^4.8.0 - version: 4.8.0 - devDependencies: - '@ledgerhq/eslint-config-dsdk': - specifier: workspace:* - version: link:../eslint-config-dsdk - '@ledgerhq/tsconfig-dsdk': - specifier: workspace:* - version: link:../tsconfig-dsdk - - packages/eslint-config-dsdk: + packages/config/eslint: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^6.14.0 @@ -107,7 +91,25 @@ importers: specifier: ^3.1.1 version: 3.1.1 - packages/signer: + packages/config/typescript: + devDependencies: + '@tsconfig/recommended': + specifier: ^1.0.3 + version: 1.0.3 + '@types/eslint': + specifier: ^8.44.9 + version: 8.44.9 + '@types/node': + specifier: ^20 + version: 20.10.5 + '@types/react': + specifier: ^18 + version: 18.2.45 + '@types/react-dom': + specifier: ^18 + version: 18.2.18 + + packages/core: dependencies: reflect-metadata: specifier: ^0.2.1 @@ -118,12 +120,12 @@ importers: devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* - version: link:../eslint-config-dsdk + version: link:../config/eslint '@ledgerhq/tsconfig-dsdk': specifier: workspace:* - version: link:../tsconfig-dsdk + version: link:../config/typescript - packages/trusted-apps: + packages/signer: dependencies: reflect-metadata: specifier: ^0.2.1 @@ -134,28 +136,26 @@ importers: devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* - version: link:../eslint-config-dsdk + version: link:../config/eslint '@ledgerhq/tsconfig-dsdk': specifier: workspace:* - version: link:../tsconfig-dsdk + version: link:../config/typescript - packages/tsconfig-dsdk: + packages/trusted-apps: + dependencies: + reflect-metadata: + specifier: ^0.2.1 + version: 0.2.1 + tsyringe: + specifier: ^4.8.0 + version: 4.8.0 devDependencies: - '@tsconfig/recommended': - specifier: ^1.0.3 - version: 1.0.3 - '@types/eslint': - specifier: ^8.44.9 - version: 8.44.9 - '@types/node': - specifier: ^20 - version: 20.10.5 - '@types/react': - specifier: ^18 - version: 18.2.45 - '@types/react-dom': - specifier: ^18 - version: 18.2.18 + '@ledgerhq/eslint-config-dsdk': + specifier: workspace:* + version: link:../config/eslint + '@ledgerhq/tsconfig-dsdk': + specifier: workspace:* + version: link:../config/typescript packages/ui: dependencies: @@ -168,10 +168,10 @@ importers: devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* - version: link:../eslint-config-dsdk + version: link:../config/eslint '@ledgerhq/tsconfig-dsdk': specifier: workspace:* - version: link:../tsconfig-dsdk + version: link:../config/typescript packages: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3e712d3ca..1ef739a9b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - "apps/*" - - "packages/*" \ No newline at end of file + - "packages/*" + - "packages/config/*" \ No newline at end of file From 4b25a4ab9222b24850d7c8d0a8566a8cab2d5ce2 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 26 Dec 2023 17:54:39 +0100 Subject: [PATCH 015/253] fix: missing empty lines --- README.md | 2 +- packages/config/eslint/package.json | 2 +- packages/config/typescript/package.json | 5 +++-- packages/config/typescript/sdk.json | 2 +- packages/core/.gitignore | 0 packages/core/package.json | 2 +- packages/core/src/transport/ble/index.ts | 2 +- packages/core/tsconfig.json | 4 ++-- packages/signer/package.json | 2 +- packages/signer/tsconfig.json | 4 ++-- packages/trusted-apps/package.json | 2 +- packages/trusted-apps/tsconfig.json | 4 ++-- packages/ui/package.json | 2 +- packages/ui/tsconfig.json | 4 ++-- pnpm-lock.yaml | 6 +++--- pnpm-workspace.yaml | 2 +- 16 files changed, 23 insertions(+), 22 deletions(-) delete mode 100644 packages/core/.gitignore diff --git a/README.md b/README.md index ca41da456..37a6d273b 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -Ledger Device SDK \ No newline at end of file +Ledger Device SDK diff --git a/packages/config/eslint/package.json b/packages/config/eslint/package.json index b671fe81a..08444c4f8 100644 --- a/packages/config/eslint/package.json +++ b/packages/config/eslint/package.json @@ -15,4 +15,4 @@ "eslint-plugin-only-warn": "^1.1.0", "prettier": "^3.1.1" } -} \ No newline at end of file +} diff --git a/packages/config/typescript/package.json b/packages/config/typescript/package.json index 02d9572ba..75d555cb3 100644 --- a/packages/config/typescript/package.json +++ b/packages/config/typescript/package.json @@ -1,6 +1,7 @@ { "name": "@ledgerhq/tsconfig-dsdk", - "version": "0.0.2", + "version": "1.0.0", + "private": true, "files": [ "sdk.json", "web.json" @@ -12,4 +13,4 @@ "@types/eslint": "^8.44.9", "@types/react-dom": "^18" } -} \ No newline at end of file +} diff --git a/packages/config/typescript/sdk.json b/packages/config/typescript/sdk.json index 7d362eaa5..1dd80c3ef 100644 --- a/packages/config/typescript/sdk.json +++ b/packages/config/typescript/sdk.json @@ -25,4 +25,4 @@ "emitDecoratorMetadata": true }, "exclude": ["node_modules"] -} \ No newline at end of file +} diff --git a/packages/core/.gitignore b/packages/core/.gitignore deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/core/package.json b/packages/core/package.json index 736e332c2..cc3fec4d2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -8,7 +8,7 @@ "/lib" ], "scripts": { - "build": "tsc", + "build": "rm -rf lib && tsc", "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", diff --git a/packages/core/src/transport/ble/index.ts b/packages/core/src/transport/ble/index.ts index af4ed328d..78fc74e22 100644 --- a/packages/core/src/transport/ble/index.ts +++ b/packages/core/src/transport/ble/index.ts @@ -1 +1 @@ -export { BleTransport } from "./BleTransport" \ No newline at end of file +export { BleTransport } from "./BleTransport"; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index f134eba37..a2bc8e4f8 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*", "jest.config.ts", "tests/**/*"] -} \ No newline at end of file + "include": ["src/**/*"] +} diff --git a/packages/signer/package.json b/packages/signer/package.json index 5ce6af4e4..e67f64b7a 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -8,7 +8,7 @@ "/lib" ], "scripts": { - "build": "tsc", + "build": "rm -rf lib && tsc", "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", diff --git a/packages/signer/tsconfig.json b/packages/signer/tsconfig.json index f134eba37..a2bc8e4f8 100644 --- a/packages/signer/tsconfig.json +++ b/packages/signer/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*", "jest.config.ts", "tests/**/*"] -} \ No newline at end of file + "include": ["src/**/*"] +} diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 8a2a4d402..082cee5f0 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -8,7 +8,7 @@ "/lib" ], "scripts": { - "build": "tsc", + "build": "rm -rf lib && tsc", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "dev": "tsc --watch", diff --git a/packages/trusted-apps/tsconfig.json b/packages/trusted-apps/tsconfig.json index f134eba37..a2bc8e4f8 100644 --- a/packages/trusted-apps/tsconfig.json +++ b/packages/trusted-apps/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*", "jest.config.ts", "tests/**/*"] -} \ No newline at end of file + "include": ["src/**/*"] +} diff --git a/packages/ui/package.json b/packages/ui/package.json index 2a92c0871..a85861856 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -8,7 +8,7 @@ "/lib" ], "scripts": { - "build": "tsc", + "build": "rm -rf lib && tsc", "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index f134eba37..a2bc8e4f8 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*", "jest.config.ts", "tests/**/*"] -} \ No newline at end of file + "include": ["src/**/*"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7c95f6d14..5b296b4e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,7 +98,7 @@ importers: version: 1.0.3 '@types/eslint': specifier: ^8.44.9 - version: 8.44.9 + version: 8.56.0 '@types/node': specifier: ^20 version: 20.10.5 @@ -649,8 +649,8 @@ packages: resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} dev: true - /@types/eslint@8.44.9: - resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} + /@types/eslint@8.56.0: + resolution: {integrity: sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1ef739a9b..2d079a51a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,4 @@ packages: - "apps/*" - "packages/*" - - "packages/config/*" \ No newline at end of file + - "packages/config/*" From 4f7e9e1e164091f4c419280d2ea0a843d32a357c Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Wed, 27 Dec 2023 15:49:30 +0100 Subject: [PATCH 016/253] chore: inversify instead of tsyring --- packages/config/eslint/pnpm-lock.yaml | 3118 ------------------------- packages/config/typescript/sdk.json | 5 +- packages/core/package.json | 6 +- packages/core/pnpm-lock.yaml | 700 ------ packages/signer/package.json | 6 +- packages/trusted-apps/package.json | 6 +- packages/ui/package.json | 6 +- pnpm-lock.yaml | 36 +- 8 files changed, 33 insertions(+), 3850 deletions(-) delete mode 100644 packages/config/eslint/pnpm-lock.yaml delete mode 100644 packages/core/pnpm-lock.yaml diff --git a/packages/config/eslint/pnpm-lock.yaml b/packages/config/eslint/pnpm-lock.yaml deleted file mode 100644 index d9e4d1b0d..000000000 --- a/packages/config/eslint/pnpm-lock.yaml +++ /dev/null @@ -1,3118 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -devDependencies: - '@vercel/style-guide': - specifier: ^4.0.2 - version: 4.0.2(eslint@8.56.0)(typescript@5.3.3) - eslint-config-turbo: - specifier: ^1.10.12 - version: 1.11.2(eslint@8.56.0) - -packages: - - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - dev: true - - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - dev: true - - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/core@7.23.6: - resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helpers': 7.23.6 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.6 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.56.0): - resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@babel/core': 7.23.6 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.56.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - dev: true - - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - jsesc: 2.5.2 - dev: true - - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helpers@7.23.6: - resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.6 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/runtime@7.23.6: - resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: true - - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - dev: true - - /@babel/traverse@7.23.6: - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: true - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - dev: true - - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /@microsoft/tsdoc-config@0.16.2: - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 - dev: true - - /@microsoft/tsdoc@0.14.2: - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} - dev: true - - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - dependencies: - eslint-scope: 5.1.1 - dev: true - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - - /@pkgr/utils@2.4.2: - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 - dev: true - - /@rushstack/eslint-patch@1.6.1: - resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} - dev: true - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true - - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true - - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: true - - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare-lite: 1.4.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.56.0 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - - /@typescript-eslint/type-utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.56.0 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - eslint: 8.56.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /@vercel/style-guide@4.0.2(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-FroL+oOePzhw7n/I+f7zr4WNroGHT/+2TlW6WH9+CVSjMNsEyu7Qstj2mI5gWIBjT1Y2ZImKPppCzI2cIYmNZw==} - engines: {node: '>=16'} - peerDependencies: - '@next/eslint-plugin-next': ^12.3.0 - eslint: ^8.24.0 - prettier: ^2.7.0 - typescript: ^4.8.0 - peerDependenciesMeta: - '@next/eslint-plugin-next': - optional: true - eslint: - optional: true - prettier: - optional: true - typescript: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - eslint-config-prettier: 8.10.0(eslint@8.56.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-playwright: 0.11.2(eslint-plugin-jest@27.6.0)(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - eslint-plugin-testing-library: 5.11.1(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 43.0.2(eslint@8.56.0) - prettier-plugin-packagejson: 2.4.7 - typescript: 5.3.3 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - jest - - supports-color - dev: true - - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.2 - dev: true - - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - dependencies: - dequal: 2.0.3 - dev: true - - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - dev: true - - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-string: 1.0.7 - dev: true - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true - - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - dev: true - - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - dev: true - - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - dev: true - - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true - - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: true - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - dev: true - - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - dependencies: - dequal: 2.0.3 - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - dev: true - - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.52 - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001570 - electron-to-chromium: 1.4.614 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) - dev: true - - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true - - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - dependencies: - run-applescript: 5.0.0 - dev: true - - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /caniuse-lite@1.0.30001570: - resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true - - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true - - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - dev: true - - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: true - - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 - object-keys: 1.1.1 - dev: true - - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: true - - /detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - dev: true - - /detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - dev: true - - /electron-to-chromium@1.4.614: - resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} - dev: true - - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true - - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: true - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: true - - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - 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.12 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - 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.13 - dev: true - - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} - dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.6 - iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 - dev: true - - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 - dev: true - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.0 - dev: true - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /eslint-config-prettier@8.10.0(eslint@8.56.0): - resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.56.0 - dev: true - - /eslint-config-turbo@1.11.2(eslint@8.56.0): - resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} - peerDependencies: - eslint: '>6.6.0' - dependencies: - eslint: 8.56.0 - eslint-plugin-turbo: 1.11.2(eslint@8.56.0) - dev: true - - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' - dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - dev: true - - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - escape-string-regexp: 1.0.5 - eslint: 8.56.0 - ignore: 5.3.0 - dev: true - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - hasown: 2.0.0 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.23.6 - aria-query: 5.3.0 - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - hasown: 2.0.0 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - dev: true - - /eslint-plugin-playwright@0.11.2(eslint-plugin-jest@27.6.0)(eslint@8.56.0): - resolution: {integrity: sha512-uRLRLk7uTzc8NE6t4wBU8dijQwHvC66R/h7xwdM779jsJjMUtSmeaB8ayRkkpfwi+UU5BEfwvDANwmE+ccMVDw==} - peerDependencies: - eslint: '>=7' - eslint-plugin-jest: '>=24' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true - dependencies: - eslint: 8.56.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.56.0)(typescript@5.3.3) - dev: true - - /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.56.0 - dev: true - - /eslint-plugin-react@7.33.2(eslint@8.56.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: true - - /eslint-plugin-testing-library@5.11.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - dev: true - - /eslint-plugin-turbo@1.11.2(eslint@8.56.0): - resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} - peerDependencies: - eslint: '>6.6.0' - dependencies: - dotenv: 16.0.3 - eslint: 8.56.0 - dev: true - - /eslint-plugin-unicorn@43.0.2(eslint@8.56.0): - resolution: {integrity: sha512-DtqZ5mf/GMlfWoz1abIjq5jZfaFuHzGBZYIeuJfEoKKGWRHr2JiJR+ea+BF7Wx2N1PPRoT/2fwgiK1NnmNE3Hg==} - engines: {node: '>=14.18'} - peerDependencies: - eslint: '>=8.18.0' - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - ci-info: 3.9.0 - clean-regexp: 1.0.0 - eslint: 8.56.0 - eslint-utils: 3.0.0(eslint@8.56.0) - esquery: 1.5.0 - indent-string: 4.0.0 - is-builtin-module: 3.2.1 - lodash: 4.17.21 - pluralize: 8.0.0 - read-pkg-up: 7.0.1 - regexp-tree: 0.1.27 - safe-regex: 2.1.1 - semver: 7.5.4 - strip-indent: 3.0.0 - dev: true - - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-utils@3.0.0(eslint@8.56.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - dev: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - 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 - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: true - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true - - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true - - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true - - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} - dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - dev: true - - /get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true - - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} - dependencies: - resolve-pkg-maps: 1.0.0 - dev: true - - /git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true - - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - dev: true - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.2 - dev: true - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - dependencies: - get-intrinsic: 1.2.2 - dev: true - - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - dev: true - - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true - - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 - dev: true - - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true - - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true - - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.0 - dev: true - - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - dependencies: - call-bind: 1.0.5 - dev: true - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true - - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: true - - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true - - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true - - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.5 - dev: true - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.13 - dev: true - - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.5 - dev: true - - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 - dev: true - - /jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - dev: true - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.1.7 - dev: true - - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: true - - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true - - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - dependencies: - language-subtag-registry: 0.3.22 - dev: true - - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true - - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: true - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: true - - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: true - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true - - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true - - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true - - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true - - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - dev: true - - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: 4.0.0 - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true - - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - dev: true - - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: true - - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - dependencies: - mimic-fn: 4.0.0 - dev: true - - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 - dev: true - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.23.5 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - - /prettier-plugin-packagejson@2.4.7: - resolution: {integrity: sha512-/n1HGcBbuJyTlD3tb2/tW1mT5WIR6FCo+bAijHF6pNoSBf8YoxoskawjSY2ku9/8d6mdzci7oMchziI7CYEWYg==} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true - dependencies: - sort-package-json: 2.6.0 - synckit: 0.8.6 - dev: true - - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: true - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true - - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true - - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true - - /reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 - dev: true - - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true - - /regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - dev: true - - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - set-function-name: 2.0.1 - dev: true - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true - - /resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - dev: true - - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} - dependencies: - execa: 5.1.1 - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - isarray: 2.0.5 - dev: true - - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-regex: 1.1.4 - dev: true - - /safe-regex@2.1.1: - resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} - dependencies: - regexp-tree: 0.1.27 - dev: true - - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true - - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true - - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: true - - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 - dev: true - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 - dev: true - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true - - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - - /sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - dev: true - - /sort-package-json@2.6.0: - resolution: {integrity: sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==} - hasBin: true - dependencies: - detect-indent: 7.0.1 - detect-newline: 4.0.1 - get-stdin: 9.0.0 - git-hooks-list: 3.1.0 - globby: 13.2.2 - is-plain-obj: 4.1.0 - sort-object-keys: 1.1.3 - dev: true - - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 - dev: true - - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true - - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 - dev: true - - /spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} - dev: true - - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - internal-slot: 1.0.6 - regexp.prototype.flags: 1.5.1 - set-function-name: 2.0.1 - side-channel: 1.0.4 - dev: true - - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true - - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - dependencies: - min-indent: 1.0.1 - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /synckit@0.8.6: - resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} - engines: {node: ^14.18.0 || >=16.0.0} - dependencies: - '@pkgr/utils': 2.4.2 - tslib: 2.6.2 - dev: true - - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - - /titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - dev: true - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true - - /tsutils@3.21.0(typescript@5.3.3): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.3.3 - dev: true - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true - - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true - - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true - - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true - - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true - - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - is-typed-array: 1.1.12 - dev: true - - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.5 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true - - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - - /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: true - - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - dev: true - - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 - dev: true - - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - dev: true - - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - dev: true - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true diff --git a/packages/config/typescript/sdk.json b/packages/config/typescript/sdk.json index 1dd80c3ef..01cbc5a40 100644 --- a/packages/config/typescript/sdk.json +++ b/packages/config/typescript/sdk.json @@ -1,7 +1,9 @@ { "extends": "@tsconfig/recommended/tsconfig.json", "compilerOptions": { - "target": "ES2022", + "target": "esnext", + "lib": ["esnext", "dom"], + "types": ["reflect-metadata"], "sourceMap": true, "declaration": true, "declarationMap": true, @@ -22,6 +24,7 @@ "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "experimentalDecorators": true, + "stripInternal": true, "emitDecoratorMetadata": true }, "exclude": ["node_modules"] diff --git a/packages/core/package.json b/packages/core/package.json index cc3fec4d2..476f051cc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -15,9 +15,9 @@ "feature": "zx scripts/add-feature.mjs", "test": "echo \"Error: no test specified\" && exit 1" }, - "peerDependencies": { - "reflect-metadata": "^0.2.1", - "tsyringe": "^4.8.0" + "dependencies": { + "inversify": "^6.0.2", + "reflect-metadata": "^0.2.1" }, "devDependencies": { "@ledgerhq/eslint-config-dsdk": "workspace:*", diff --git a/packages/core/pnpm-lock.yaml b/packages/core/pnpm-lock.yaml deleted file mode 100644 index 4dbd7edbb..000000000 --- a/packages/core/pnpm-lock.yaml +++ /dev/null @@ -1,700 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -devDependencies: - '@types/eslint': - specifier: ^8.44.9 - version: 8.44.9 - '@types/node': - specifier: ^20.10.5 - version: 20.10.5 - eslint: - specifier: ^8.56.0 - version: 8.56.0 - typescript: - specifier: ^5.3.3 - version: 5.3.3 - -packages: - - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: true - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - - /@types/eslint@8.44.9: - resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - dev: true - - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/node@20.10.5: - resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.2 - dev: true - - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - dev: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: true - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: true - - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: true - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true diff --git a/packages/signer/package.json b/packages/signer/package.json index e67f64b7a..2c4a6bba6 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -14,9 +14,9 @@ "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "test": "echo \"Error: no test specified\" && exit 1" }, - "peerDependencies": { - "reflect-metadata": "^0.2.1", - "tsyringe": "^4.8.0" + "dependencies": { + "inversify": "^6.0.2", + "reflect-metadata": "^0.2.1" }, "devDependencies": { "@ledgerhq/tsconfig-dsdk": "workspace:*", diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 082cee5f0..61a88f3e0 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -14,9 +14,9 @@ "dev": "tsc --watch", "test": "echo \"Error: no test specified\" && exit 1" }, - "peerDependencies": { - "reflect-metadata": "^0.2.1", - "tsyringe": "^4.8.0" + "dependencies": { + "inversify": "^6.0.2", + "reflect-metadata": "^0.2.1" }, "devDependencies": { "@ledgerhq/tsconfig-dsdk": "workspace:*", diff --git a/packages/ui/package.json b/packages/ui/package.json index a85861856..2bb154133 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -14,9 +14,9 @@ "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "test": "echo \"Error: no test specified\" && exit 1" }, - "peerDependencies": { - "reflect-metadata": "^0.2.1", - "tsyringe": "^4.8.0" + "dependencies": { + "inversify": "^6.0.2", + "reflect-metadata": "^0.2.1" }, "devDependencies": { "@ledgerhq/tsconfig-dsdk": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b296b4e0..9b2732e28 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -111,12 +111,12 @@ importers: packages/core: dependencies: + inversify: + specifier: ^6.0.2 + version: 6.0.2 reflect-metadata: specifier: ^0.2.1 version: 0.2.1 - tsyringe: - specifier: ^4.8.0 - version: 4.8.0 devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -127,12 +127,12 @@ importers: packages/signer: dependencies: + inversify: + specifier: ^6.0.2 + version: 6.0.2 reflect-metadata: specifier: ^0.2.1 version: 0.2.1 - tsyringe: - specifier: ^4.8.0 - version: 4.8.0 devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -143,12 +143,12 @@ importers: packages/trusted-apps: dependencies: + inversify: + specifier: ^6.0.2 + version: 6.0.2 reflect-metadata: specifier: ^0.2.1 version: 0.2.1 - tsyringe: - specifier: ^4.8.0 - version: 4.8.0 devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -159,12 +159,12 @@ importers: packages/ui: dependencies: + inversify: + specifier: ^6.0.2 + version: 6.0.2 reflect-metadata: specifier: ^0.2.1 version: 0.2.1 - tsyringe: - specifier: ^4.8.0 - version: 4.8.0 devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -2698,6 +2698,10 @@ packages: side-channel: 1.0.4 dev: true + /inversify@6.0.2: + resolution: {integrity: sha512-i9m8j/7YIv4mDuYXUAcrpKPSaju/CIly9AHK5jvCBeoiM/2KEsuCQTTP+rzSWWpLYWRukdXFSl6ZTk2/uumbiA==} + dev: false + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -4268,6 +4272,7 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -4282,13 +4287,6 @@ packages: typescript: 5.3.3 dev: true - /tsyringe@4.8.0: - resolution: {integrity: sha512-YB1FG+axdxADa3ncEtRnQCFq/M0lALGLxSZeVNbTU8NqhOVc51nnv2CISTcvc1kyv6EGPtXVr0v6lWeDxiijOA==} - engines: {node: '>= 6.0.0'} - dependencies: - tslib: 1.14.1 - dev: false - /turbo-darwin-64@1.11.2: resolution: {integrity: sha512-toFmRG/adriZY3hOps7nYCfqHAS+Ci6xqgX3fbo82kkLpC6OBzcXnleSwuPqjHVAaRNhVoB83L5njcE9Qwi2og==} cpu: [x64] From cc09a77e0742ae6a7390145728ed3d48e334cb61 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Wed, 27 Dec 2023 15:59:36 +0100 Subject: [PATCH 017/253] chore: clean .gitkeep & review --- packages/config/typescript/package.json | 2 +- packages/core/src/api/.gitkeep | 0 packages/core/src/api/DeviceSdk.ts | 6 +++++- packages/core/src/api/DeviceSdkBuilder.ts | 1 - packages/core/src/transport/.gitkeep | 0 packages/signer/src/.gitkeep | 0 packages/trusted-apps/src/.gitkeep | 0 packages/ui/src/.gitkeep | 0 8 files changed, 6 insertions(+), 3 deletions(-) delete mode 100644 packages/core/src/api/.gitkeep delete mode 100644 packages/core/src/transport/.gitkeep delete mode 100644 packages/signer/src/.gitkeep delete mode 100644 packages/trusted-apps/src/.gitkeep delete mode 100644 packages/ui/src/.gitkeep diff --git a/packages/config/typescript/package.json b/packages/config/typescript/package.json index 75d555cb3..d65deacf5 100644 --- a/packages/config/typescript/package.json +++ b/packages/config/typescript/package.json @@ -8,9 +8,9 @@ ], "devDependencies": { "@tsconfig/recommended": "^1.0.3", + "@types/eslint": "^8.44.9", "@types/node": "^20", "@types/react": "^18", - "@types/eslint": "^8.44.9", "@types/react-dom": "^18" } } diff --git a/packages/core/src/api/.gitkeep b/packages/core/src/api/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 06b71cc4a..48b35004a 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -4,7 +4,11 @@ export class DeviceSdk { console.log("Hello world"); } - scan() { + startScan() { + return; + } + + stopScan() { return; } } diff --git a/packages/core/src/api/DeviceSdkBuilder.ts b/packages/core/src/api/DeviceSdkBuilder.ts index ebe31a742..96e058aa1 100644 --- a/packages/core/src/api/DeviceSdkBuilder.ts +++ b/packages/core/src/api/DeviceSdkBuilder.ts @@ -1,7 +1,6 @@ import { DeviceSdk } from "./DeviceSdk"; export class LedgerDeviceSdkBuilder { - //props constructor() { console.log("New build"); } diff --git a/packages/core/src/transport/.gitkeep b/packages/core/src/transport/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/signer/src/.gitkeep b/packages/signer/src/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/trusted-apps/src/.gitkeep b/packages/trusted-apps/src/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ui/src/.gitkeep b/packages/ui/src/.gitkeep deleted file mode 100644 index e69de29bb..000000000 From 7d5ab2431478d541701f4d2dd149fdbf931a0fe5 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Wed, 3 Jan 2024 16:30:54 +0100 Subject: [PATCH 018/253] fix(packages): files export --- apps/sample/package.json | 1 - packages/core/package.json | 2 +- packages/signer/package.json | 2 +- packages/trusted-apps/package.json | 2 +- packages/ui/package.json | 2 +- pnpm-lock.yaml | 3 --- 6 files changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/sample/package.json b/apps/sample/package.json index 7913dc952..c725b6da3 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -17,7 +17,6 @@ "autoprefixer": "^10.0.1", "postcss": "^8", "tailwindcss": "^3.3.0", - "eslint": "^8", "eslint-config-next": "14.0.4", "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*" diff --git a/packages/core/package.json b/packages/core/package.json index 476f051cc..c0a201905 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -5,7 +5,7 @@ "main": "lib/index.js", "types": "lib/index.d.ts", "files": [ - "/lib" + "./lib" ], "scripts": { "build": "rm -rf lib && tsc", diff --git a/packages/signer/package.json b/packages/signer/package.json index 2c4a6bba6..40c27f557 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -5,7 +5,7 @@ "main": "lib/index.js", "types": "lib/index.d.ts", "files": [ - "/lib" + "./lib" ], "scripts": { "build": "rm -rf lib && tsc", diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 61a88f3e0..9b08b7c3d 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -5,7 +5,7 @@ "main": "lib/index.js", "types": "lib/index.d.ts", "files": [ - "/lib" + "./lib" ], "scripts": { "build": "rm -rf lib && tsc", diff --git a/packages/ui/package.json b/packages/ui/package.json index 2bb154133..cebf96ca5 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -5,7 +5,7 @@ "main": "lib/index.js", "types": "lib/index.d.ts", "files": [ - "/lib" + "./lib" ], "scripts": { "build": "rm -rf lib && tsc", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b2732e28..48cc5f4d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,9 +54,6 @@ importers: autoprefixer: specifier: ^10.0.1 version: 10.4.16(postcss@8.4.32) - eslint: - specifier: ^8 - version: 8.56.0 eslint-config-next: specifier: 14.0.4 version: 14.0.4(eslint@8.56.0)(typescript@5.3.3) From 75f2b87febed9f571522b45fafed5685ce1154ee Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 4 Jan 2024 17:12:21 +0100 Subject: [PATCH 019/253] chore(setup): review --- .github/workflows/pull_request.yml | 3 --- .gitignore | 3 ++- package.json | 12 ++++----- packages/config/eslint/index.js | 4 ++- packages/config/eslint/package.json | 3 +-- packages/core/scripts/add-feature.mjs | 3 +-- packages/core/src/transport/model/Response.ts | 5 +--- packages/core/src/transport/model/index.ts | 2 +- pnpm-lock.yaml | 27 +++---------------- 9 files changed, 18 insertions(+), 44 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 172405300..a25ae9faa 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -15,11 +15,8 @@ jobs: - uses: pnpm/action-setup@v2 name: Install pnpm - with: - run_install: false - name: Get pnpm store directory - shell: bash run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV diff --git a/.gitignore b/.gitignore index f13922b16..0c5819f92 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ node_modules # IDE .idea +.vscode *.iml # misc @@ -32,4 +33,4 @@ lib .turbo # eslint -.eslintcache \ No newline at end of file +.eslintcache diff --git a/package.json b/package.json index 801d90ec5..a770087d4 100644 --- a/package.json +++ b/package.json @@ -12,18 +12,18 @@ "dev": "turbo dev", "lint": "turbo run lint", "lint:fix": "turbo run lint:fix", - "core": "turbo --filter @ledgerhq/device-sdk-core", - "signer": "turbo --filter @ledgerhq/device-sdk-signer", - "trusted-apps": "turbo --filter @ledgerhq/device-sdk-trusted-apps", - "ui": "turbo --filter @ledgerhq/device-sdk-ui", - "sample": "turbo --filter @ledgerhq/device-sdk-sample", + "core": "pnpm --filter @ledgerhq/device-sdk-core", + "signer": "pnpm --filter @ledgerhq/device-sdk-signer", + "trusted-apps": "pnpm --filter @ledgerhq/device-sdk-trusted-apps", + "ui": "pnpm --filter @ledgerhq/device-sdk-ui", + "sample": "pnpm --filter @ledgerhq/device-sdk-sample", "test": "echo \"Error: no test specified\" && exit 1" }, "devDependencies": { "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", "lint-staged": "^15.2.0", - "path": "^0.12.7", + "prettier": "^3.1.1", "turbo": "^1.11.2", "eslint": "^8.56.0", "typescript": "^5.3.3", diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index 30b405a41..908adfe53 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -9,9 +9,11 @@ module.exports = { globals: { React: true, JSX: true, + node: true, + console: true, }, env: { - node: true, + es6: true, }, settings: { "import/resolver": { diff --git a/packages/config/eslint/package.json b/packages/config/eslint/package.json index 08444c4f8..498150738 100644 --- a/packages/config/eslint/package.json +++ b/packages/config/eslint/package.json @@ -12,7 +12,6 @@ "@vercel/style-guide": "^5.1.0", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^1.10.12", - "eslint-plugin-only-warn": "^1.1.0", - "prettier": "^3.1.1" + "eslint-plugin-only-warn": "^1.1.0" } } diff --git a/packages/core/scripts/add-feature.mjs b/packages/core/scripts/add-feature.mjs index 8e51c6b2a..597074c8f 100644 --- a/packages/core/scripts/add-feature.mjs +++ b/packages/core/scripts/add-feature.mjs @@ -1,6 +1,5 @@ #!/usr/bin/env zx -import { basename } from 'path'; - +import { basename } from "node:path"; const features = argv._; if (!features.length) { diff --git a/packages/core/src/transport/model/Response.ts b/packages/core/src/transport/model/Response.ts index 3644e8373..4c0b2b92a 100644 --- a/packages/core/src/transport/model/Response.ts +++ b/packages/core/src/transport/model/Response.ts @@ -1,4 +1 @@ - -export class Response { - -} \ No newline at end of file +export class Response {} diff --git a/packages/core/src/transport/model/index.ts b/packages/core/src/transport/model/index.ts index 7065f1f04..2f4d82263 100644 --- a/packages/core/src/transport/model/index.ts +++ b/packages/core/src/transport/model/index.ts @@ -1 +1 @@ -export { Response } from "./Response"; +export type { Response } from "./Response"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 48cc5f4d8..49e572cb7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,9 +20,9 @@ importers: lint-staged: specifier: ^15.2.0 version: 15.2.0 - path: - specifier: ^0.12.7 - version: 0.12.7 + prettier: + specifier: ^3.1.1 + version: 3.1.1 turbo: specifier: ^1.11.2 version: 1.11.2 @@ -84,9 +84,6 @@ importers: eslint-plugin-only-warn: specifier: ^1.1.0 version: 1.1.0 - prettier: - specifier: ^3.1.1 - version: 3.1.1 packages/config/typescript: devDependencies: @@ -3503,13 +3500,6 @@ packages: engines: {node: '>=8'} dev: true - /path@0.12.7: - resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} - dependencies: - process: 0.11.10 - util: 0.10.4 - dev: true - /pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} dependencies: @@ -3648,11 +3638,6 @@ packages: hasBin: true dev: true - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true - /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -4459,12 +4444,6 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util@0.10.4: - resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} - dependencies: - inherits: 2.0.3 - dev: true - /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: From 2626cc822573d9a2de8f900dbb6ac9059a67280a Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 16 Jan 2024 15:49:36 +0100 Subject: [PATCH 020/253] chore: add case for .mjs files + zx typings --- packages/config/eslint/index.js | 8 ++++++++ packages/core/scripts/add-feature.mjs | 9 +++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index 908adfe53..da705940c 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -61,5 +61,13 @@ module.exports = { ], }, }, + { + files: ["**/*.mjs"], + env: { + es6: true, + node: true, + console: true, + }, + }, ], }; diff --git a/packages/core/scripts/add-feature.mjs b/packages/core/scripts/add-feature.mjs index 597074c8f..6300fb4ef 100644 --- a/packages/core/scripts/add-feature.mjs +++ b/packages/core/scripts/add-feature.mjs @@ -1,14 +1,15 @@ #!/usr/bin/env zx +import "zx/globals"; import { basename } from "node:path"; const features = argv._; if (!features.length) { - await console.error(`Usage: ${basename(__filename)} [ ...]`); + console.error(`Usage: ${basename(__filename)} [ ...]`); process.exit(1); } within(async () => { - cd('src'); + cd("src"); for (const feature of features) { const rootFolderName = `${feature}-feature`; await $`mkdir ${rootFolderName}`; @@ -16,6 +17,6 @@ within(async () => { cd(rootFolderName); await $`mkdir entities data use-cases repository`; await $`touch entities/.gitkeep data/.gitkeep use-cases/.gitkeep repository/.gitkeep`; - }) + }); } -}) +}); From 024c66c46e5afebb866a2cb3fe696e7f6e9959a5 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 16 Jan 2024 16:27:26 +0100 Subject: [PATCH 021/253] chore: fix wrong envs in eslint config --- packages/config/eslint/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index da705940c..d8128b02e 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -66,7 +66,6 @@ module.exports = { env: { es6: true, node: true, - console: true, }, }, ], From 2c443d1391238046d85ff603aa71d098ea508ab5 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 16 Jan 2024 16:49:55 +0100 Subject: [PATCH 022/253] chore: finetune zx eslint support --- packages/config/eslint/index.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index d8128b02e..bc361a3ef 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -67,6 +67,36 @@ module.exports = { es6: true, node: true, }, + globals: { + log: true, + $: true, + argv: true, + cd: true, + chalk: true, + echo: true, + expBackoff: true, + fs: true, + glob: true, + globby: true, + nothrow: true, + os: true, + path: true, + question: true, + quiet: true, + quote: true, + quotePowerShell: true, + retry: true, + sleep: true, + spinner: true, + ssh: true, + stdin: true, + which: true, + within: true, + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: "module", + }, }, ], }; From 6c0c4fe8b9cab9f3184ded6bdaa54f684d80adbd Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Wed, 27 Dec 2023 13:26:32 +0100 Subject: [PATCH 023/253] chore: setup jest with shared config --- .github/workflows/pull_request.yml | 6 +- package.json | 19 +- packages/config/jest/jest-preset.js | 9 + packages/config/jest/package.json | 11 + packages/config/typescript/package.json | 1 - packages/config/typescript/sdk.json | 2 +- packages/core/jest.config.ts | 7 + packages/core/package.json | 5 +- packages/signer/jest.config.ts | 7 + packages/signer/package.json | 5 +- packages/signer/tests/index.spec.ts | 7 + packages/trusted-apps/jest.config.ts | 7 + packages/trusted-apps/package.json | 5 +- packages/ui/jest.config.ts | 7 + packages/ui/package.json | 5 +- pnpm-lock.yaml | 1780 +++++++++++++++++++++-- turbo.json | 5 + 17 files changed, 1705 insertions(+), 183 deletions(-) create mode 100644 packages/config/jest/jest-preset.js create mode 100644 packages/config/jest/package.json create mode 100644 packages/core/jest.config.ts create mode 100644 packages/signer/jest.config.ts create mode 100644 packages/signer/tests/index.spec.ts create mode 100644 packages/trusted-apps/jest.config.ts create mode 100644 packages/ui/jest.config.ts diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index a25ae9faa..a2b454c77 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,7 +1,7 @@ name: pull_request on: [pull_request] jobs: - lint: + test: runs-on: [device-sdk-4xlarge-linux] env: CI_JOB_NUMBER: 1 @@ -31,5 +31,5 @@ jobs: - name: Install dependencies run: pnpm install - - name: Lint - run: pnpm lint + - name: Test + run: pnpm test diff --git a/package.json b/package.json index a770087d4..269b18bfc 100644 --- a/package.json +++ b/package.json @@ -8,24 +8,25 @@ "apps/*" ], "scripts": { - "build": "turbo build", - "dev": "turbo dev", - "lint": "turbo run lint", - "lint:fix": "turbo run lint:fix", + "build": "turbo build --log-order=grouped", + "dev": "turbo dev --log-order=grouped", + "lint": "turbo run lint --log-order=grouped", + "lint:fix": "turbo run lint:fix --log-order=grouped", + "test": "turbo run test --log-order=grouped", "core": "pnpm --filter @ledgerhq/device-sdk-core", "signer": "pnpm --filter @ledgerhq/device-sdk-signer", "trusted-apps": "pnpm --filter @ledgerhq/device-sdk-trusted-apps", "ui": "pnpm --filter @ledgerhq/device-sdk-ui", - "sample": "pnpm --filter @ledgerhq/device-sdk-sample", - "test": "echo \"Error: no test specified\" && exit 1" + "sample": "pnpm --filter @ledgerhq/device-sdk-sample" }, "devDependencies": { - "@ledgerhq/eslint-config-dsdk": "workspace:*", - "@ledgerhq/tsconfig-dsdk": "workspace:*", + "@types/jest": "^29.5.11", + "@types/node": "^20.10.6", + "eslint": "^8.56.0", + "jest": "^29.7.0", "lint-staged": "^15.2.0", "prettier": "^3.1.1", "turbo": "^1.11.2", - "eslint": "^8.56.0", "typescript": "^5.3.3", "zx": "^7.2.3" }, diff --git a/packages/config/jest/jest-preset.js b/packages/config/jest/jest-preset.js new file mode 100644 index 000000000..50b8f2def --- /dev/null +++ b/packages/config/jest/jest-preset.js @@ -0,0 +1,9 @@ +/** @type {import('jest').Config} */ +const config = { + preset: "ts-jest", + transform: { + "^.+\\.ts$": "ts-jest", + }, +}; + +module.exports = config; diff --git a/packages/config/jest/package.json b/packages/config/jest/package.json new file mode 100644 index 000000000..654b91e80 --- /dev/null +++ b/packages/config/jest/package.json @@ -0,0 +1,11 @@ +{ + "name": "@ledgerhq/jest-config-dsdk", + "version": "1.0.0", + "main": "jest-preset.js", + "types": "node_modules/ts-jest/dist/index.d.ts", + "private": true, + "devDependencies": { + "ts-jest": "^29.1.1", + "ts-node": "^10.9.2" + } +} diff --git a/packages/config/typescript/package.json b/packages/config/typescript/package.json index d65deacf5..fa20f8a78 100644 --- a/packages/config/typescript/package.json +++ b/packages/config/typescript/package.json @@ -9,7 +9,6 @@ "devDependencies": { "@tsconfig/recommended": "^1.0.3", "@types/eslint": "^8.44.9", - "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18" } diff --git a/packages/config/typescript/sdk.json b/packages/config/typescript/sdk.json index 01cbc5a40..ad45f3774 100644 --- a/packages/config/typescript/sdk.json +++ b/packages/config/typescript/sdk.json @@ -3,7 +3,7 @@ "compilerOptions": { "target": "esnext", "lib": ["esnext", "dom"], - "types": ["reflect-metadata"], + "types": ["reflect-metadata", "jest", "node"], "sourceMap": true, "declaration": true, "declarationMap": true, diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts new file mode 100644 index 000000000..62a1facb2 --- /dev/null +++ b/packages/core/jest.config.ts @@ -0,0 +1,7 @@ +import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; + +const config: JestConfigWithTsJest = { + preset: "@ledgerhq/jest-config-dsdk", +}; + +export default config; diff --git a/packages/core/package.json b/packages/core/package.json index c0a201905..5afb06c5a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -13,7 +13,7 @@ "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "feature": "zx scripts/add-feature.mjs", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "jest --passWithNoTests" }, "dependencies": { "inversify": "^6.0.2", @@ -21,6 +21,7 @@ }, "devDependencies": { "@ledgerhq/eslint-config-dsdk": "workspace:*", - "@ledgerhq/tsconfig-dsdk": "workspace:*" + "@ledgerhq/tsconfig-dsdk": "workspace:*", + "@ledgerhq/jest-config-dsdk": "workspace:*" } } diff --git a/packages/signer/jest.config.ts b/packages/signer/jest.config.ts new file mode 100644 index 000000000..62a1facb2 --- /dev/null +++ b/packages/signer/jest.config.ts @@ -0,0 +1,7 @@ +import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; + +const config: JestConfigWithTsJest = { + preset: "@ledgerhq/jest-config-dsdk", +}; + +export default config; diff --git a/packages/signer/package.json b/packages/signer/package.json index 40c27f557..539dbe798 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -12,7 +12,7 @@ "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "jest --passWithNoTests" }, "dependencies": { "inversify": "^6.0.2", @@ -20,6 +20,7 @@ }, "devDependencies": { "@ledgerhq/tsconfig-dsdk": "workspace:*", - "@ledgerhq/eslint-config-dsdk": "workspace:*" + "@ledgerhq/eslint-config-dsdk": "workspace:*", + "@ledgerhq/jest-config-dsdk": "workspace:*" } } diff --git a/packages/signer/tests/index.spec.ts b/packages/signer/tests/index.spec.ts new file mode 100644 index 000000000..2a8c7226e --- /dev/null +++ b/packages/signer/tests/index.spec.ts @@ -0,0 +1,7 @@ +import { Hello } from "../src"; + +describe("signer", () => { + it("should be Hello World", () => { + expect(Hello).toEqual("World"); + }); +}); diff --git a/packages/trusted-apps/jest.config.ts b/packages/trusted-apps/jest.config.ts new file mode 100644 index 000000000..62a1facb2 --- /dev/null +++ b/packages/trusted-apps/jest.config.ts @@ -0,0 +1,7 @@ +import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; + +const config: JestConfigWithTsJest = { + preset: "@ledgerhq/jest-config-dsdk", +}; + +export default config; diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 9b08b7c3d..e6a05f3b8 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -12,7 +12,7 @@ "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "dev": "tsc --watch", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "jest --passWithNoTests" }, "dependencies": { "inversify": "^6.0.2", @@ -20,6 +20,7 @@ }, "devDependencies": { "@ledgerhq/tsconfig-dsdk": "workspace:*", - "@ledgerhq/eslint-config-dsdk": "workspace:*" + "@ledgerhq/eslint-config-dsdk": "workspace:*", + "@ledgerhq/jest-config-dsdk": "workspace:*" } } diff --git a/packages/ui/jest.config.ts b/packages/ui/jest.config.ts new file mode 100644 index 000000000..62a1facb2 --- /dev/null +++ b/packages/ui/jest.config.ts @@ -0,0 +1,7 @@ +import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; + +const config: JestConfigWithTsJest = { + preset: "@ledgerhq/jest-config-dsdk", +}; + +export default config; diff --git a/packages/ui/package.json b/packages/ui/package.json index cebf96ca5..c14e0385f 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -12,7 +12,7 @@ "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "jest --passWithNoTests" }, "dependencies": { "inversify": "^6.0.2", @@ -20,6 +20,7 @@ }, "devDependencies": { "@ledgerhq/tsconfig-dsdk": "workspace:*", - "@ledgerhq/eslint-config-dsdk": "workspace:*" + "@ledgerhq/eslint-config-dsdk": "workspace:*", + "@ledgerhq/jest-config-dsdk": "workspace:*" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 49e572cb7..f6a5c2407 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,15 +8,18 @@ importers: .: devDependencies: - '@ledgerhq/eslint-config-dsdk': - specifier: workspace:* - version: link:packages/config/eslint - '@ledgerhq/tsconfig-dsdk': - specifier: workspace:* - version: link:packages/config/typescript + '@types/jest': + specifier: ^29.5.11 + version: 29.5.11 + '@types/node': + specifier: ^20.10.6 + version: 20.10.6 eslint: specifier: ^8.56.0 version: 8.56.0 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) lint-staged: specifier: ^15.2.0 version: 15.2.0 @@ -37,7 +40,7 @@ importers: dependencies: next: specifier: 14.0.4 - version: 14.0.4(react-dom@18.2.0)(react@18.2.0) + version: 14.0.4(@babel/core@7.23.6)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18 version: 18.2.0 @@ -74,7 +77,7 @@ importers: version: 6.14.0(eslint@8.56.0)(typescript@5.3.3) '@vercel/style-guide': specifier: ^5.1.0 - version: 5.1.0(eslint@8.56.0)(prettier@3.1.1)(typescript@5.3.3) + version: 5.1.0(eslint@8.56.0)(jest@29.7.0)(prettier@3.1.1)(typescript@5.3.3) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.56.0) @@ -85,6 +88,15 @@ importers: specifier: ^1.1.0 version: 1.1.0 + packages/config/jest: + devDependencies: + ts-jest: + specifier: ^29.1.1 + version: 29.1.1(@babel/core@7.23.6)(jest@29.7.0)(typescript@5.3.3) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.10.6)(typescript@5.3.3) + packages/config/typescript: devDependencies: '@tsconfig/recommended': @@ -93,9 +105,6 @@ importers: '@types/eslint': specifier: ^8.44.9 version: 8.56.0 - '@types/node': - specifier: ^20 - version: 20.10.5 '@types/react': specifier: ^18 version: 18.2.45 @@ -115,6 +124,9 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint + '@ledgerhq/jest-config-dsdk': + specifier: workspace:* + version: link:../config/jest '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript @@ -131,6 +143,9 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint + '@ledgerhq/jest-config-dsdk': + specifier: workspace:* + version: link:../config/jest '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript @@ -147,6 +162,9 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint + '@ledgerhq/jest-config-dsdk': + specifier: workspace:* + version: link:../config/jest '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript @@ -163,6 +181,9 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint + '@ledgerhq/jest-config-dsdk': + specifier: workspace:* + version: link:../config/jest '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript @@ -185,7 +206,6 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 - dev: true /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} @@ -193,12 +213,10 @@ packages: dependencies: '@babel/highlight': 7.23.4 chalk: 2.4.2 - dev: true /@babel/compat-data@7.23.5: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - dev: true /@babel/core@7.23.6: resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} @@ -221,7 +239,6 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.56.0): resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} @@ -245,7 +262,6 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 - dev: true /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} @@ -256,12 +272,10 @@ packages: browserslist: 4.22.2 lru-cache: 5.1.1 semver: 6.3.1 - dev: true /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-function-name@7.23.0: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} @@ -269,21 +283,18 @@ packages: dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.6 - dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.6 - dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.6 - dev: true /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} @@ -297,6 +308,10 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} dev: true /@babel/helper-simple-access@7.22.5: @@ -304,29 +319,24 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.6 - dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.6 - dev: true /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helpers@7.23.6: resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} @@ -337,7 +347,6 @@ packages: '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color - dev: true /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} @@ -346,7 +355,6 @@ packages: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true /@babel/parser@7.23.6: resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} @@ -354,6 +362,134 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.6 + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/runtime@7.23.6: @@ -370,7 +506,6 @@ packages: '@babel/code-frame': 7.23.5 '@babel/parser': 7.23.6 '@babel/types': 7.23.6 - dev: true /@babel/traverse@7.23.6: resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} @@ -388,7 +523,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types@7.23.6: resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} @@ -397,6 +531,16 @@ packages: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 dev: true /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): @@ -456,6 +600,236 @@ packages: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + dev: true + + /@jest/core@29.7.0(ts-node@10.9.2): + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + jest-mock: 29.7.0 + dev: true + + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.10.6 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/reporters@29.7.0: + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.20 + '@types/node': 20.10.6 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jest/source-map@29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + callsites: 3.1.0 + graceful-fs: 4.2.11 + dev: true + + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: true + + /@jest/test-sequencer@29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + dev: true + + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.23.6 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.20 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.10.6 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + dev: true + /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} @@ -463,27 +837,29 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.20 - dev: true /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.20: resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@microsoft/tsdoc-config@0.16.2: @@ -633,16 +1009,77 @@ packages: resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} dev: true + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@sinonjs/commons@3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + dependencies: + '@sinonjs/commons': 3.0.0 + dev: true + /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: tslib: 2.6.2 dev: false + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + /@tsconfig/recommended@1.0.3: resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} dev: true + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + dependencies: + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.4 + dev: true + + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + dependencies: + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + dev: true + + /@types/babel__traverse@7.20.4: + resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} + dependencies: + '@babel/types': 7.23.6 + dev: true + /@types/eslint@8.56.0: resolution: {integrity: sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==} dependencies: @@ -658,7 +1095,36 @@ packages: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.10.5 + '@types/node': 20.10.6 + dev: true + + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + dependencies: + '@types/node': 20.10.6 + dev: true + + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: true + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: true + + /@types/jest@29.5.11: + resolution: {integrity: sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==} + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 dev: true /@types/json-schema@7.0.15: @@ -672,7 +1138,7 @@ packages: /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.10.6 dev: true /@types/minimist@1.2.5: @@ -685,8 +1151,8 @@ packages: undici-types: 5.26.5 dev: true - /@types/node@20.10.5: - resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} + /@types/node@20.10.6: + resolution: {integrity: sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==} dependencies: undici-types: 5.26.5 dev: true @@ -725,10 +1191,24 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: true + /@types/which@3.0.3: resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} dev: true + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true + + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: true + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} engines: {node: ^16.0.0 || >=18.0.0} @@ -926,7 +1406,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.1.0(eslint@8.56.0)(prettier@3.1.1)(typescript@5.3.3): + /@vercel/style-guide@5.1.0(eslint@8.56.0)(jest@29.7.0)(prettier@3.1.1)(typescript@5.3.3): resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} engines: {node: '>=16'} peerDependencies: @@ -955,7 +1435,7 @@ packages: eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) @@ -981,6 +1461,11 @@ packages: acorn: 8.11.2 dev: true + /acorn-walk@8.3.1: + resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} + engines: {node: '>=0.4.0'} + dev: true + /acorn@8.11.2: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} @@ -996,6 +1481,13 @@ packages: uri-js: 4.4.1 dev: true + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + /ansi-escapes@6.2.0: resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} engines: {node: '>=14.16'} @@ -1018,7 +1510,6 @@ packages: engines: {node: '>=4'} dependencies: color-convert: 1.9.3 - dev: true /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} @@ -1027,6 +1518,11 @@ packages: color-convert: 2.0.1 dev: true + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -1044,10 +1540,20 @@ packages: picomatch: 2.3.1 dev: true + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -1177,6 +1683,78 @@ packages: dequal: 2.0.3 dev: true + /babel-jest@29.7.0(@babel/core@7.23.6): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.23.6 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.23.6) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.22.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.4 + dev: true + + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.23.6): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -1221,6 +1799,22 @@ packages: electron-to-chromium: 1.4.614 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) + + /bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + dependencies: + fast-json-stable-stringify: 2.1.0 + dev: true + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true /builtin-modules@3.3.0: @@ -1260,6 +1854,16 @@ packages: engines: {node: '>= 6'} dev: true + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + /caniuse-lite@1.0.30001570: resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} @@ -1270,7 +1874,6 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1285,6 +1888,11 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -1305,6 +1913,10 @@ packages: engines: {node: '>=8'} dev: true + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + dev: true + /clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -1331,11 +1943,28 @@ packages: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - dev: true /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -1346,7 +1975,6 @@ packages: /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -1372,6 +2000,28 @@ packages: /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + /create-jest@29.7.0(@types/node@20.10.6)(ts-node@10.9.2): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true /cross-spawn@7.0.3: @@ -1423,12 +2073,25 @@ packages: optional: true dependencies: ms: 2.1.2 + + /dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true dev: true /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + /default-browser-id@3.0.0: resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} engines: {node: '>=12'} @@ -1480,6 +2143,11 @@ packages: engines: {node: '>=12.20'} dev: true + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true + /detect-newline@4.0.1: resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1489,6 +2157,16 @@ packages: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: true + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1525,12 +2203,20 @@ packages: /electron-to-chromium@1.4.614: resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} + + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} dev: true /emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} dev: true + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true @@ -1640,11 +2326,14 @@ packages: /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} dev: true /escape-string-regexp@4.0.0: @@ -1667,7 +2356,7 @@ packages: eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) @@ -1725,7 +2414,7 @@ packages: enhanced-resolve: 5.15.0 eslint: 8.56.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -1785,70 +2474,12 @@ packages: debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -1869,9 +2500,10 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: true @@ -1887,7 +2519,7 @@ packages: ignore: 5.3.0 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -1906,7 +2538,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -1922,7 +2554,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -1932,6 +2564,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -1940,7 +2573,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -1956,7 +2589,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3): resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1972,6 +2605,7 @@ packages: '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 + jest: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) transitivePeerDependencies: - supports-color - typescript @@ -2017,7 +2651,7 @@ packages: optional: true dependencies: eslint: 8.56.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3) dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): @@ -2189,6 +2823,12 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} @@ -2279,6 +2919,22 @@ packages: strip-final-newline: 3.0.0 dev: true + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true + + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -2308,6 +2964,12 @@ packages: reusify: 1.0.4 dev: true + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: true + /fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -2427,6 +3089,10 @@ packages: /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} dev: true /get-east-asian-width@1.2.0: @@ -2443,6 +3109,11 @@ packages: hasown: 2.0.0 dev: true + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + /get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} engines: {node: '>=12'} @@ -2530,7 +3201,6 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: true /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} @@ -2589,7 +3259,6 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -2630,6 +3299,10 @@ packages: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -2658,6 +3331,15 @@ packages: resolve-from: 4.0.0 dev: true + /import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -2784,6 +3466,11 @@ packages: call-bind: 1.0.5 dev: true + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + /is-fullwidth-code-point@4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} @@ -2796,6 +3483,11 @@ packages: get-east-asian-width: 1.2.0 dev: true + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -2884,60 +3576,530 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + dev: true + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.23.6 + '@babel/parser': 7.23.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.23.6 + '@babel/parser': 7.23.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: true + + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + dev: true + + /jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.1 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.0.4 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-cli@29.7.0(@types/node@20.10.6)(ts-node@10.9.2): + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest-config@29.7.0(@types/node@20.10.6)(ts-node@10.9.2): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + babel-jest: 29.7.0(@babel/core@7.23.6) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.2(@types/node@20.10.6)(typescript@5.3.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + dev: true + + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.10.6 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + jest-util: 29.7.0 + dev: true + + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 29.7.0 + dev: true + + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - has-symbols: 1.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - which-typed-array: 1.1.13 + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color dev: true - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color dev: true - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + /jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - call-bind: 1.0.5 + '@babel/core': 7.23.6 + '@babel/generator': 7.23.6 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/types': 7.23.6 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color dev: true - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 dev: true - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - is-docker: 2.2.1 + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 dev: true - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + /jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.10.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 dev: true - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@types/node': 20.10.6 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 dev: true - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + /jest@29.7.0(@types/node@20.10.6)(ts-node@10.9.2): + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node dev: true /jiti@1.21.0: @@ -2952,6 +4114,14 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -2968,7 +4138,6 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - dev: true /jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} @@ -3003,7 +4172,6 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - dev: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -3029,6 +4197,11 @@ packages: json-buffer: 3.0.1 dev: true + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: true @@ -3040,6 +4213,11 @@ packages: language-subtag-registry: 0.3.22 dev: true + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3107,6 +4285,10 @@ packages: p-locate: 5.0.0 dev: true + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true @@ -3136,7 +4318,6 @@ packages: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 - dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -3145,6 +4326,23 @@ packages: yallist: 4.0.0 dev: true + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: true + /map-stream@0.1.0: resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} dev: true @@ -3193,7 +4391,6 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3216,7 +4413,7 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /next@14.0.4(react-dom@18.2.0)(react@18.2.0): + /next@14.0.4(@babel/core@7.23.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} engines: {node: '>=18.17.0'} hasBin: true @@ -3239,7 +4436,7 @@ packages: postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.23.6)(react@18.2.0) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 14.0.4 @@ -3270,9 +4467,12 @@ packages: formdata-polyfill: 4.0.10 dev: true + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true + /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -3530,6 +4730,13 @@ packages: engines: {node: '>= 6'} dev: true + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + /pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -3638,6 +4845,23 @@ packages: hasBin: true dev: true + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -3659,6 +4883,10 @@ packages: engines: {node: '>=6'} dev: true + /pure-rand@6.0.4: + resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + dev: true + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -3677,6 +4905,10 @@ packages: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -3757,15 +4989,37 @@ packages: jsesc: 0.5.0 dev: true + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + /resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + dev: true + /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: @@ -3860,7 +5114,6 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - dev: true /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} @@ -3918,6 +5171,10 @@ packages: engines: {node: '>=14'} dev: true + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -3965,6 +5222,18 @@ packages: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: @@ -3993,6 +5262,17 @@ packages: through: 2.3.8 dev: true + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + /stream-combiner@0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} dependencies: @@ -4009,6 +5289,23 @@ packages: engines: {node: '>=0.6.19'} dev: true + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + /string-width@7.0.0: resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} engines: {node: '>=18'} @@ -4076,6 +5373,11 @@ packages: engines: {node: '>=4'} dev: true + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -4098,7 +5400,7 @@ packages: engines: {node: '>=8'} dev: true - /styled-jsx@5.1.1(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.23.6)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -4111,6 +5413,7 @@ packages: babel-plugin-macros: optional: true dependencies: + '@babel/core': 7.23.6 client-only: 0.0.1 react: 18.2.0 dev: false @@ -4134,7 +5437,6 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -4143,6 +5445,13 @@ packages: has-flag: 4.0.0 dev: true + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -4192,6 +5501,15 @@ packages: engines: {node: '>=6'} dev: true + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -4218,10 +5536,13 @@ packages: engines: {node: '>=12'} dev: true + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -4243,6 +5564,71 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true + /ts-jest@29.1.1(@babel/core@7.23.6)(jest@29.7.0)(typescript@5.3.3): + resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.23.6 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.5.4 + typescript: 5.3.3 + yargs-parser: 21.1.1 + dev: true + + /ts-node@10.9.2(@types/node@20.10.6)(typescript@5.3.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.10.6 + acorn: 8.11.2 + acorn-walk: 8.3.1 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.3.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: @@ -4336,11 +5722,21 @@ packages: prelude-ls: 1.2.1 dev: true + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -4432,7 +5828,6 @@ packages: browserslist: 4.22.2 escalade: 3.1.1 picocolors: 1.0.0 - dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -4444,6 +5839,19 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + dev: true + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -4451,6 +5859,12 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: true + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} @@ -4533,6 +5947,15 @@ packages: isexe: 2.0.0 dev: true + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrap-ansi@9.0.0: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} @@ -4546,9 +5969,21 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + /write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -4559,6 +5994,29 @@ packages: engines: {node: '>= 14'} dev: true + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/turbo.json b/turbo.json index 9547e99b9..a896532ea 100644 --- a/turbo.json +++ b/turbo.json @@ -13,6 +13,11 @@ "dependsOn": ["build"], "cache": false, "persistent": true + }, + "test": { + "dependsOn": ["build", "lint"], + "outputs": [], + "inputs": ["src/**/*.ts", "tests/**/*.ts"] } } } From 3d6f2cd138ec69eb25da2c6bb2d2a820f643d9eb Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 5 Jan 2024 14:37:52 +0100 Subject: [PATCH 024/253] chore(ci): 2 jobs and common composite --- .github/workflows/pull_request.yml | 31 +++++++------------- actions/setup-toolchain-composite/action.yml | 30 +++++++++++++++++++ 2 files changed, 41 insertions(+), 20 deletions(-) create mode 100644 actions/setup-toolchain-composite/action.yml diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index a2b454c77..9e73bee5a 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,35 +1,26 @@ name: pull_request on: [pull_request] jobs: - test: + lint: runs-on: [device-sdk-4xlarge-linux] env: CI_JOB_NUMBER: 1 steps: - uses: actions/checkout@v3 - - name: Install Node.js - uses: actions/setup-node@v3 - with: - node-version: 18 - - - uses: pnpm/action-setup@v2 - name: Install pnpm + - uses: ./actions/setup-toolchain-composite - - name: Get pnpm store directory - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + - name: Lint + run: pnpm lint - - uses: actions/cache@v3 - name: Setup pnpm cache - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- + test: + runs-on: [device-sdk-4xlarge-linux] + env: + CI_JOB_NUMBER: 1 + steps: + - uses: actions/checkout@v3 - - name: Install dependencies - run: pnpm install + - uses: ./actions/setup-toolchain-composite - name: Test run: pnpm test diff --git a/actions/setup-toolchain-composite/action.yml b/actions/setup-toolchain-composite/action.yml new file mode 100644 index 000000000..ca73c97d5 --- /dev/null +++ b/actions/setup-toolchain-composite/action.yml @@ -0,0 +1,30 @@ +name: "Setup Device SDK toolchain" +description: "Composite job to setup the CI tools for Device SDK" + +runs: + using: "composite" + steps: + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + + - uses: pnpm/action-setup@v2 + name: Install pnpm + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + shell: bash + run: pnpm install From a41c52aba059768a5ab5caec78e61b9ce43afdf0 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 5 Jan 2024 15:56:34 +0100 Subject: [PATCH 025/253] chore: improve Readme --- README.md | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 37a6d273b..0b79cfa43 100644 --- a/README.md +++ b/README.md @@ -1 +1,88 @@ -Ledger Device SDK +

+ Ledger +

Web Device SDK

+

+ + + + + TypeScript + + + ESlint + + + Prettier + + + Jest + +
+ + NextJs + + + Vercel + + + NPM + +

+ +

+ Ledger Developer Portal + · + Report Bug + · + Request Feature +

+ +

+ +# About + +This monorepo hosts the Device SDK for Web. +Written in Typescript. + + +# How does it works + +The Device SDK defines an interface for applications to interact with Ledger wallets. + +```mermaid + flowchart LR; + application(Application) <--JSON-RPC--> wallet(Wallet); +``` + + + + +# Modules description + +This project uses [turbo monorepo](https://turbo.build/repo/docs) to build and release different packages on NPM registry and a sample demo app on Vercel. + +A brief description of this project packages: + +* `@ledgerhq/device-sdk-sample` in `apps/sample`: React Next web app used to test & demonstrate the Web Device SDK +* `@ledgerhq/eslint-config-dsdk` in `packages/config/eslint`: internal package which contains eslint shared config. Used by `extends: ["@ledgerhq/dsdk"]` in `.eslintrc`. +* `@ledgerhq/jest-config-dsdk` in `packages/config/jest`: internal package which contains jest shared config. Used by `preset: "@ledgerhq/jest-config-dsdk"` in `jest.config.ts` +* `@ledgerhq/tsconfig-dsdk` in `packages/config/typescript`: internal package which contains typescript shared config. Used by `"extends": "@ledgerhq/tsconfig-dsdk/sdk"` in `tsconfig.json` +* `@ledgerhq/device-sdk-core` in `packages/core`: external package that contains the core of the Web SDK +* `@ledgerhq/device-sdk-signer` in `packages/signer`: external package +* `@ledgerhq/device-sdk-trusted-apps` in `packages/trusted-apps`: external package +* `@ledgerhq/device-sdk-ui` in `packages/ui`: external package + + +# CI + +This project uses Github CI. + + +# Scripting + +In order to avoid task repetition, we can add some scripts the corresponding package's script folder, on in a root script folder if it concerns multiple packages. +A script is a `.mjs` file interpreted by [zx](https://github.com/google/zx). + + From 26d890c540e7cdf8b949d0678a21b05541d0721e Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 17 Jan 2024 17:07:08 +0100 Subject: [PATCH 026/253] chore: update eslint config --- apps/sample/.eslintrc.js | 7 +++++++ apps/sample/.eslintrc.json | 3 --- apps/sample/src/app/layout.tsx | 18 +++++++++--------- apps/sample/src/app/page.tsx | 14 +++++++------- packages/config/eslint/index.js | 13 +------------ packages/core/.eslintrc.js | 4 ++++ packages/signer/.eslintrc.js | 4 ++++ packages/trusted-apps/.eslintrc.js | 4 ++++ packages/ui/.eslintrc.js | 4 ++++ 9 files changed, 40 insertions(+), 31 deletions(-) create mode 100644 apps/sample/.eslintrc.js delete mode 100644 apps/sample/.eslintrc.json diff --git a/apps/sample/.eslintrc.js b/apps/sample/.eslintrc.js new file mode 100644 index 000000000..a861d00ac --- /dev/null +++ b/apps/sample/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: ["next/core-web-vitals", "@ledgerhq/dsdk"], + parserOptions: { + project: ["./tsconfig.json"], + tsconfigRootDir: __dirname, + }, +}; diff --git a/apps/sample/.eslintrc.json b/apps/sample/.eslintrc.json deleted file mode 100644 index 5ef96bdda..000000000 --- a/apps/sample/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["next/core-web-vitals", "@ledgerhq/dsdk"] -} diff --git a/apps/sample/src/app/layout.tsx b/apps/sample/src/app/layout.tsx index 40e027fbe..323bd9c95 100644 --- a/apps/sample/src/app/layout.tsx +++ b/apps/sample/src/app/layout.tsx @@ -1,22 +1,22 @@ -import type { Metadata } from 'next' -import { Inter } from 'next/font/google' -import './globals.css' +import type { Metadata } from "next"; +import { Inter } from "next/font/google"; +import "./globals.css"; -const inter = Inter({ subsets: ['latin'] }) +const inter = Inter({ subsets: ["latin"] }); export const metadata: Metadata = { - title: 'Create Next App', - description: 'Generated by create next app', -} + title: "Create Next App", + description: "Generated by create next app", +}; export default function RootLayout({ children, }: { - children: React.ReactNode + children: React.ReactNode; }) { return ( {children} - ) + ); } diff --git a/apps/sample/src/app/page.tsx b/apps/sample/src/app/page.tsx index b97326626..992bc443e 100644 --- a/apps/sample/src/app/page.tsx +++ b/apps/sample/src/app/page.tsx @@ -1,4 +1,4 @@ -import Image from 'next/image' +import Image from "next/image"; export default function Home() { return ( @@ -15,7 +15,7 @@ export default function Home() { target="_blank" rel="noopener noreferrer" > - By{' '} + By{" "} Vercel Logo

- Docs{' '} + Docs{" "} -> @@ -64,7 +64,7 @@ export default function Home() { rel="noopener noreferrer" >

- Learn{' '} + Learn{" "} -> @@ -81,7 +81,7 @@ export default function Home() { rel="noopener noreferrer" >

- Templates{' '} + Templates{" "} -> @@ -98,7 +98,7 @@ export default function Home() { rel="noopener noreferrer" >

- Deploy{' '} + Deploy{" "} -> @@ -109,5 +109,5 @@ export default function Home() { - ) + ); } diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index bc361a3ef..a03b43ff4 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -15,13 +15,6 @@ module.exports = { env: { es6: true, }, - settings: { - "import/resolver": { - typescript: { - project, - }, - }, - }, ignorePatterns: [ // Ignore dotfiles ".*.js", @@ -37,10 +30,6 @@ module.exports = { "plugin:@typescript-eslint/stylistic-type-checked", "prettier", ], - parserOptions: { - project: [resolve(process.cwd(), "tsconfig.json")], - // tsconfigRootDir: __dirname, - }, rules: { "import/prefer-default-export": "off", "no-void": "off", @@ -62,7 +51,7 @@ module.exports = { }, }, { - files: ["**/*.mjs"], + files: ["**/scripts/*.mjs"], env: { es6: true, node: true, diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index f506119e1..e28ab25b8 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -1,4 +1,8 @@ module.exports = { root: true, extends: ["@ledgerhq/dsdk"], + parserOptions: { + project: ["./tsconfig.json"], + tsconfigRootDir: __dirname, + }, }; diff --git a/packages/signer/.eslintrc.js b/packages/signer/.eslintrc.js index f506119e1..e28ab25b8 100644 --- a/packages/signer/.eslintrc.js +++ b/packages/signer/.eslintrc.js @@ -1,4 +1,8 @@ module.exports = { root: true, extends: ["@ledgerhq/dsdk"], + parserOptions: { + project: ["./tsconfig.json"], + tsconfigRootDir: __dirname, + }, }; diff --git a/packages/trusted-apps/.eslintrc.js b/packages/trusted-apps/.eslintrc.js index f506119e1..e28ab25b8 100644 --- a/packages/trusted-apps/.eslintrc.js +++ b/packages/trusted-apps/.eslintrc.js @@ -1,4 +1,8 @@ module.exports = { root: true, extends: ["@ledgerhq/dsdk"], + parserOptions: { + project: ["./tsconfig.json"], + tsconfigRootDir: __dirname, + }, }; diff --git a/packages/ui/.eslintrc.js b/packages/ui/.eslintrc.js index f506119e1..e28ab25b8 100644 --- a/packages/ui/.eslintrc.js +++ b/packages/ui/.eslintrc.js @@ -1,4 +1,8 @@ module.exports = { root: true, extends: ["@ledgerhq/dsdk"], + parserOptions: { + project: ["./tsconfig.json"], + tsconfigRootDir: __dirname, + }, }; From 6efe46814a92a29ed7d7ba6e1971b92e8a30fdf5 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Wed, 17 Jan 2024 17:43:20 +0100 Subject: [PATCH 027/253] chore: lint jest.config.ts --- packages/config/typescript/sdk.json | 3 ++- packages/core/tsconfig.json | 2 +- packages/signer/tsconfig.json | 2 +- packages/trusted-apps/tsconfig.json | 2 +- packages/ui/tsconfig.json | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/config/typescript/sdk.json b/packages/config/typescript/sdk.json index ad45f3774..d8eba41d8 100644 --- a/packages/config/typescript/sdk.json +++ b/packages/config/typescript/sdk.json @@ -25,7 +25,8 @@ "forceConsistentCasingInFileNames": true, "experimentalDecorators": true, "stripInternal": true, - "emitDecoratorMetadata": true + "emitDecoratorMetadata": true, + "moduleResolution": "NodeNext" }, "exclude": ["node_modules"] } diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index a2bc8e4f8..52d8bbf1d 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*"] + "include": ["src/**/*", "jest.config.ts"] } diff --git a/packages/signer/tsconfig.json b/packages/signer/tsconfig.json index a2bc8e4f8..7de4b7b54 100644 --- a/packages/signer/tsconfig.json +++ b/packages/signer/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*"] + "include": ["src/**/*", "jest.config.ts"], } diff --git a/packages/trusted-apps/tsconfig.json b/packages/trusted-apps/tsconfig.json index a2bc8e4f8..7de4b7b54 100644 --- a/packages/trusted-apps/tsconfig.json +++ b/packages/trusted-apps/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*"] + "include": ["src/**/*", "jest.config.ts"], } diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index a2bc8e4f8..52d8bbf1d 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*"] + "include": ["src/**/*", "jest.config.ts"] } From 9824ce099933f2e0b75ae7b7cfd585f3577f66ab Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 17 Jan 2024 18:10:28 +0100 Subject: [PATCH 028/253] chore: tsconfig nodenext module option --- packages/config/typescript/sdk.json | 3 ++- packages/trusted-apps/tsconfig.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/config/typescript/sdk.json b/packages/config/typescript/sdk.json index d8eba41d8..31bc1f432 100644 --- a/packages/config/typescript/sdk.json +++ b/packages/config/typescript/sdk.json @@ -26,7 +26,8 @@ "experimentalDecorators": true, "stripInternal": true, "emitDecoratorMetadata": true, - "moduleResolution": "NodeNext" + "moduleResolution": "NodeNext", + "module": "NodeNext" }, "exclude": ["node_modules"] } diff --git a/packages/trusted-apps/tsconfig.json b/packages/trusted-apps/tsconfig.json index 7de4b7b54..52d8bbf1d 100644 --- a/packages/trusted-apps/tsconfig.json +++ b/packages/trusted-apps/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*", "jest.config.ts"], + "include": ["src/**/*", "jest.config.ts"] } From 4be158a966e23884e40755fd46e55244c12d6fe0 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 22 Jan 2024 15:43:40 +0100 Subject: [PATCH 029/253] poc: setup SOLID and inversify --- .github/pull_request_template.md | 1 - apps/sample/.eslintrc.js | 2 +- packages/config/eslint/index.js | 5 +- packages/core/.eslintrc.js | 2 +- packages/core/SCRIPTS.MD | 27 +++++++++ packages/core/package.json | 9 ++- packages/core/scripts/add-feature.mjs | 22 -------- packages/core/scripts/add-module.mjs | 37 ++++++++++++ packages/core/src/di.ts | 14 +++++ packages/core/src/index.ts | 17 ++++++ .../internal/config/data/ConfigDataSource.ts | 11 ++++ packages/core/src/internal/config/data/DTO.ts | 9 +++ .../config/data/LocalConfigDataSource.test.ts | 45 +++++++++++++++ .../config/data/LocalConfigDataSource.ts | 38 +++++++++++++ .../data/RemoteConfigDataSource.test.ts | 33 +++++++++++ .../config/data/RemoteConfigDataSource.ts | 56 +++++++++++++++++++ .../src/internal/config/data/version.json | 4 ++ .../internal/config/di/configModule.test.ts | 55 ++++++++++++++++++ .../src/internal/config/di/configModule.ts | 30 ++++++++++ .../src/internal/config/di/configTypes.ts | 6 ++ .../core/src/internal/config/model/Config.ts | 6 ++ .../internal/config/service/ConfigService.ts | 3 + .../service/DefaultConfigService.test.ts | 43 ++++++++++++++ .../config/service/DefaultConfigService.ts | 30 ++++++++++ .../usecase/GetSdkVersionUseCase.test.ts | 20 +++++++ .../config/usecase/GetSdkVersionUseCase.ts | 20 +++++++ packages/signer/.eslintrc.js | 2 +- packages/trusted-apps/.eslintrc.js | 2 +- packages/ui/.eslintrc.js | 2 +- pnpm-lock.yaml | 33 +++++++++++ 30 files changed, 549 insertions(+), 35 deletions(-) create mode 100644 packages/core/SCRIPTS.MD delete mode 100644 packages/core/scripts/add-feature.mjs create mode 100644 packages/core/scripts/add-module.mjs create mode 100644 packages/core/src/di.ts create mode 100644 packages/core/src/internal/config/data/ConfigDataSource.ts create mode 100644 packages/core/src/internal/config/data/DTO.ts create mode 100644 packages/core/src/internal/config/data/LocalConfigDataSource.test.ts create mode 100644 packages/core/src/internal/config/data/LocalConfigDataSource.ts create mode 100644 packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts create mode 100644 packages/core/src/internal/config/data/RemoteConfigDataSource.ts create mode 100644 packages/core/src/internal/config/data/version.json create mode 100644 packages/core/src/internal/config/di/configModule.test.ts create mode 100644 packages/core/src/internal/config/di/configModule.ts create mode 100644 packages/core/src/internal/config/di/configTypes.ts create mode 100644 packages/core/src/internal/config/model/Config.ts create mode 100644 packages/core/src/internal/config/service/ConfigService.ts create mode 100644 packages/core/src/internal/config/service/DefaultConfigService.test.ts create mode 100644 packages/core/src/internal/config/service/DefaultConfigService.ts create mode 100644 packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts create mode 100644 packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 5c583d88d..da4f95495 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -24,7 +24,6 @@ _In case of visual features, please attach screenshots or video recordings to de Pull Requests must pass the CI and be code reviewed. Set as Draft if the PR is not ready. -- [ ] `npx changeset` was attached. - [ ] **Covered by automatic tests.** - [ ] **Impact of the changes:** - diff --git a/apps/sample/.eslintrc.js b/apps/sample/.eslintrc.js index a861d00ac..56e504615 100644 --- a/apps/sample/.eslintrc.js +++ b/apps/sample/.eslintrc.js @@ -1,7 +1,7 @@ module.exports = { extends: ["next/core-web-vitals", "@ledgerhq/dsdk"], parserOptions: { - project: ["./tsconfig.json"], + project: true, tsconfigRootDir: __dirname, }, }; diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index a03b43ff4..fcba23510 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -33,10 +33,7 @@ module.exports = { rules: { "import/prefer-default-export": "off", "no-void": "off", - "@typescript-eslint/consistent-type-definitions": [ - "error", - "interface", - ], + "@typescript-eslint/consistent-type-definitions": "off", "@typescript-eslint/ban-ts-comment": "warn", "@typescript-eslint/no-unsafe-member-access": "warn", "@typescript-eslint/no-shadow": "warn", diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index e28ab25b8..f1495cd5c 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -2,7 +2,7 @@ module.exports = { root: true, extends: ["@ledgerhq/dsdk"], parserOptions: { - project: ["./tsconfig.json"], + project: true, tsconfigRootDir: __dirname, }, }; diff --git a/packages/core/SCRIPTS.MD b/packages/core/SCRIPTS.MD new file mode 100644 index 000000000..3b9996c71 --- /dev/null +++ b/packages/core/SCRIPTS.MD @@ -0,0 +1,27 @@ +# Available scripts + +### module:init + +> called from the root with `pnpm core module:init moduleName` + +Scaffold a default folder and file structure in `src/internal/moduleName` + +``` +src +└── internal + └── moduleName + ├── data + │ └── ModuleNameDataSource.ts + ├── di + │ ├── moduleNameModule.ts + │ ├── moduleNameModule.test.ts + │ └── moduleNameTypes.ts + ├── model + │ └── .gitkeep + ├── service + │ ├── ModuleNameService.ts + │ ├── DefaultModuleNameService.test.ts + │ └── DefaultModuleNameService.test.ts + └── usecase + └── .gitkeep +``` diff --git a/packages/core/package.json b/packages/core/package.json index 5afb06c5a..647887fc3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -12,16 +12,19 @@ "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", - "feature": "zx scripts/add-feature.mjs", - "test": "jest --passWithNoTests" + "test:unit": "jest --coverage --collectCoverageFrom=\"src/internal/**/*.ts\" src", + "module:init": "zx scripts/add-module.mjs", + "run:index": "ts-node src/index.ts" }, "dependencies": { "inversify": "^6.0.2", + "inversify-logger-middleware": "^3.1.0", "reflect-metadata": "^0.2.1" }, "devDependencies": { "@ledgerhq/eslint-config-dsdk": "workspace:*", + "@ledgerhq/jest-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", - "@ledgerhq/jest-config-dsdk": "workspace:*" + "ts-node": "^10.9.2" } } diff --git a/packages/core/scripts/add-feature.mjs b/packages/core/scripts/add-feature.mjs deleted file mode 100644 index 6300fb4ef..000000000 --- a/packages/core/scripts/add-feature.mjs +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env zx -import "zx/globals"; -import { basename } from "node:path"; -const features = argv._; - -if (!features.length) { - console.error(`Usage: ${basename(__filename)} [ ...]`); - process.exit(1); -} - -within(async () => { - cd("src"); - for (const feature of features) { - const rootFolderName = `${feature}-feature`; - await $`mkdir ${rootFolderName}`; - within(async () => { - cd(rootFolderName); - await $`mkdir entities data use-cases repository`; - await $`touch entities/.gitkeep data/.gitkeep use-cases/.gitkeep repository/.gitkeep`; - }); - } -}); diff --git a/packages/core/scripts/add-module.mjs b/packages/core/scripts/add-module.mjs new file mode 100644 index 000000000..b0a1e9474 --- /dev/null +++ b/packages/core/scripts/add-module.mjs @@ -0,0 +1,37 @@ +#!/usr/bin/env zx +import "zx/globals"; +import { basename } from "node:path"; +const features = argv._; + +if (!features.length) { + console.error(`Usage: ${basename(__filename)} [ ...]`); + process.exit(1); +} + +within(async () => { + cd("src/internal"); + for (const feature of features) { + const rootFolderName = `${feature}`; + const featureUppercased = + feature.charAt(0).toUpperCase() + feature.slice(1); + await $`mkdir ${rootFolderName}`; + within(async () => { + cd(rootFolderName); + await $`mkdir data di model service usecase`; + const files = [ + `data/${featureUppercased}DataSource.ts`, + `di/${feature}Module.test.ts`, + `di/${feature}Module.ts`, + `di/${feature}Types.ts`, + `model/.gitkeep`, + `service/${featureUppercased}Service.ts`, + `service/Default${featureUppercased}Service.test.ts`, + `service/Default${featureUppercased}Service.ts`, + `usecase/.gitkeep`, + ]; + for (const file of files) { + await $`touch ${file}`; + } + }); + } +}); diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts new file mode 100644 index 000000000..1e475ca15 --- /dev/null +++ b/packages/core/src/di.ts @@ -0,0 +1,14 @@ +import { Container } from "inversify"; +import { makeLoggerMiddleware } from "inversify-logger-middleware"; +import "reflect-metadata"; +import configModuleFactory from "./internal/config/di/configModule"; + +const logger = makeLoggerMiddleware(); + +export const makeContainer = (mock = false) => { + const container = new Container(); + container.applyMiddleware(logger); + container.load(configModuleFactory(mock)); + + return container; +}; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 69d99520a..28d2d16e9 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,2 +1,19 @@ +import "reflect-metadata"; + +import { makeContainer } from "./di"; +import { types } from "./internal/config/di/configTypes"; +import { GetSDKVersionUseCase } from "./internal/config/usecase/GetSdkVersionUseCase"; + export * from "./api"; export * from "./transport"; + +const container = makeContainer(); +const mockContainer = makeContainer(true); + +const mod = container.get(types.GetSDKVersionUseCase); +console.log("module.getSdkVersion", mod.getSdkVersion()); + +const mockModule = mockContainer.get( + types.GetSDKVersionUseCase +); +console.log("mockModule.getSdkVersion", mockModule.getSdkVersion()); diff --git a/packages/core/src/internal/config/data/ConfigDataSource.ts b/packages/core/src/internal/config/data/ConfigDataSource.ts new file mode 100644 index 000000000..1faf0389a --- /dev/null +++ b/packages/core/src/internal/config/data/ConfigDataSource.ts @@ -0,0 +1,11 @@ +import { Config } from "../model/Config"; + +// Describe the different data sources interfaces our application could have + +export interface LocalConfigDataSource { + getConfig(): Config; +} + +export interface RemoteConfigDataSource { + getConfig(): Promise; +} diff --git a/packages/core/src/internal/config/data/DTO.ts b/packages/core/src/internal/config/data/DTO.ts new file mode 100644 index 000000000..216534900 --- /dev/null +++ b/packages/core/src/internal/config/data/DTO.ts @@ -0,0 +1,9 @@ +// Types used by the data sources (here an example for the remote data source) +// They will usually be the response of an API call that will need to be parsed +// into an object used by the application. (in our example: DTOConfig => Config) + +export type ConfigDTO = { + version: string; + name: string; + yolo: string; +}; diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts new file mode 100644 index 000000000..f4b428f70 --- /dev/null +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts @@ -0,0 +1,45 @@ +import fs from "fs"; +import { LocalConfigDataSource } from "./ConfigDataSource"; +import { + FileLocalConfigDataSource, + MockLocalConfigDataSource, +} from "./LocalConfigDataSource"; + +const readFileSyncSpy = jest.spyOn(fs, "readFileSync"); + +let datasource: LocalConfigDataSource; +describe("LocalConfigDataSource", () => { + describe("FileLocalConfigDataSource", () => { + beforeEach(() => { + readFileSyncSpy.mockClear(); + datasource = new FileLocalConfigDataSource(); + readFileSyncSpy.mockReturnValue( + JSON.stringify({ name: "DeviceSDK", version: "0.0.0-spied.1" }) + ); + }); + + it("should return the config", () => { + expect(datasource.getConfig()).toEqual({ + name: "DeviceSDK", + version: "0.0.0-spied.1", + }); + }); + }); + + describe("MockLocalConfigDataSource", () => { + beforeEach(() => { + datasource = new MockLocalConfigDataSource(); + }); + + it("should return the config", () => { + expect(datasource.getConfig()).toEqual({ + name: "DeviceSDK", + version: "0.0.0-mock.1", + }); + }); + }); + + afterAll(() => { + readFileSyncSpy.mockClear(); + }); +}); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts new file mode 100644 index 000000000..7b7f7c068 --- /dev/null +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -0,0 +1,38 @@ +import fs from "fs"; +import { injectable } from "inversify"; +import "reflect-metadata"; +import { Config } from "../model/Config"; +import { LocalConfigDataSource } from "./ConfigDataSource"; +import path from "path"; + +/** + * + * class FileLocalConfigDataSource + * This is a local data source that reads the config from a local file. + * + */ +@injectable() +export class FileLocalConfigDataSource implements LocalConfigDataSource { + getConfig(): Config { + const version = fs.readFileSync( + path.join(__dirname, "version.json"), + "utf-8" + ); + return JSON.parse(version) as Config; + } +} + +/** + * + * class MockLocalConfigDataSource + * + */ +@injectable() +export class MockLocalConfigDataSource implements LocalConfigDataSource { + getConfig(): Config { + return { + name: "DeviceSDK", + version: "0.0.0-mock.1", + }; + } +} diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts new file mode 100644 index 000000000..149334eee --- /dev/null +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts @@ -0,0 +1,33 @@ +import { RemoteConfigDataSource } from "./ConfigDataSource"; +import { + RestRemoteConfigDataSource, + MockRemoteConfigDataSource, +} from "./RemoteConfigDataSource"; + +let datasource: RemoteConfigDataSource; +describe("RemoteRestConfigDataSource", () => { + describe("RestRemoteConfigDataSource", () => { + beforeAll(() => { + datasource = new RestRemoteConfigDataSource(); + }); + + it("should return the config", async () => { + expect(await datasource.getConfig()).toStrictEqual({ + name: "DeviceSDK", + version: "0.0.0-fake.1", + }); + }); + }); + describe("MockRemoteConfigDataSource", () => { + beforeAll(() => { + datasource = new MockRemoteConfigDataSource(); + }); + + it("should return the config", async () => { + expect(await datasource.getConfig()).toStrictEqual({ + name: "DeviceSDK", + version: "0.0.0-fake.2", + }); + }); + }); +}); diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts new file mode 100644 index 000000000..5a66ef68f --- /dev/null +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts @@ -0,0 +1,56 @@ +import { injectable } from "inversify"; +import "reflect-metadata"; +import { RemoteConfigDataSource } from "./ConfigDataSource"; +import { ConfigDTO } from "./DTO"; +import { Config } from "../model/Config"; + +/** + * class RemoteRestConfigDataSource + * This is a remote data source that reads the config from a remote API (example). + */ +@injectable() +export class RestRemoteConfigDataSource implements RemoteConfigDataSource { + async getConfig() { + // Fake API call + const v = await new Promise<{ json: () => Promise }>( + (resolve) => { + resolve({ + json: async () => + new Promise((res) => + res({ + name: "DeviceSDK", + version: "0.0.0-fake.1", + yolo: "yolo", + }) + ), + }); + } + ); + const json = await v.json(); + const config = this._parseResponse(json); + return config; + } + + // Parser for the DTO + // parserResponse: ConfigDTO => Config + private _parseResponse(dto: ConfigDTO): Config { + const { name, version } = dto; + return { name, version }; + } +} + +/** + * class RemoteRestConfigDataSource + * This is a remote data source that reads the config from a remote API (example). + */ +@injectable() +export class MockRemoteConfigDataSource implements RemoteConfigDataSource { + async getConfig(): Promise { + return new Promise((res) => + res({ + name: "DeviceSDK", + version: "0.0.0-fake.2", + }) + ); + } +} diff --git a/packages/core/src/internal/config/data/version.json b/packages/core/src/internal/config/data/version.json new file mode 100644 index 000000000..2fde7da1a --- /dev/null +++ b/packages/core/src/internal/config/data/version.json @@ -0,0 +1,4 @@ +{ + "name": "DeviceSDK", + "version": "0.0.0-local.1" +} diff --git a/packages/core/src/internal/config/di/configModule.test.ts b/packages/core/src/internal/config/di/configModule.test.ts new file mode 100644 index 000000000..d1aa46942 --- /dev/null +++ b/packages/core/src/internal/config/di/configModule.test.ts @@ -0,0 +1,55 @@ +import { Container } from "inversify"; +import configModuleFactory from "./configModule"; +import { types } from "./configTypes"; +import { + FileLocalConfigDataSource, + MockLocalConfigDataSource, +} from "../data/LocalConfigDataSource"; +import { + MockRemoteConfigDataSource, + RestRemoteConfigDataSource, +} from "../data/RemoteConfigDataSource"; + +describe("configModuleFactory", () => { + describe("Default", () => { + let container: Container; + let mod: ReturnType; + beforeEach(() => { + mod = configModuleFactory(); + container = new Container(); + container.load(mod); + }); + + it("should return the config module", () => { + expect(mod).toBeDefined(); + }); + + it("should return none mocked data sources", () => { + const localDataSource = container.get(types.LocalConfigDataSource); + const remoteDataSource = container.get(types.RemoteConfigDataSource); + expect(localDataSource).toBeInstanceOf(FileLocalConfigDataSource); + expect(remoteDataSource).toBeInstanceOf(RestRemoteConfigDataSource); + }); + }); + + describe("Mocked", () => { + let container: Container; + let mod: ReturnType; + beforeAll(() => { + mod = configModuleFactory(true); + container = new Container(); + container.load(mod); + }); + + it("should return the config module", () => { + expect(mod).toBeDefined(); + }); + + it("should return mocked data sources", () => { + const localDataSource = container.get(types.LocalConfigDataSource); + const remoteDataSource = container.get(types.RemoteConfigDataSource); + expect(localDataSource).toBeInstanceOf(MockLocalConfigDataSource); + expect(remoteDataSource).toBeInstanceOf(MockRemoteConfigDataSource); + }); + }); +}); diff --git a/packages/core/src/internal/config/di/configModule.ts b/packages/core/src/internal/config/di/configModule.ts new file mode 100644 index 000000000..8ffebf9ab --- /dev/null +++ b/packages/core/src/internal/config/di/configModule.ts @@ -0,0 +1,30 @@ +import { ContainerModule } from "inversify"; +import { + FileLocalConfigDataSource, + MockLocalConfigDataSource, +} from "../data/LocalConfigDataSource"; +import { + MockRemoteConfigDataSource, + RestRemoteConfigDataSource, +} from "../data/RemoteConfigDataSource"; +import { DefaultConfigService } from "../service/DefaultConfigService"; +import { GetSDKVersionUseCase } from "../usecase/GetSdkVersionUseCase"; +import { types } from "./configTypes"; + +// This module is used to configure the dependency injection container +// This is where we will bind our interfaces to their implementations (or mocks...) +const configModuleFactory = (mock = false) => + new ContainerModule((bind, _unbind, _isBound, rebind) => { + bind(types.LocalConfigDataSource).to(FileLocalConfigDataSource); + bind(types.RemoteConfigDataSource).to(RestRemoteConfigDataSource); + bind(types.GetSDKVersionUseCase).to(GetSDKVersionUseCase); + bind(types.ConfigService).to(DefaultConfigService); + + if (mock) { + // We can rebind our interfaces to their mock implementations + rebind(types.LocalConfigDataSource).to(MockLocalConfigDataSource); + rebind(types.RemoteConfigDataSource).to(MockRemoteConfigDataSource); + } + }); + +export default configModuleFactory; diff --git a/packages/core/src/internal/config/di/configTypes.ts b/packages/core/src/internal/config/di/configTypes.ts new file mode 100644 index 000000000..059fd1c2a --- /dev/null +++ b/packages/core/src/internal/config/di/configTypes.ts @@ -0,0 +1,6 @@ +export const types = { + LocalConfigDataSource: Symbol.for("LocalConfigDataSource"), + RemoteConfigDataSource: Symbol.for("RemoteConfigDataSource"), + ConfigService: Symbol.for("ConfigService"), + GetSDKVersionUseCase: Symbol.for("GetSDKVersionUseCase"), +}; diff --git a/packages/core/src/internal/config/model/Config.ts b/packages/core/src/internal/config/model/Config.ts new file mode 100644 index 000000000..8f537fcdc --- /dev/null +++ b/packages/core/src/internal/config/model/Config.ts @@ -0,0 +1,6 @@ +// Domain scoped types + +export type Config = { + version: string; + name: string; +}; diff --git a/packages/core/src/internal/config/service/ConfigService.ts b/packages/core/src/internal/config/service/ConfigService.ts new file mode 100644 index 000000000..224762f3b --- /dev/null +++ b/packages/core/src/internal/config/service/ConfigService.ts @@ -0,0 +1,3 @@ +export interface ConfigService { + getSdkVersion(): Promise; +} diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts new file mode 100644 index 000000000..147d74e2d --- /dev/null +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -0,0 +1,43 @@ +import { ConfigService } from "./ConfigService"; +import { DefaultConfigService } from "./DefaultConfigService"; + +const localDataSource = { + getConfig: jest.fn(), +}; + +const remoteDataSource = { + getConfig: jest.fn(), + parseResponse: jest.fn(), +}; + +let service: ConfigService; +describe("DefaultConfigService", () => { + beforeEach(() => { + remoteDataSource.getConfig.mockClear(); + localDataSource.getConfig.mockClear(); + service = new DefaultConfigService(localDataSource, remoteDataSource); + }); + + describe("when the local config is available", () => { + it("should return the `local` version", async () => { + localDataSource.getConfig.mockReturnValue({ + name: "DeviceSDK", + version: "1.0.0-local", + }); + + expect(await service.getSdkVersion()).toBe("1.0.0-local"); + }); + }); + + describe("when the local config is not available", () => { + it("should return the `remote` version", async () => { + localDataSource.getConfig.mockReturnValue(""); + remoteDataSource.getConfig.mockResolvedValue({ + name: "DeviceSDK", + version: "1.0.0-remote", + }); + + expect(await service.getSdkVersion()).toBe("1.0.0-remote"); + }); + }); +}); diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts new file mode 100644 index 000000000..3801f0192 --- /dev/null +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -0,0 +1,30 @@ +import { inject, injectable } from "inversify"; +import "reflect-metadata"; +import { ConfigService } from "./ConfigService"; +import { types } from "../di/configTypes"; +import type { + LocalConfigDataSource, + RemoteConfigDataSource, +} from "../data/ConfigDataSource"; + +@injectable() +export class DefaultConfigService implements ConfigService { + private _local: LocalConfigDataSource; + private _remote: RemoteConfigDataSource; + constructor( + @inject(types.LocalConfigDataSource) local: LocalConfigDataSource, + @inject(types.RemoteConfigDataSource) remote: RemoteConfigDataSource + ) { + this._local = local; + this._remote = remote; + } + + async getSdkVersion(): Promise { + const localConfig = this._local.getConfig(); + if (localConfig?.version) { + return this._local.getConfig().version; + } + + return this._remote.getConfig().then((config) => config.version); + } +} diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts new file mode 100644 index 000000000..c620f476f --- /dev/null +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts @@ -0,0 +1,20 @@ +import { GetSDKVersionUseCase } from "./GetSdkVersionUseCase"; + +const getSdkVersionMock = jest.fn(); + +let usecase: GetSDKVersionUseCase; +describe("GetSdkVersionUseCase", () => { + beforeEach(() => { + getSdkVersionMock.mockClear(); + const configService = { + getSdkVersion: getSdkVersionMock, + }; + + usecase = new GetSDKVersionUseCase(configService); + }); + + it("should return the sdk version", async () => { + getSdkVersionMock.mockResolvedValue("1.0.0"); + expect(await usecase.getSdkVersion()).toBe("1.0.0"); + }); +}); diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts new file mode 100644 index 000000000..4b00e1542 --- /dev/null +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts @@ -0,0 +1,20 @@ +import { inject, injectable } from "inversify"; +import "reflect-metadata"; +import type { ConfigService } from "../service/ConfigService"; +import { types } from "../di/configTypes"; + +/** + * class GetSDKVersionUseCase + * This is our actual use case that our SDK will use. + * We will have many use cases in our SDK, and each should be contained in its own file. + */ +@injectable() +export class GetSDKVersionUseCase { + private _configService: ConfigService; + constructor(@inject(types.ConfigService) configService: ConfigService) { + this._configService = configService; + } + async getSdkVersion(): Promise { + return await this._configService.getSdkVersion(); + } +} diff --git a/packages/signer/.eslintrc.js b/packages/signer/.eslintrc.js index e28ab25b8..f1495cd5c 100644 --- a/packages/signer/.eslintrc.js +++ b/packages/signer/.eslintrc.js @@ -2,7 +2,7 @@ module.exports = { root: true, extends: ["@ledgerhq/dsdk"], parserOptions: { - project: ["./tsconfig.json"], + project: true, tsconfigRootDir: __dirname, }, }; diff --git a/packages/trusted-apps/.eslintrc.js b/packages/trusted-apps/.eslintrc.js index e28ab25b8..f1495cd5c 100644 --- a/packages/trusted-apps/.eslintrc.js +++ b/packages/trusted-apps/.eslintrc.js @@ -2,7 +2,7 @@ module.exports = { root: true, extends: ["@ledgerhq/dsdk"], parserOptions: { - project: ["./tsconfig.json"], + project: true, tsconfigRootDir: __dirname, }, }; diff --git a/packages/ui/.eslintrc.js b/packages/ui/.eslintrc.js index e28ab25b8..f1495cd5c 100644 --- a/packages/ui/.eslintrc.js +++ b/packages/ui/.eslintrc.js @@ -2,7 +2,7 @@ module.exports = { root: true, extends: ["@ledgerhq/dsdk"], parserOptions: { - project: ["./tsconfig.json"], + project: true, tsconfigRootDir: __dirname, }, }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f6a5c2407..a2d988118 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -117,6 +117,9 @@ importers: inversify: specifier: ^6.0.2 version: 6.0.2 + inversify-logger-middleware: + specifier: ^3.1.0 + version: 3.1.0 reflect-metadata: specifier: ^0.2.1 version: 0.2.1 @@ -130,6 +133,9 @@ importers: '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.10.6)(typescript@5.3.3) packages/signer: dependencies: @@ -1867,6 +1873,15 @@ packages: /caniuse-lite@1.0.30001570: resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + /chalk@2.3.0: + resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 4.5.0 + dev: false + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -3256,6 +3271,11 @@ packages: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true + /has-flag@2.0.0: + resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} + engines: {node: '>=0.10.0'} + dev: false + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -3374,6 +3394,12 @@ packages: side-channel: 1.0.4 dev: true + /inversify-logger-middleware@3.1.0: + resolution: {integrity: sha512-jKwwuQ3cDwCasgSdgUyF3DTlIvcfAVqcs3ViMXrKj5L7AqVP5hd2dnrHr3v8XZf984t6fsj+1Wic43A5WDtkEA==} + dependencies: + chalk: 2.3.0 + dev: false + /inversify@6.0.2: resolution: {integrity: sha512-i9m8j/7YIv4mDuYXUAcrpKPSaju/CIly9AHK5jvCBeoiM/2KEsuCQTTP+rzSWWpLYWRukdXFSl6ZTk2/uumbiA==} dev: false @@ -5432,6 +5458,13 @@ packages: ts-interface-checker: 0.1.13 dev: true + /supports-color@4.5.0: + resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} + engines: {node: '>=4'} + dependencies: + has-flag: 2.0.0 + dev: false + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} From 2ba743eec7f50a2db03697dde66520c23e71d4ec Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 24 Jan 2024 10:43:37 +0100 Subject: [PATCH 030/253] chore: update naming to have better convention + named arguments --- packages/core/scripts/add-module.mjs | 17 +++++++------ packages/core/src/di.ts | 9 +++++-- packages/core/src/index.ts | 24 ++++++++++++------- packages/core/src/internal/config/data/DTO.ts | 2 +- .../config/data/RemoteConfigDataSource.ts | 6 ++--- .../src/internal/config/di/configModule.ts | 10 +++++--- .../src/internal/config/di/configTypes.ts | 2 +- .../usecase/GetSdkVersionUseCase.test.ts | 6 ++--- .../config/usecase/GetSdkVersionUseCase.ts | 2 +- 9 files changed, 46 insertions(+), 32 deletions(-) diff --git a/packages/core/scripts/add-module.mjs b/packages/core/scripts/add-module.mjs index b0a1e9474..377da64ad 100644 --- a/packages/core/scripts/add-module.mjs +++ b/packages/core/scripts/add-module.mjs @@ -1,28 +1,27 @@ #!/usr/bin/env zx import "zx/globals"; import { basename } from "node:path"; -const features = argv._; +const modules = argv._; -if (!features.length) { +if (!modules.length) { console.error(`Usage: ${basename(__filename)} [ ...]`); process.exit(1); } within(async () => { cd("src/internal"); - for (const feature of features) { - const rootFolderName = `${feature}`; - const featureUppercased = - feature.charAt(0).toUpperCase() + feature.slice(1); + for (const mod of modules) { + const rootFolderName = `${mod}`; + const featureUppercased = mod.charAt(0).toUpperCase() + mod.slice(1); await $`mkdir ${rootFolderName}`; within(async () => { cd(rootFolderName); await $`mkdir data di model service usecase`; const files = [ `data/${featureUppercased}DataSource.ts`, - `di/${feature}Module.test.ts`, - `di/${feature}Module.ts`, - `di/${feature}Types.ts`, + `di/${mod}Module.test.ts`, + `di/${mod}Module.ts`, + `di/${mod}Types.ts`, `model/.gitkeep`, `service/${featureUppercased}Service.ts`, `service/Default${featureUppercased}Service.test.ts`, diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 1e475ca15..751697b00 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -5,10 +5,15 @@ import configModuleFactory from "./internal/config/di/configModule"; const logger = makeLoggerMiddleware(); -export const makeContainer = (mock = false) => { +type MakeContainerProps = { + mock: boolean; +}; +export const makeContainer = ({ + mock = false, +}: Partial = {}) => { const container = new Container(); container.applyMiddleware(logger); - container.load(configModuleFactory(mock)); + container.load(configModuleFactory({ mock })); return container; }; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 28d2d16e9..da0b16c14 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -2,18 +2,24 @@ import "reflect-metadata"; import { makeContainer } from "./di"; import { types } from "./internal/config/di/configTypes"; -import { GetSDKVersionUseCase } from "./internal/config/usecase/GetSdkVersionUseCase"; +import { GetSdkVersionUseCase } from "./internal/config/usecase/GetSdkVersionUseCase"; export * from "./api"; export * from "./transport"; -const container = makeContainer(); -const mockContainer = makeContainer(true); +async function main(): Promise { + const container = makeContainer(); + const mockContainer = makeContainer({ mock: true }); -const mod = container.get(types.GetSDKVersionUseCase); -console.log("module.getSdkVersion", mod.getSdkVersion()); + const mod = container.get(types.GetSdkVersionUseCase); + console.log("module.getSdkVersion", await mod.getSdkVersion()); -const mockModule = mockContainer.get( - types.GetSDKVersionUseCase -); -console.log("mockModule.getSdkVersion", mockModule.getSdkVersion()); + const mockModule = mockContainer.get( + types.GetSdkVersionUseCase + ); + console.log("mockModule.getSdkVersion", await mockModule.getSdkVersion()); +} + +main().catch((err) => { + console.error(err); +}); diff --git a/packages/core/src/internal/config/data/DTO.ts b/packages/core/src/internal/config/data/DTO.ts index 216534900..8869cbe7d 100644 --- a/packages/core/src/internal/config/data/DTO.ts +++ b/packages/core/src/internal/config/data/DTO.ts @@ -2,7 +2,7 @@ // They will usually be the response of an API call that will need to be parsed // into an object used by the application. (in our example: DTOConfig => Config) -export type ConfigDTO = { +export type ConfigDto = { version: string; name: string; yolo: string; diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts index 5a66ef68f..e3baa4072 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts @@ -1,7 +1,7 @@ import { injectable } from "inversify"; import "reflect-metadata"; import { RemoteConfigDataSource } from "./ConfigDataSource"; -import { ConfigDTO } from "./DTO"; +import { ConfigDto } from "./Dto"; import { Config } from "../model/Config"; /** @@ -12,7 +12,7 @@ import { Config } from "../model/Config"; export class RestRemoteConfigDataSource implements RemoteConfigDataSource { async getConfig() { // Fake API call - const v = await new Promise<{ json: () => Promise }>( + const v = await new Promise<{ json: () => Promise }>( (resolve) => { resolve({ json: async () => @@ -33,7 +33,7 @@ export class RestRemoteConfigDataSource implements RemoteConfigDataSource { // Parser for the DTO // parserResponse: ConfigDTO => Config - private _parseResponse(dto: ConfigDTO): Config { + private _parseResponse(dto: ConfigDto): Config { const { name, version } = dto; return { name, version }; } diff --git a/packages/core/src/internal/config/di/configModule.ts b/packages/core/src/internal/config/di/configModule.ts index 8ffebf9ab..a6add8796 100644 --- a/packages/core/src/internal/config/di/configModule.ts +++ b/packages/core/src/internal/config/di/configModule.ts @@ -8,16 +8,20 @@ import { RestRemoteConfigDataSource, } from "../data/RemoteConfigDataSource"; import { DefaultConfigService } from "../service/DefaultConfigService"; -import { GetSDKVersionUseCase } from "../usecase/GetSdkVersionUseCase"; +import { GetSdkVersionUseCase } from "../usecase/GetSdkVersionUseCase"; import { types } from "./configTypes"; // This module is used to configure the dependency injection container // This is where we will bind our interfaces to their implementations (or mocks...) -const configModuleFactory = (mock = false) => +type FactoryProps = { + mock?: boolean; +}; + +const configModuleFactory = ({ mock = false }: FactoryProps) => new ContainerModule((bind, _unbind, _isBound, rebind) => { bind(types.LocalConfigDataSource).to(FileLocalConfigDataSource); bind(types.RemoteConfigDataSource).to(RestRemoteConfigDataSource); - bind(types.GetSDKVersionUseCase).to(GetSDKVersionUseCase); + bind(types.GetSdkVersionUseCase).to(GetSdkVersionUseCase); bind(types.ConfigService).to(DefaultConfigService); if (mock) { diff --git a/packages/core/src/internal/config/di/configTypes.ts b/packages/core/src/internal/config/di/configTypes.ts index 059fd1c2a..a0de0a651 100644 --- a/packages/core/src/internal/config/di/configTypes.ts +++ b/packages/core/src/internal/config/di/configTypes.ts @@ -2,5 +2,5 @@ export const types = { LocalConfigDataSource: Symbol.for("LocalConfigDataSource"), RemoteConfigDataSource: Symbol.for("RemoteConfigDataSource"), ConfigService: Symbol.for("ConfigService"), - GetSDKVersionUseCase: Symbol.for("GetSDKVersionUseCase"), + GetSdkVersionUseCase: Symbol.for("GetSdkVersionUseCase"), }; diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts index c620f476f..0dae922db 100644 --- a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts @@ -1,8 +1,8 @@ -import { GetSDKVersionUseCase } from "./GetSdkVersionUseCase"; +import { GetSdkVersionUseCase } from "./GetSdkVersionUseCase"; const getSdkVersionMock = jest.fn(); -let usecase: GetSDKVersionUseCase; +let usecase: GetSdkVersionUseCase; describe("GetSdkVersionUseCase", () => { beforeEach(() => { getSdkVersionMock.mockClear(); @@ -10,7 +10,7 @@ describe("GetSdkVersionUseCase", () => { getSdkVersion: getSdkVersionMock, }; - usecase = new GetSDKVersionUseCase(configService); + usecase = new GetSdkVersionUseCase(configService); }); it("should return the sdk version", async () => { diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts index 4b00e1542..564f77649 100644 --- a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts @@ -9,7 +9,7 @@ import { types } from "../di/configTypes"; * We will have many use cases in our SDK, and each should be contained in its own file. */ @injectable() -export class GetSDKVersionUseCase { +export class GetSdkVersionUseCase { private _configService: ConfigService; constructor(@inject(types.ConfigService) configService: ConfigService) { this._configService = configService; From 8bd27d73a97ce6e13bf3c3a2fe43dca533b6adfe Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 24 Jan 2024 11:22:51 +0100 Subject: [PATCH 031/253] chore: only import reflect-metadata once --- packages/core/jest.config.ts | 1 + packages/core/jest.setup.ts | 1 + packages/core/src/di.ts | 1 - .../core/src/internal/config/data/LocalConfigDataSource.ts | 1 - .../core/src/internal/config/data/RemoteConfigDataSource.ts | 1 - packages/core/src/internal/config/di/configModule.test.ts | 2 +- packages/core/src/internal/config/di/configModule.ts | 4 ++-- .../core/src/internal/config/service/DefaultConfigService.ts | 1 - .../core/src/internal/config/usecase/GetSdkVersionUseCase.ts | 1 - packages/core/tsconfig.json | 2 +- 10 files changed, 6 insertions(+), 9 deletions(-) create mode 100644 packages/core/jest.setup.ts diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index 62a1facb2..25a800f87 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -2,6 +2,7 @@ import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; const config: JestConfigWithTsJest = { preset: "@ledgerhq/jest-config-dsdk", + setupFiles: ["/jest.setup.ts"], }; export default config; diff --git a/packages/core/jest.setup.ts b/packages/core/jest.setup.ts new file mode 100644 index 000000000..fded23ac1 --- /dev/null +++ b/packages/core/jest.setup.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 751697b00..4df17acf9 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -1,6 +1,5 @@ import { Container } from "inversify"; import { makeLoggerMiddleware } from "inversify-logger-middleware"; -import "reflect-metadata"; import configModuleFactory from "./internal/config/di/configModule"; const logger = makeLoggerMiddleware(); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index 7b7f7c068..f549bf32c 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -1,6 +1,5 @@ import fs from "fs"; import { injectable } from "inversify"; -import "reflect-metadata"; import { Config } from "../model/Config"; import { LocalConfigDataSource } from "./ConfigDataSource"; import path from "path"; diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts index e3baa4072..c894664ae 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts @@ -1,5 +1,4 @@ import { injectable } from "inversify"; -import "reflect-metadata"; import { RemoteConfigDataSource } from "./ConfigDataSource"; import { ConfigDto } from "./Dto"; import { Config } from "../model/Config"; diff --git a/packages/core/src/internal/config/di/configModule.test.ts b/packages/core/src/internal/config/di/configModule.test.ts index d1aa46942..f25327d8c 100644 --- a/packages/core/src/internal/config/di/configModule.test.ts +++ b/packages/core/src/internal/config/di/configModule.test.ts @@ -36,7 +36,7 @@ describe("configModuleFactory", () => { let container: Container; let mod: ReturnType; beforeAll(() => { - mod = configModuleFactory(true); + mod = configModuleFactory({ mock: true }); container = new Container(); container.load(mod); }); diff --git a/packages/core/src/internal/config/di/configModule.ts b/packages/core/src/internal/config/di/configModule.ts index a6add8796..9a6d4a3da 100644 --- a/packages/core/src/internal/config/di/configModule.ts +++ b/packages/core/src/internal/config/di/configModule.ts @@ -14,10 +14,10 @@ import { types } from "./configTypes"; // This module is used to configure the dependency injection container // This is where we will bind our interfaces to their implementations (or mocks...) type FactoryProps = { - mock?: boolean; + mock: boolean; }; -const configModuleFactory = ({ mock = false }: FactoryProps) => +const configModuleFactory = ({ mock = false }: Partial = {}) => new ContainerModule((bind, _unbind, _isBound, rebind) => { bind(types.LocalConfigDataSource).to(FileLocalConfigDataSource); bind(types.RemoteConfigDataSource).to(RestRemoteConfigDataSource); diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index 3801f0192..c680edcf7 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -1,5 +1,4 @@ import { inject, injectable } from "inversify"; -import "reflect-metadata"; import { ConfigService } from "./ConfigService"; import { types } from "../di/configTypes"; import type { diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts index 564f77649..1bcbfcd04 100644 --- a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts @@ -1,5 +1,4 @@ import { inject, injectable } from "inversify"; -import "reflect-metadata"; import type { ConfigService } from "../service/ConfigService"; import { types } from "../di/configTypes"; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 52d8bbf1d..af298fa8e 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*", "jest.config.ts"] + "include": ["src/**/*", "jest.config.ts", "jest.setup.ts"] } From 4f1ead8b417f9c24cf97ec235b118a71ef180131 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 24 Jan 2024 11:38:09 +0100 Subject: [PATCH 032/253] chore: move mocks to .stub.ts files --- packages/core/jest.config.ts | 5 +++++ packages/core/package.json | 2 +- .../internal/config/data/{DTO.ts => Dto.ts} | 0 .../config/data/LocalConfigDataSource.stub.ts | 19 ++++++++++++++++++ .../config/data/LocalConfigDataSource.test.ts | 10 ++++------ .../config/data/LocalConfigDataSource.ts | 15 -------------- .../data/RemoteConfigDataSource.stub.ts | 19 ++++++++++++++++++ .../data/RemoteConfigDataSource.test.ts | 8 +++----- .../config/data/RemoteConfigDataSource.ts | 20 ++----------------- .../internal/config/di/configModule.test.ts | 16 ++++++--------- .../src/internal/config/di/configModule.ts | 16 ++++++--------- .../internal/config/service/ConfigService.ts | 4 +++- .../service/DefaultConfigService.test.ts | 10 ++++++++-- .../config/service/DefaultConfigService.ts | 7 ++++--- .../usecase/GetSdkVersionUseCase.test.ts | 13 +++++++----- .../config/usecase/GetSdkVersionUseCase.ts | 2 +- 16 files changed, 89 insertions(+), 77 deletions(-) rename packages/core/src/internal/config/data/{DTO.ts => Dto.ts} (100%) create mode 100644 packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts create mode 100644 packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index 25a800f87..e96a4dbad 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -3,6 +3,11 @@ import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; const config: JestConfigWithTsJest = { preset: "@ledgerhq/jest-config-dsdk", setupFiles: ["/jest.setup.ts"], + collectCoverageFrom: [ + // TODO: remove internal when the rest of the files are setup + "src/internal/**/*.ts", + "!src/**/*.stub.ts", + ], }; export default config; diff --git a/packages/core/package.json b/packages/core/package.json index 647887fc3..d41b3a187 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -12,7 +12,7 @@ "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", - "test:unit": "jest --coverage --collectCoverageFrom=\"src/internal/**/*.ts\" src", + "test:unit": "jest --coverage src", "module:init": "zx scripts/add-module.mjs", "run:index": "ts-node src/index.ts" }, diff --git a/packages/core/src/internal/config/data/DTO.ts b/packages/core/src/internal/config/data/Dto.ts similarity index 100% rename from packages/core/src/internal/config/data/DTO.ts rename to packages/core/src/internal/config/data/Dto.ts diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts new file mode 100644 index 000000000..51659fc48 --- /dev/null +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts @@ -0,0 +1,19 @@ +import { injectable } from "inversify"; +import { Config } from "../model/Config"; +import { LocalConfigDataSource } from "./ConfigDataSource"; + +/** + * + * class StubLocalConfigDataSource + * + */ + +@injectable() +export class StubLocalConfigDataSource implements LocalConfigDataSource { + getConfig(): Config { + return { + name: "DeviceSDK", + version: "0.0.0-mock.1", + }; + } +} diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts index f4b428f70..59485444f 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts @@ -1,9 +1,7 @@ import fs from "fs"; import { LocalConfigDataSource } from "./ConfigDataSource"; -import { - FileLocalConfigDataSource, - MockLocalConfigDataSource, -} from "./LocalConfigDataSource"; +import { FileLocalConfigDataSource } from "./LocalConfigDataSource"; +import { StubLocalConfigDataSource } from "./LocalConfigDataSource.stub"; const readFileSyncSpy = jest.spyOn(fs, "readFileSync"); @@ -26,9 +24,9 @@ describe("LocalConfigDataSource", () => { }); }); - describe("MockLocalConfigDataSource", () => { + describe("StubLocalConfigDataSource", () => { beforeEach(() => { - datasource = new MockLocalConfigDataSource(); + datasource = new StubLocalConfigDataSource(); }); it("should return the config", () => { diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index f549bf32c..89726302d 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -20,18 +20,3 @@ export class FileLocalConfigDataSource implements LocalConfigDataSource { return JSON.parse(version) as Config; } } - -/** - * - * class MockLocalConfigDataSource - * - */ -@injectable() -export class MockLocalConfigDataSource implements LocalConfigDataSource { - getConfig(): Config { - return { - name: "DeviceSDK", - version: "0.0.0-mock.1", - }; - } -} diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts new file mode 100644 index 000000000..448b9f3c6 --- /dev/null +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts @@ -0,0 +1,19 @@ +import { injectable } from "inversify"; +import { RemoteConfigDataSource } from "./ConfigDataSource"; +import { Config } from "../model/Config"; + +/** + * class RemoteRestConfigDataSource + * This is a remote data source that reads the config from a remote API (example). + */ +@injectable() +export class StubRemoteConfigDataSource implements RemoteConfigDataSource { + async getConfig(): Promise { + return new Promise((res) => + res({ + name: "DeviceSDK", + version: "0.0.0-fake.2", + }) + ); + } +} diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts index 149334eee..fb70ae21a 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts @@ -1,8 +1,6 @@ import { RemoteConfigDataSource } from "./ConfigDataSource"; -import { - RestRemoteConfigDataSource, - MockRemoteConfigDataSource, -} from "./RemoteConfigDataSource"; +import { RestRemoteConfigDataSource } from "./RemoteConfigDataSource"; +import { StubRemoteConfigDataSource } from "./RemoteConfigDataSource.stub"; let datasource: RemoteConfigDataSource; describe("RemoteRestConfigDataSource", () => { @@ -20,7 +18,7 @@ describe("RemoteRestConfigDataSource", () => { }); describe("MockRemoteConfigDataSource", () => { beforeAll(() => { - datasource = new MockRemoteConfigDataSource(); + datasource = new StubRemoteConfigDataSource(); }); it("should return the config", async () => { diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts index c894664ae..06072aa99 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts @@ -30,26 +30,10 @@ export class RestRemoteConfigDataSource implements RemoteConfigDataSource { return config; } - // Parser for the DTO - // parserResponse: ConfigDTO => Config + // Parser for the Dto + // parserResponse: ConfigDto => Config private _parseResponse(dto: ConfigDto): Config { const { name, version } = dto; return { name, version }; } } - -/** - * class RemoteRestConfigDataSource - * This is a remote data source that reads the config from a remote API (example). - */ -@injectable() -export class MockRemoteConfigDataSource implements RemoteConfigDataSource { - async getConfig(): Promise { - return new Promise((res) => - res({ - name: "DeviceSDK", - version: "0.0.0-fake.2", - }) - ); - } -} diff --git a/packages/core/src/internal/config/di/configModule.test.ts b/packages/core/src/internal/config/di/configModule.test.ts index f25327d8c..f825ebde6 100644 --- a/packages/core/src/internal/config/di/configModule.test.ts +++ b/packages/core/src/internal/config/di/configModule.test.ts @@ -1,14 +1,10 @@ import { Container } from "inversify"; import configModuleFactory from "./configModule"; import { types } from "./configTypes"; -import { - FileLocalConfigDataSource, - MockLocalConfigDataSource, -} from "../data/LocalConfigDataSource"; -import { - MockRemoteConfigDataSource, - RestRemoteConfigDataSource, -} from "../data/RemoteConfigDataSource"; +import { FileLocalConfigDataSource } from "../data/LocalConfigDataSource"; +import { StubLocalConfigDataSource } from "../data/LocalConfigDataSource.stub"; +import { RestRemoteConfigDataSource } from "../data/RemoteConfigDataSource"; +import { StubRemoteConfigDataSource } from "../data/RemoteConfigDataSource.stub"; describe("configModuleFactory", () => { describe("Default", () => { @@ -48,8 +44,8 @@ describe("configModuleFactory", () => { it("should return mocked data sources", () => { const localDataSource = container.get(types.LocalConfigDataSource); const remoteDataSource = container.get(types.RemoteConfigDataSource); - expect(localDataSource).toBeInstanceOf(MockLocalConfigDataSource); - expect(remoteDataSource).toBeInstanceOf(MockRemoteConfigDataSource); + expect(localDataSource).toBeInstanceOf(StubLocalConfigDataSource); + expect(remoteDataSource).toBeInstanceOf(StubRemoteConfigDataSource); }); }); }); diff --git a/packages/core/src/internal/config/di/configModule.ts b/packages/core/src/internal/config/di/configModule.ts index 9a6d4a3da..09ee5fb0f 100644 --- a/packages/core/src/internal/config/di/configModule.ts +++ b/packages/core/src/internal/config/di/configModule.ts @@ -1,12 +1,8 @@ import { ContainerModule } from "inversify"; -import { - FileLocalConfigDataSource, - MockLocalConfigDataSource, -} from "../data/LocalConfigDataSource"; -import { - MockRemoteConfigDataSource, - RestRemoteConfigDataSource, -} from "../data/RemoteConfigDataSource"; +import { FileLocalConfigDataSource } from "../data/LocalConfigDataSource"; +import { StubLocalConfigDataSource } from "../data/LocalConfigDataSource.stub"; +import { RestRemoteConfigDataSource } from "../data/RemoteConfigDataSource"; +import { StubRemoteConfigDataSource } from "../data/RemoteConfigDataSource.stub"; import { DefaultConfigService } from "../service/DefaultConfigService"; import { GetSdkVersionUseCase } from "../usecase/GetSdkVersionUseCase"; import { types } from "./configTypes"; @@ -26,8 +22,8 @@ const configModuleFactory = ({ mock = false }: Partial = {}) => if (mock) { // We can rebind our interfaces to their mock implementations - rebind(types.LocalConfigDataSource).to(MockLocalConfigDataSource); - rebind(types.RemoteConfigDataSource).to(MockRemoteConfigDataSource); + rebind(types.LocalConfigDataSource).to(StubLocalConfigDataSource); + rebind(types.RemoteConfigDataSource).to(StubRemoteConfigDataSource); } }); diff --git a/packages/core/src/internal/config/service/ConfigService.ts b/packages/core/src/internal/config/service/ConfigService.ts index 224762f3b..d58355bb9 100644 --- a/packages/core/src/internal/config/service/ConfigService.ts +++ b/packages/core/src/internal/config/service/ConfigService.ts @@ -1,3 +1,5 @@ +import { Config } from "../model/Config"; + export interface ConfigService { - getSdkVersion(): Promise; + getSdkConfig(): Promise; } diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index 147d74e2d..e7628c35f 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -25,7 +25,10 @@ describe("DefaultConfigService", () => { version: "1.0.0-local", }); - expect(await service.getSdkVersion()).toBe("1.0.0-local"); + expect(await service.getSdkConfig()).toStrictEqual({ + name: "DeviceSDK", + version: "1.0.0-local", + }); }); }); @@ -37,7 +40,10 @@ describe("DefaultConfigService", () => { version: "1.0.0-remote", }); - expect(await service.getSdkVersion()).toBe("1.0.0-remote"); + expect(await service.getSdkConfig()).toStrictEqual({ + name: "DeviceSDK", + version: "1.0.0-remote", + }); }); }); }); diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index c680edcf7..59256fbfd 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -5,6 +5,7 @@ import type { LocalConfigDataSource, RemoteConfigDataSource, } from "../data/ConfigDataSource"; +import { Config } from "../model/Config"; @injectable() export class DefaultConfigService implements ConfigService { @@ -18,12 +19,12 @@ export class DefaultConfigService implements ConfigService { this._remote = remote; } - async getSdkVersion(): Promise { + async getSdkConfig(): Promise { const localConfig = this._local.getConfig(); if (localConfig?.version) { - return this._local.getConfig().version; + return this._local.getConfig(); } - return this._remote.getConfig().then((config) => config.version); + return this._remote.getConfig().then((config) => config); } } diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts index 0dae922db..a6cfe70a5 100644 --- a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts @@ -1,20 +1,23 @@ import { GetSdkVersionUseCase } from "./GetSdkVersionUseCase"; -const getSdkVersionMock = jest.fn(); +const getSdkConfigMock = jest.fn(); let usecase: GetSdkVersionUseCase; describe("GetSdkVersionUseCase", () => { beforeEach(() => { - getSdkVersionMock.mockClear(); + getSdkConfigMock.mockClear(); const configService = { - getSdkVersion: getSdkVersionMock, + getSdkConfig: getSdkConfigMock, }; usecase = new GetSdkVersionUseCase(configService); }); it("should return the sdk version", async () => { - getSdkVersionMock.mockResolvedValue("1.0.0"); - expect(await usecase.getSdkVersion()).toBe("1.0.0"); + getSdkConfigMock.mockResolvedValue({ + name: "DeviceSDK", + version: "1.0.0-mock.1", + }); + expect(await usecase.getSdkVersion()).toBe("1.0.0-mock.1"); }); }); diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts index 1bcbfcd04..adff29256 100644 --- a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts @@ -14,6 +14,6 @@ export class GetSdkVersionUseCase { this._configService = configService; } async getSdkVersion(): Promise { - return await this._configService.getSdkVersion(); + return (await this._configService.getSdkConfig()).version; } } From 443b107223a2eea1049970e7baef574e1c3dcede Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 24 Jan 2024 15:43:35 +0100 Subject: [PATCH 033/253] chore: add purify-ts in the template module --- packages/core/jest.config.ts | 1 + packages/core/package.json | 5 +- packages/core/src/di.ts | 5 +- .../internal/config/data/ConfigDataSource.ts | 6 +- packages/core/src/internal/config/data/Dto.ts | 2 +- .../config/data/LocalConfigDataSource.stub.ts | 7 +- .../config/data/LocalConfigDataSource.test.ts | 47 ++++-- .../config/data/LocalConfigDataSource.ts | 30 +++- .../data/RemoteConfigDataSource.stub.ts | 13 +- .../data/RemoteConfigDataSource.test.ts | 146 ++++++++++++++++-- .../config/data/RemoteConfigDataSource.ts | 83 +++++++--- .../src/internal/config/di/configTypes.ts | 39 +++++ .../service/DefaultConfigService.test.ts | 36 +++-- .../config/service/DefaultConfigService.ts | 22 ++- .../usecase/GetSdkVersionUseCase.test.ts | 4 +- pnpm-lock.yaml | 10 +- 16 files changed, 372 insertions(+), 84 deletions(-) diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index e96a4dbad..c7a18213d 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -3,6 +3,7 @@ import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; const config: JestConfigWithTsJest = { preset: "@ledgerhq/jest-config-dsdk", setupFiles: ["/jest.setup.ts"], + testPathIgnorePatterns: ["/lib/"], collectCoverageFrom: [ // TODO: remove internal when the rest of the files are setup "src/internal/**/*.ts", diff --git a/packages/core/package.json b/packages/core/package.json index d41b3a187..86cbec626 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -12,13 +12,16 @@ "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", - "test:unit": "jest --coverage src", + "test": "jest src", + "test:watch": "pnpm test -- --watch", + "test:coverage": "pnpm test -- --coverage", "module:init": "zx scripts/add-module.mjs", "run:index": "ts-node src/index.ts" }, "dependencies": { "inversify": "^6.0.2", "inversify-logger-middleware": "^3.1.0", + "purify-ts": "^2.0.3", "reflect-metadata": "^0.2.1" }, "devDependencies": { diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 4df17acf9..6fd46ab40 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -12,7 +12,10 @@ export const makeContainer = ({ }: Partial = {}) => { const container = new Container(); container.applyMiddleware(logger); - container.load(configModuleFactory({ mock })); + container.load( + configModuleFactory({ mock }) + // modules go here + ); return container; }; diff --git a/packages/core/src/internal/config/data/ConfigDataSource.ts b/packages/core/src/internal/config/data/ConfigDataSource.ts index 1faf0389a..58f8a3630 100644 --- a/packages/core/src/internal/config/data/ConfigDataSource.ts +++ b/packages/core/src/internal/config/data/ConfigDataSource.ts @@ -1,11 +1,13 @@ +import { Either } from "purify-ts"; +import { LocalConfigFailure, RemoteConfigFailure } from "../di/configTypes"; import { Config } from "../model/Config"; // Describe the different data sources interfaces our application could have export interface LocalConfigDataSource { - getConfig(): Config; + getConfig(): Either; } export interface RemoteConfigDataSource { - getConfig(): Promise; + getConfig(): Promise>; } diff --git a/packages/core/src/internal/config/data/Dto.ts b/packages/core/src/internal/config/data/Dto.ts index 8869cbe7d..328b5e045 100644 --- a/packages/core/src/internal/config/data/Dto.ts +++ b/packages/core/src/internal/config/data/Dto.ts @@ -1,6 +1,6 @@ // Types used by the data sources (here an example for the remote data source) // They will usually be the response of an API call that will need to be parsed -// into an object used by the application. (in our example: DTOConfig => Config) +// into an object used by the application. (in our example: ConfigDto => Config) export type ConfigDto = { version: string; diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts index 51659fc48..8c18bfe09 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts @@ -1,6 +1,7 @@ import { injectable } from "inversify"; import { Config } from "../model/Config"; import { LocalConfigDataSource } from "./ConfigDataSource"; +import { Either } from "purify-ts"; /** * @@ -10,10 +11,10 @@ import { LocalConfigDataSource } from "./ConfigDataSource"; @injectable() export class StubLocalConfigDataSource implements LocalConfigDataSource { - getConfig(): Config { - return { + getConfig(): Either { + return Either.of({ name: "DeviceSDK", version: "0.0.0-mock.1", - }; + }); } } diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts index 59485444f..21b3d1482 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts @@ -1,43 +1,64 @@ import fs from "fs"; import { LocalConfigDataSource } from "./ConfigDataSource"; import { FileLocalConfigDataSource } from "./LocalConfigDataSource"; -import { StubLocalConfigDataSource } from "./LocalConfigDataSource.stub"; +import { Either, Left } from "purify-ts"; +import { JSONParseError, ReadFileError } from "../di/configTypes"; const readFileSyncSpy = jest.spyOn(fs, "readFileSync"); +const jsonParse = jest.spyOn(JSON, "parse"); let datasource: LocalConfigDataSource; describe("LocalConfigDataSource", () => { describe("FileLocalConfigDataSource", () => { beforeEach(() => { readFileSyncSpy.mockClear(); + jsonParse.mockClear(); datasource = new FileLocalConfigDataSource(); + }); + + it("should return an Either", () => { readFileSyncSpy.mockReturnValue( JSON.stringify({ name: "DeviceSDK", version: "0.0.0-spied.1" }) ); - }); - it("should return the config", () => { - expect(datasource.getConfig()).toEqual({ + jsonParse.mockReturnValue({ name: "DeviceSDK", version: "0.0.0-spied.1", }); + + expect(datasource.getConfig()).toStrictEqual( + Either.of({ + name: "DeviceSDK", + version: "0.0.0-spied.1", + }) + ); }); - }); - describe("StubLocalConfigDataSource", () => { - beforeEach(() => { - datasource = new StubLocalConfigDataSource(); + it("should return an Either if readFileSync throws", () => { + const err = new Error("readFileSync error"); + readFileSyncSpy.mockImplementation(() => { + throw err; + }); + + expect(datasource.getConfig()).toEqual(Left(new ReadFileError(err))); }); - it("should return the config", () => { - expect(datasource.getConfig()).toEqual({ - name: "DeviceSDK", - version: "0.0.0-mock.1", + it("should return an Either if JSON.parse throws", () => { + const err = new Error("JSON.parse error"); + readFileSyncSpy.mockReturnValue( + JSON.stringify({ name: "DeviceSDK", version: "0.0.0-spied.1" }) + ); + + jsonParse.mockImplementation(() => { + throw err; }); + + expect(datasource.getConfig()).toEqual(Left(new JSONParseError(err))); }); }); afterAll(() => { - readFileSyncSpy.mockClear(); + readFileSyncSpy.mockRestore(); + jsonParse.mockRestore(); }); }); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index 89726302d..150a1de97 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -1,8 +1,14 @@ import fs from "fs"; import { injectable } from "inversify"; +import path from "path"; +import { Either } from "purify-ts"; +import { + ReadFileError, + JSONParseError, + LocalConfigFailure, +} from "../di/configTypes"; import { Config } from "../model/Config"; import { LocalConfigDataSource } from "./ConfigDataSource"; -import path from "path"; /** * @@ -12,11 +18,21 @@ import path from "path"; */ @injectable() export class FileLocalConfigDataSource implements LocalConfigDataSource { - getConfig(): Config { - const version = fs.readFileSync( - path.join(__dirname, "version.json"), - "utf-8" - ); - return JSON.parse(version) as Config; + getConfig(): Either { + return Either.encase(() => + fs.readFileSync(path.join(__dirname, "version.json"), "utf-8") + ) + .mapLeft((error) => { + console.log("readFileSync error"); + return new ReadFileError(error); + }) + .chain((str) => { + return Either.encase(() => JSON.parse(str) as Config).mapLeft( + (error) => { + console.log("JSON.parse error"); + return new JSONParseError(error); + } + ); + }); } } diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts index 448b9f3c6..0b9732f85 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts @@ -1,6 +1,7 @@ import { injectable } from "inversify"; import { RemoteConfigDataSource } from "./ConfigDataSource"; import { Config } from "../model/Config"; +import { Either } from "purify-ts"; /** * class RemoteRestConfigDataSource @@ -8,12 +9,14 @@ import { Config } from "../model/Config"; */ @injectable() export class StubRemoteConfigDataSource implements RemoteConfigDataSource { - async getConfig(): Promise { + async getConfig(): Promise> { return new Promise((res) => - res({ - name: "DeviceSDK", - version: "0.0.0-fake.2", - }) + res( + Either.of({ + name: "DeviceSDK", + version: "0.0.0-fake.2", + }) + ) ); } } diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts index fb70ae21a..477718e07 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts @@ -1,30 +1,148 @@ +import { Either, Left } from "purify-ts"; import { RemoteConfigDataSource } from "./ConfigDataSource"; import { RestRemoteConfigDataSource } from "./RemoteConfigDataSource"; -import { StubRemoteConfigDataSource } from "./RemoteConfigDataSource.stub"; +import { + ApiCallError, + JSONParseError, + ParseResponseError, +} from "../di/configTypes"; let datasource: RemoteConfigDataSource; +const callApiSpy = jest.spyOn( + RestRemoteConfigDataSource.prototype as any, + "_callApi" +); +const parseResponseSpy = jest.spyOn( + RestRemoteConfigDataSource.prototype as any, + "_parseResponse" +); + describe("RemoteRestConfigDataSource", () => { describe("RestRemoteConfigDataSource", () => { - beforeAll(() => { + beforeEach(() => { + callApiSpy.mockClear(); + parseResponseSpy.mockClear(); datasource = new RestRemoteConfigDataSource(); }); - it("should return the config", async () => { - expect(await datasource.getConfig()).toStrictEqual({ - name: "DeviceSDK", - version: "0.0.0-fake.1", + it("should return an Either", async () => { + callApiSpy.mockResolvedValue( + Either.of({ + ok: true, + json: () => + Promise.resolve( + Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1" }) + ), + }) + ); + + parseResponseSpy.mockReturnValue( + Either.of({ + name: "DeviceSDK", + version: "0.0.0-fake.1", + }) + ); + + expect(await datasource.getConfig()).toStrictEqual( + Either.of({ + name: "DeviceSDK", + version: "0.0.0-fake.1", + }) + ); + }); + + it("should return an Either if _callApi throws", async () => { + const err = new Error("_callApi error"); + callApiSpy.mockResolvedValue(Left(err)); + + expect(await datasource.getConfig()).toStrictEqual( + Left(new ApiCallError(err)) + ); + }); + + it("should return an Either if _callApi returns a non-ok response", async () => { + callApiSpy.mockResolvedValue( + Either.of({ + ok: false, + json: () => + Promise.resolve( + Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1" }) + ), + }) + ); + + expect(await datasource.getConfig()).toStrictEqual( + Left(new ApiCallError(new Error("response not ok"))) + ); + }); + + it("should return an Either if deserializing json fails", async () => { + const err = new Error("deserializing json failure"); + callApiSpy.mockResolvedValue( + Either.of({ + ok: true, + json: () => Promise.resolve(Left(err)), + }) + ); + + expect(await datasource.getConfig()).toStrictEqual( + Left(new JSONParseError()) + ); + }); + + it("should return an Either if _parseResponse throws", async () => { + callApiSpy.mockResolvedValue( + Either.of({ + ok: true, + json: () => + Promise.resolve( + Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1" }) + ), + }) + ); + + parseResponseSpy.mockImplementation(() => { + return Left(new ParseResponseError()); }); + + expect(await datasource.getConfig()).toStrictEqual( + Left(new ParseResponseError()) + ); }); - }); - describe("MockRemoteConfigDataSource", () => { - beforeAll(() => { - datasource = new StubRemoteConfigDataSource(); + + it("should return an Either if `name` is missing in Dto", async () => { + parseResponseSpy.mockRestore(); + callApiSpy.mockResolvedValue( + Either.of({ + ok: true, + json: () => + Promise.resolve( + Either.of({ + version: "0.0.0-fake.1", + yolo: "yolo", + }) + ), + }) + ); + + expect(await datasource.getConfig()).toStrictEqual( + Left(new ParseResponseError()) + ); }); - it("should return the config", async () => { - expect(await datasource.getConfig()).toStrictEqual({ - name: "DeviceSDK", - version: "0.0.0-fake.2", + describe("without private methods spy", () => { + beforeEach(() => { + callApiSpy.mockRestore(); + parseResponseSpy.mockRestore(); + }); + + it("should return an Either", async () => { + expect(await datasource.getConfig()).toStrictEqual( + Either.of({ + name: "DeviceSDK", + version: "0.0.0-fake.1", + }) + ); }); }); }); diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts index 06072aa99..88797ce88 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts @@ -2,6 +2,13 @@ import { injectable } from "inversify"; import { RemoteConfigDataSource } from "./ConfigDataSource"; import { ConfigDto } from "./Dto"; import { Config } from "../model/Config"; +import { + ApiCallError, + JSONParseError, + ParseResponseError, + RemoteConfigFailure, +} from "../di/configTypes"; +import { Either, Left } from "purify-ts"; /** * class RemoteRestConfigDataSource @@ -9,31 +16,65 @@ import { Config } from "../model/Config"; */ @injectable() export class RestRemoteConfigDataSource implements RemoteConfigDataSource { - async getConfig() { - // Fake API call - const v = await new Promise<{ json: () => Promise }>( - (resolve) => { - resolve({ - json: async () => - new Promise((res) => - res({ - name: "DeviceSDK", - version: "0.0.0-fake.1", - yolo: "yolo", - }) - ), - }); - } - ); - const json = await v.json(); - const config = this._parseResponse(json); - return config; + async getConfig(): Promise> { + const call = await this._callApi(); + if (call.isLeft()) { + console.error("ApiCallError"); + return Left(new ApiCallError(call.extract())); + } + + if (!call.extract().ok) { + console.error("ApiCallError"); + return Left(new ApiCallError(new Error("response not ok"))); + } + + const json = await call.extract().json(); + if (json.isLeft()) { + console.error("JSONParseError"); + return Left(new JSONParseError()); + } + + return json + .chain((dto) => this._parseResponse(dto)) + .map((config) => config); } // Parser for the Dto // parserResponse: ConfigDto => Config - private _parseResponse(dto: ConfigDto): Config { + private _parseResponse(dto: ConfigDto): Either { const { name, version } = dto; - return { name, version }; + if (!name || !version) { + console.log("missing stuff"); + return Left(new ParseResponseError()); + } + return Either.of({ name, version }); + } + + private _callApi(): Promise< + Either< + never, + { + ok: boolean; + json: () => Promise>; + } + > + > { + return new Promise((res) => { + res( + Either.of({ + ok: true, + json: async () => + new Promise((r) => { + r( + Either.of({ + name: "DeviceSDK", + version: "0.0.0-fake.1", + yolo: "yolo", + }) + ); + }), + }) + ); + }); } } diff --git a/packages/core/src/internal/config/di/configTypes.ts b/packages/core/src/internal/config/di/configTypes.ts index a0de0a651..c91af94fa 100644 --- a/packages/core/src/internal/config/di/configTypes.ts +++ b/packages/core/src/internal/config/di/configTypes.ts @@ -4,3 +4,42 @@ export const types = { ConfigService: Symbol.for("ConfigService"), GetSdkVersionUseCase: Symbol.for("GetSdkVersionUseCase"), }; + +export class ApiCallError { + readonly _tag = "ApiCallError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export class ParseResponseError { + readonly _tag = "ParseResponseError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export class JSONParseError { + readonly _tag = "JSONParseError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export type RemoteConfigFailure = + | ApiCallError + | ParseResponseError + | JSONParseError; + +export class ReadFileError { + readonly _tag = "ReadFileError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export type LocalConfigFailure = JSONParseError | ReadFileError; diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index e7628c35f..c42a4a0ee 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -1,5 +1,7 @@ +import { Either, Left } from "purify-ts"; import { ConfigService } from "./ConfigService"; import { DefaultConfigService } from "./DefaultConfigService"; +import { JSONParseError } from "../di/configTypes"; const localDataSource = { getConfig: jest.fn(), @@ -20,10 +22,12 @@ describe("DefaultConfigService", () => { describe("when the local config is available", () => { it("should return the `local` version", async () => { - localDataSource.getConfig.mockReturnValue({ - name: "DeviceSDK", - version: "1.0.0-local", - }); + localDataSource.getConfig.mockReturnValue( + Either.of({ + name: "DeviceSDK", + version: "1.0.0-local", + }) + ); expect(await service.getSdkConfig()).toStrictEqual({ name: "DeviceSDK", @@ -32,17 +36,31 @@ describe("DefaultConfigService", () => { }); }); - describe("when the local config is not available", () => { + describe("when the local config is not available, use remote", () => { it("should return the `remote` version", async () => { - localDataSource.getConfig.mockReturnValue(""); - remoteDataSource.getConfig.mockResolvedValue({ + localDataSource.getConfig.mockReturnValue(Left(new JSONParseError())); + remoteDataSource.getConfig.mockResolvedValue( + Either.of({ + name: "DeviceSDK", + version: "1.0.0-remote", + }) + ); + + expect(await service.getSdkConfig()).toStrictEqual({ name: "DeviceSDK", version: "1.0.0-remote", }); + }); + }); + + describe("when the local remote config are not available", () => { + it("should return the `default` version", async () => { + localDataSource.getConfig.mockReturnValue(Left(new JSONParseError())); + remoteDataSource.getConfig.mockResolvedValue(Left(new JSONParseError())); expect(await service.getSdkConfig()).toStrictEqual({ - name: "DeviceSDK", - version: "1.0.0-remote", + name: "DeadSdk", + version: "0.0.0-dead.1", }); }); }); diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index 59256fbfd..f5bda0f6a 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -20,11 +20,25 @@ export class DefaultConfigService implements ConfigService { } async getSdkConfig(): Promise { - const localConfig = this._local.getConfig(); - if (localConfig?.version) { - return this._local.getConfig(); + // Returns an Either + const localConfig = this._local.getConfig().ifLeft((err) => { + console.error("Local config not available"); + console.error(err); + }); + + if (localConfig.isRight()) { + return localConfig.extract(); } - return this._remote.getConfig().then((config) => config); + return this._remote.getConfig().then((config) => { + return config + .mapLeft((err) => { + // Here we handle the error and return a default value + console.error("Remote config not available"); + console.error(err); + return { name: "DeadSdk", version: "0.0.0-dead.1" }; + }) + .extract(); + }); } } diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts index a6cfe70a5..d16f097ac 100644 --- a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts @@ -16,8 +16,8 @@ describe("GetSdkVersionUseCase", () => { it("should return the sdk version", async () => { getSdkConfigMock.mockResolvedValue({ name: "DeviceSDK", - version: "1.0.0-mock.1", + version: "1.0.0", }); - expect(await usecase.getSdkVersion()).toBe("1.0.0-mock.1"); + expect(await usecase.getSdkVersion()).toBe("1.0.0"); }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a2d988118..f22db0126 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -120,6 +120,9 @@ importers: inversify-logger-middleware: specifier: ^3.1.0 version: 3.1.0 + purify-ts: + specifier: ^2.0.3 + version: 2.0.3 reflect-metadata: specifier: ^0.2.1 version: 0.2.1 @@ -1135,7 +1138,6 @@ packages: /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -4913,6 +4915,12 @@ packages: resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} dev: true + /purify-ts@2.0.3: + resolution: {integrity: sha512-RiPOlX4L+eggnbEdwGV34t7iRSPK5d37nKPZXSu8G5mTUhxbEjPpThRFuEV4GL/T6zEJQ+ZeiuNoBk61VJvszg==} + dependencies: + '@types/json-schema': 7.0.15 + dev: false + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true From a55205c45a92685b81c637a52a84791d428ec896 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Thu, 25 Jan 2024 11:28:59 +0100 Subject: [PATCH 034/253] chore: setup aliases in project --- packages/core/src/index.ts | 5 ++--- .../src/internal/config/data/ConfigDataSource.ts | 7 +++++-- .../config/data/LocalConfigDataSource.stub.ts | 4 ++-- .../config/data/LocalConfigDataSource.test.ts | 14 +++++++------- .../internal/config/data/LocalConfigDataSource.ts | 4 ++-- .../config/data/RemoteConfigDataSource.stub.ts | 4 ++-- .../config/data/RemoteConfigDataSource.test.ts | 10 +++++++--- .../internal/config/data/RemoteConfigDataSource.ts | 10 +++++----- .../src/internal/config/di/configModule.test.ts | 10 +++++----- .../core/src/internal/config/di/configModule.ts | 12 ++++++------ .../src/internal/config/service/ConfigService.ts | 2 +- .../config/service/DefaultConfigService.test.ts | 2 +- .../config/service/DefaultConfigService.ts | 8 ++++---- .../config/usecase/GetSdkVersionUseCase.ts | 4 ++-- packages/core/tsconfig.json | 6 +++++- 15 files changed, 56 insertions(+), 46 deletions(-) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index da0b16c14..c0bb10b1a 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,8 +1,7 @@ import "reflect-metadata"; - +import { types } from "@internal/config/di/configTypes"; +import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; import { makeContainer } from "./di"; -import { types } from "./internal/config/di/configTypes"; -import { GetSdkVersionUseCase } from "./internal/config/usecase/GetSdkVersionUseCase"; export * from "./api"; export * from "./transport"; diff --git a/packages/core/src/internal/config/data/ConfigDataSource.ts b/packages/core/src/internal/config/data/ConfigDataSource.ts index 58f8a3630..7e63f66fc 100644 --- a/packages/core/src/internal/config/data/ConfigDataSource.ts +++ b/packages/core/src/internal/config/data/ConfigDataSource.ts @@ -1,6 +1,9 @@ import { Either } from "purify-ts"; -import { LocalConfigFailure, RemoteConfigFailure } from "../di/configTypes"; -import { Config } from "../model/Config"; +import { + LocalConfigFailure, + RemoteConfigFailure, +} from "@internal/config/di/configTypes"; +import { Config } from "@internal/config/model/Config"; // Describe the different data sources interfaces our application could have diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts index 8c18bfe09..a8e888b98 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts @@ -1,7 +1,7 @@ import { injectable } from "inversify"; -import { Config } from "../model/Config"; -import { LocalConfigDataSource } from "./ConfigDataSource"; import { Either } from "purify-ts"; +import { Config } from "@internal/config/model/Config"; +import { LocalConfigDataSource } from "./ConfigDataSource"; /** * diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts index 21b3d1482..bc7b3d4f9 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts @@ -1,8 +1,8 @@ import fs from "fs"; +import { Either, Left } from "purify-ts"; +import { JSONParseError, ReadFileError } from "@internal/config/di/configTypes"; import { LocalConfigDataSource } from "./ConfigDataSource"; import { FileLocalConfigDataSource } from "./LocalConfigDataSource"; -import { Either, Left } from "purify-ts"; -import { JSONParseError, ReadFileError } from "../di/configTypes"; const readFileSyncSpy = jest.spyOn(fs, "readFileSync"); const jsonParse = jest.spyOn(JSON, "parse"); @@ -16,6 +16,11 @@ describe("LocalConfigDataSource", () => { datasource = new FileLocalConfigDataSource(); }); + afterAll(() => { + readFileSyncSpy.mockRestore(); + jsonParse.mockRestore(); + }); + it("should return an Either", () => { readFileSyncSpy.mockReturnValue( JSON.stringify({ name: "DeviceSDK", version: "0.0.0-spied.1" }) @@ -56,9 +61,4 @@ describe("LocalConfigDataSource", () => { expect(datasource.getConfig()).toEqual(Left(new JSONParseError(err))); }); }); - - afterAll(() => { - readFileSyncSpy.mockRestore(); - jsonParse.mockRestore(); - }); }); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index 150a1de97..64ccad93c 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -6,8 +6,8 @@ import { ReadFileError, JSONParseError, LocalConfigFailure, -} from "../di/configTypes"; -import { Config } from "../model/Config"; +} from "@internal/config/di/configTypes"; +import { Config } from "@internal/config/model/Config"; import { LocalConfigDataSource } from "./ConfigDataSource"; /** diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts index 0b9732f85..6dd24a477 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts @@ -1,7 +1,7 @@ import { injectable } from "inversify"; -import { RemoteConfigDataSource } from "./ConfigDataSource"; -import { Config } from "../model/Config"; import { Either } from "purify-ts"; +import { Config } from "@internal/config/model/Config"; +import { RemoteConfigDataSource } from "./ConfigDataSource"; /** * class RemoteRestConfigDataSource diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts index 477718e07..bc4a5209b 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts @@ -1,13 +1,16 @@ import { Either, Left } from "purify-ts"; -import { RemoteConfigDataSource } from "./ConfigDataSource"; -import { RestRemoteConfigDataSource } from "./RemoteConfigDataSource"; import { ApiCallError, JSONParseError, ParseResponseError, -} from "../di/configTypes"; +} from "@internal/config/di/configTypes"; +import { RemoteConfigDataSource } from "./ConfigDataSource"; +import { RestRemoteConfigDataSource } from "./RemoteConfigDataSource"; let datasource: RemoteConfigDataSource; + +// Necesary to use `any` on the prototype to be able to spy on private methods +/* eslint-disable @typescript-eslint/no-explicit-any */ const callApiSpy = jest.spyOn( RestRemoteConfigDataSource.prototype as any, "_callApi" @@ -16,6 +19,7 @@ const parseResponseSpy = jest.spyOn( RestRemoteConfigDataSource.prototype as any, "_parseResponse" ); +/* eslint-enable @typescript-eslint/no-explicit-any */ describe("RemoteRestConfigDataSource", () => { describe("RestRemoteConfigDataSource", () => { diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts index 88797ce88..25bacd431 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts @@ -1,14 +1,14 @@ import { injectable } from "inversify"; -import { RemoteConfigDataSource } from "./ConfigDataSource"; -import { ConfigDto } from "./Dto"; -import { Config } from "../model/Config"; +import { Either, Left } from "purify-ts"; +import { Config } from "@internal/config/model/Config"; import { ApiCallError, JSONParseError, ParseResponseError, RemoteConfigFailure, -} from "../di/configTypes"; -import { Either, Left } from "purify-ts"; +} from "@internal/config/di/configTypes"; +import { RemoteConfigDataSource } from "./ConfigDataSource"; +import { ConfigDto } from "./Dto"; /** * class RemoteRestConfigDataSource diff --git a/packages/core/src/internal/config/di/configModule.test.ts b/packages/core/src/internal/config/di/configModule.test.ts index f825ebde6..5150f0403 100644 --- a/packages/core/src/internal/config/di/configModule.test.ts +++ b/packages/core/src/internal/config/di/configModule.test.ts @@ -1,10 +1,10 @@ import { Container } from "inversify"; +import { FileLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource"; +import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; +import { RestRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource"; +import { StubRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource.stub"; import configModuleFactory from "./configModule"; import { types } from "./configTypes"; -import { FileLocalConfigDataSource } from "../data/LocalConfigDataSource"; -import { StubLocalConfigDataSource } from "../data/LocalConfigDataSource.stub"; -import { RestRemoteConfigDataSource } from "../data/RemoteConfigDataSource"; -import { StubRemoteConfigDataSource } from "../data/RemoteConfigDataSource.stub"; describe("configModuleFactory", () => { describe("Default", () => { @@ -31,7 +31,7 @@ describe("configModuleFactory", () => { describe("Mocked", () => { let container: Container; let mod: ReturnType; - beforeAll(() => { + beforeEach(() => { mod = configModuleFactory({ mock: true }); container = new Container(); container.load(mod); diff --git a/packages/core/src/internal/config/di/configModule.ts b/packages/core/src/internal/config/di/configModule.ts index 09ee5fb0f..bc0b11d7c 100644 --- a/packages/core/src/internal/config/di/configModule.ts +++ b/packages/core/src/internal/config/di/configModule.ts @@ -1,10 +1,10 @@ import { ContainerModule } from "inversify"; -import { FileLocalConfigDataSource } from "../data/LocalConfigDataSource"; -import { StubLocalConfigDataSource } from "../data/LocalConfigDataSource.stub"; -import { RestRemoteConfigDataSource } from "../data/RemoteConfigDataSource"; -import { StubRemoteConfigDataSource } from "../data/RemoteConfigDataSource.stub"; -import { DefaultConfigService } from "../service/DefaultConfigService"; -import { GetSdkVersionUseCase } from "../usecase/GetSdkVersionUseCase"; +import { FileLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource"; +import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; +import { RestRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource"; +import { StubRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource.stub"; +import { DefaultConfigService } from "@internal/config/service/DefaultConfigService"; +import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; import { types } from "./configTypes"; // This module is used to configure the dependency injection container diff --git a/packages/core/src/internal/config/service/ConfigService.ts b/packages/core/src/internal/config/service/ConfigService.ts index d58355bb9..ca7a9cc9b 100644 --- a/packages/core/src/internal/config/service/ConfigService.ts +++ b/packages/core/src/internal/config/service/ConfigService.ts @@ -1,4 +1,4 @@ -import { Config } from "../model/Config"; +import { Config } from "@internal/config/model/Config"; export interface ConfigService { getSdkConfig(): Promise; diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index c42a4a0ee..29b2b80d4 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -1,7 +1,7 @@ import { Either, Left } from "purify-ts"; import { ConfigService } from "./ConfigService"; import { DefaultConfigService } from "./DefaultConfigService"; -import { JSONParseError } from "../di/configTypes"; +import { JSONParseError } from "@internal/config/di/configTypes"; const localDataSource = { getConfig: jest.fn(), diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index f5bda0f6a..2d4582ec7 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -1,11 +1,11 @@ import { inject, injectable } from "inversify"; -import { ConfigService } from "./ConfigService"; -import { types } from "../di/configTypes"; +import { types } from "@internal/config/di/configTypes"; import type { LocalConfigDataSource, RemoteConfigDataSource, -} from "../data/ConfigDataSource"; -import { Config } from "../model/Config"; +} from "@internal/config/data/ConfigDataSource"; +import { Config } from "@internal/config/model/Config"; +import { ConfigService } from "./ConfigService"; @injectable() export class DefaultConfigService implements ConfigService { diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts index adff29256..1f28edd65 100644 --- a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts @@ -1,6 +1,6 @@ import { inject, injectable } from "inversify"; -import type { ConfigService } from "../service/ConfigService"; -import { types } from "../di/configTypes"; +import type { ConfigService } from "@internal/config/service/ConfigService"; +import { types } from "@internal/config/di/configTypes"; /** * class GetSDKVersionUseCase diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index af298fa8e..b1960629b 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,7 +1,11 @@ { "extends": "@ledgerhq/tsconfig-dsdk/sdk", "compilerOptions": { - "outDir": "./lib" + "outDir": "./lib", + "baseUrl": "./src", + "paths": { + "@internal/*": ["internal/*"] + } }, "include": ["src/**/*", "jest.config.ts", "jest.setup.ts"] } From 4a988269a63a2bb4a8e0d79b45827e253d6a048d Mon Sep 17 00:00:00 2001 From: Alexandre M Date: Thu, 25 Jan 2024 11:50:55 +0100 Subject: [PATCH 035/253] [DSDK-180][POC] Simple POC to test WebHID API (#11) A simple JavaScript script to test the different features of the WebHID API --- pocs/web-hid-api/README.md | 11 ++++ pocs/web-hid-api/index.html | 10 ++++ pocs/web-hid-api/index.js | 106 ++++++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 pocs/web-hid-api/README.md create mode 100644 pocs/web-hid-api/index.html create mode 100644 pocs/web-hid-api/index.js diff --git a/pocs/web-hid-api/README.md b/pocs/web-hid-api/README.md new file mode 100644 index 000000000..319234e7a --- /dev/null +++ b/pocs/web-hid-api/README.md @@ -0,0 +1,11 @@ +## Overview + +This is a simple JavaScript script to try the different features of the WebHID API. +See the following documentation: [WebHID API Overview](https://ledgerhq.atlassian.net/l/cp/t2NVkQYN) + +## Run POC + +To run, just open `index.html` on your browser ✨, and click on the `start` button + +Some actions (described in comments in `index.js`) can be done to try different error scenarios. + diff --git a/pocs/web-hid-api/index.html b/pocs/web-hid-api/index.html new file mode 100644 index 000000000..e020432a7 --- /dev/null +++ b/pocs/web-hid-api/index.html @@ -0,0 +1,10 @@ + + + + WebHID Tester + + + + + + diff --git a/pocs/web-hid-api/index.js b/pocs/web-hid-api/index.js new file mode 100644 index 000000000..3bffc2b76 --- /dev/null +++ b/pocs/web-hid-api/index.js @@ -0,0 +1,106 @@ +console.info('WebHID API tester'); + +// Action: try to uncomment the following and see the error you get +// A `requestDevice` can only be called in the context of a user interaction. +// startWebHid(); + +document.getElementById('startButton').addEventListener('click', function() { + startWebHid(); +}); + +async function startWebHid() { + if (!("hid" in navigator)) { + console.warn("WebHID API not supported :'("); + return; + } + + console.info("WebHID API supported !"); + + // Get all devices the user has previously granted the website access to. + const prevGrantedDevices = await navigator.hid.getDevices(); + console.info(`Devices previously granted access: ${prevGrantedDevices.length} devices\n: ${prevGrantedDevices.map(d => d.productName).join(', ')}`); + + // Prompt user to select a device + console.info("Requesting user to select a device..."); + let devices; + + // Action: try to set on Chrome "Don't allow sites to connect to HID devices" + // and remove any permission access to `file:///` (this website) and see what happens + // -> on my MacOS with Chrome no error is thrown and the `devices` array is empty + try { + devices = await navigator.hid.requestDevice({ filters: [{ vendorId: 0x2c97 }] }); + } catch (error) { + console.error(`Error requesting device: ${error}`, error); + return; + } + + if (devices.length === 0) { + console.warn("User didn't select any device."); + return; + } + + const device = devices[0]; + console.info(`User selected: ${device.productName}. Collections attributes: ${device.collections.length}`); + + for (let collection of device.collections) { + console.log(`Collection:`); + // An HID collection includes usage, usage page, reports, and subcollections. + console.log(`--- Usage: ${collection.usage}`); + console.log(`--- Usage page: ${collection.usagePage}`); + + console.log(`--- Input reports: ${collection.inputReports.length}`); + for (let inputReport of collection.inputReports) { + console.log(`--- Input report id: ${inputReport.reportId}`); + } + + console.log(`--- Output reports: ${collection.outputReports.length}`); + for (let outputReport of collection.outputReports) { + console.log(`--- Output report id: ${outputReport.reportId}`); + } + + console.log(`--- Feature reports: ${collection.featureReports.length}`); + for (let featureReport of collection.featureReports) { + console.log(`--- Feature report id: ${featureReport.reportId}`); + } + } + + console.log(`Opening device ${device.productName} ...`); + try { + await device.open(); + } catch (error) { + if (error instanceof DOMException && error.name === "InvalidStateError") { + console.info(`Device ${device.productName} is already open`); + } else { + console.error(`Error while opening device: ${error}`, error); + return + } + } + + device.addEventListener("inputreport", event => { + const { data, device, reportId } = event; + const response = (new Uint8Array(data.buffer)).map(x => x.toString(16)).join(' '); + console.log(`Received an input report on ${reportId}: ${response}`); + }); + + console.log(`Sending getVersion to device ${device.productName} ...`); + try { + await device.sendReport(0, new Uint8Array([0xAA, 0xAA, 0x05, 0x00, 0x00,0x00,0x05,0xE0,0x01,0x00,0x00,0x00])); + console.log("getVersion sent"); + } catch (error) { + console.error(`Error while sending getVersion: ${error}`, error); + return; + } +} + +// Action: try to unplug and plug back the device and see the events in the console +if ("hid" in navigator) { + navigator.hid.addEventListener("connect", event => { + const { device } = event + console.log(`📡 Received a connect event on ${device.productName}`); + }); + + navigator.hid.addEventListener("disconnect", event => { + const { device } = event + console.log(`📡 Received a disconnect event on ${device.productName}`); + }); +} From fad022ac1cca3553b2892582665a4e28c6fd9dee Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Thu, 25 Jan 2024 11:55:56 +0100 Subject: [PATCH 036/253] chore: add path mapping to jest --- packages/core/jest.config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index c7a18213d..4ca93d482 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -9,6 +9,9 @@ const config: JestConfigWithTsJest = { "src/internal/**/*.ts", "!src/**/*.stub.ts", ], + moduleNameMapper: { + "^@internal/(.*)$": "/src/internal/$1", + }, }; export default config; From b40877a1b3a2b0454ad62620f31e62baf7610af4 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Thu, 25 Jan 2024 16:37:20 +0100 Subject: [PATCH 037/253] chore: fix paths in bundled js --- packages/core/package.json | 8 ++-- packages/core/tsconfig.json | 4 +- pnpm-lock.yaml | 82 +++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 5 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 86cbec626..00b905eea 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -8,8 +8,8 @@ "./lib" ], "scripts": { - "build": "rm -rf lib && tsc", - "dev": "tsc --watch", + "build": "rm -rf lib && tsc && tsc-alias", + "dev": "tsc && (concurrently \"tsc -w\" \"tsc-alias -w\")", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "test": "jest src", @@ -28,6 +28,8 @@ "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", - "ts-node": "^10.9.2" + "concurrently": "^8.2.2", + "ts-node": "^10.9.2", + "tsc-alias": "^1.8.8" } } diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index b1960629b..1dd4d1e21 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -2,9 +2,9 @@ "extends": "@ledgerhq/tsconfig-dsdk/sdk", "compilerOptions": { "outDir": "./lib", - "baseUrl": "./src", + "baseUrl": ".", "paths": { - "@internal/*": ["internal/*"] + "@internal/*": ["src/internal/*"] } }, "include": ["src/**/*", "jest.config.ts", "jest.setup.ts"] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f22db0126..0bbe16e8a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -136,9 +136,15 @@ importers: '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript + concurrently: + specifier: ^8.2.2 + version: 8.2.2 ts-node: specifier: ^10.9.2 version: 10.9.2(@types/node@20.10.6)(typescript@5.3.3) + tsc-alias: + specifier: ^1.8.8 + version: 1.8.8 packages/signer: dependencies: @@ -2011,10 +2017,31 @@ packages: engines: {node: '>= 6'} dev: true + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + dev: true + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} + engines: {node: ^14.13.0 || >=16.0.0} + hasBin: true + dependencies: + chalk: 4.1.2 + date-fns: 2.30.0 + lodash: 4.17.21 + rxjs: 7.8.1 + shell-quote: 1.8.1 + spawn-command: 0.0.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + dev: true + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2069,6 +2096,13 @@ packages: engines: {node: '>= 12'} dev: true + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.23.6 + dev: true + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -4424,6 +4458,11 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /mylas@2.1.13: + resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==} + engines: {node: '>=12.0.0'} + dev: true + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -4765,6 +4804,13 @@ packages: find-up: 4.1.0 dev: true + /plimit-lit@1.6.1: + resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==} + engines: {node: '>=12'} + dependencies: + queue-lit: 1.5.2 + dev: true + /pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -4921,6 +4967,11 @@ packages: '@types/json-schema': 7.0.15 dev: false + /queue-lit@1.5.2: + resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==} + engines: {node: '>=12'} + dev: true + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -5116,6 +5167,12 @@ packages: queue-microtask: 1.2.3 dev: true + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.2 + dev: true + /safe-array-concat@1.0.1: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} @@ -5188,6 +5245,10 @@ packages: engines: {node: '>=8'} dev: true + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -5268,6 +5329,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} + dev: true + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: @@ -5592,6 +5657,11 @@ packages: is-number: 7.0.0 dev: true + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -5670,6 +5740,18 @@ packages: yn: 3.1.1 dev: true + /tsc-alias@1.8.8: + resolution: {integrity: sha512-OYUOd2wl0H858NvABWr/BoSKNERw3N9GTi3rHPK8Iv4O1UyUXIrTTOAZNHsjlVpXFOhpJBVARI1s+rzwLivN3Q==} + hasBin: true + dependencies: + chokidar: 3.5.3 + commander: 9.5.0 + globby: 11.1.0 + mylas: 2.1.13 + normalize-path: 3.0.0 + plimit-lit: 1.6.1 + dev: true + /tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: From b327cb2c29bae56964a279b07e66ac8fbd88703a Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Thu, 25 Jan 2024 16:54:24 +0100 Subject: [PATCH 038/253] chore: fix eslint + tsconfig --- packages/config/eslint/index.js | 1 + packages/core/.eslintrc.js | 9 +++++++++ packages/core/tsconfig.json | 3 ++- packages/core/tsconfig.test.json | 10 ++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 packages/core/tsconfig.test.json diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index fcba23510..c37da5384 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -20,6 +20,7 @@ module.exports = { ".*.js", "node_modules/", "dist/", + "lib/", ], overrides: [ { diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index f1495cd5c..fca763878 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -5,4 +5,13 @@ module.exports = { project: true, tsconfigRootDir: __dirname, }, + overrides: [ + { + files: "src/**/*.test.ts", + parserOptions: { + project: "tsconfig.test.json", + tsconfigRootDir: __dirname, + }, + }, + ], }; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 1dd4d1e21..ee3fcdc53 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -7,5 +7,6 @@ "@internal/*": ["src/internal/*"] } }, - "include": ["src/**/*", "jest.config.ts", "jest.setup.ts"] + "include": ["src/**/*", "jest.config.ts", "jest.setup.ts"], + "exclude": ["src/**/*.test.ts"] } diff --git a/packages/core/tsconfig.test.json b/packages/core/tsconfig.test.json new file mode 100644 index 000000000..560cb6484 --- /dev/null +++ b/packages/core/tsconfig.test.json @@ -0,0 +1,10 @@ +{ + "extends": "@ledgerhq/tsconfig-dsdk/sdk", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@internal/*": ["src/internal/*"] + } + }, + "include": ["src/**/*.test.ts"] +} From 4623e40b107f3766818fffd9a61690f6a4184712 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 26 Jan 2024 17:31:23 +0100 Subject: [PATCH 039/253] chor: remove fs and path from the project and revert to esnext in sdk tsconfig --- apps/sample/package.json | 2 +- package.json | 1 + packages/config/eslint/index.js | 2 +- packages/config/typescript/sdk.json | 4 +- packages/core/.eslintrc.js | 9 -- packages/core/package.json | 7 +- .../config/data/LocalConfigDataSource.test.ts | 15 ++- .../config/data/LocalConfigDataSource.ts | 13 +- .../data/RemoteConfigDataSource.test.ts | 2 +- .../src/internal/config/data/version.json | 4 - packages/core/tsconfig.json | 3 +- packages/core/tsconfig.prod.json | 4 + packages/core/tsconfig.test.json | 10 -- packages/signer/package.json | 2 +- packages/trusted-apps/package.json | 2 +- packages/ui/package.json | 2 +- pnpm-lock.yaml | 112 ++++++++++++++++++ 17 files changed, 149 insertions(+), 45 deletions(-) delete mode 100644 packages/core/src/internal/config/data/version.json create mode 100644 packages/core/tsconfig.prod.json delete mode 100644 packages/core/tsconfig.test.json diff --git a/apps/sample/package.json b/apps/sample/package.json index c725b6da3..d38edd1a1 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbo", "build": "next build", "start": "next start", "lint": "next lint" diff --git a/package.json b/package.json index 269b18bfc..74e8ac3ab 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "jest": "^29.7.0", "lint-staged": "^15.2.0", "prettier": "^3.1.1", + "rimraf": "^5.0.5", "turbo": "^1.11.2", "typescript": "^5.3.3", "zx": "^7.2.3" diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index c37da5384..31ed47591 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -49,7 +49,7 @@ module.exports = { }, }, { - files: ["**/scripts/*.mjs"], + files: ["**/*.mjs"], env: { es6: true, node: true, diff --git a/packages/config/typescript/sdk.json b/packages/config/typescript/sdk.json index 31bc1f432..0ae0a817d 100644 --- a/packages/config/typescript/sdk.json +++ b/packages/config/typescript/sdk.json @@ -26,8 +26,8 @@ "experimentalDecorators": true, "stripInternal": true, "emitDecoratorMetadata": true, - "moduleResolution": "NodeNext", - "module": "NodeNext" + "moduleResolution": "bundler", + "module": "esnext" }, "exclude": ["node_modules"] } diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index fca763878..f1495cd5c 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -5,13 +5,4 @@ module.exports = { project: true, tsconfigRootDir: __dirname, }, - overrides: [ - { - files: "src/**/*.test.ts", - parserOptions: { - project: "tsconfig.test.json", - tsconfigRootDir: __dirname, - }, - }, - ], }; diff --git a/packages/core/package.json b/packages/core/package.json index 00b905eea..cde19d97a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -8,15 +8,14 @@ "./lib" ], "scripts": { - "build": "rm -rf lib && tsc && tsc-alias", - "dev": "tsc && (concurrently \"tsc -w\" \"tsc-alias -w\")", + "build": "rimraf lib && tsc -p tsconfig.prod.json && tsc-alias -p tsconfig.prod.json", + "dev": "tsc && (concurrently \"tsc -w -p tsconfig.prod.json\" \"tsc-alias -w -p tsconfig.prod.json\")", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "test": "jest src", "test:watch": "pnpm test -- --watch", "test:coverage": "pnpm test -- --coverage", - "module:init": "zx scripts/add-module.mjs", - "run:index": "ts-node src/index.ts" + "module:init": "zx scripts/add-module.mjs" }, "dependencies": { "inversify": "^6.0.2", diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts index bc7b3d4f9..779befa29 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts @@ -1,10 +1,11 @@ -import fs from "fs"; import { Either, Left } from "purify-ts"; import { JSONParseError, ReadFileError } from "@internal/config/di/configTypes"; import { LocalConfigDataSource } from "./ConfigDataSource"; -import { FileLocalConfigDataSource } from "./LocalConfigDataSource"; +import * as LocalConfig from "./LocalConfigDataSource"; -const readFileSyncSpy = jest.spyOn(fs, "readFileSync"); +const { FileLocalConfigDataSource } = LocalConfig; + +const readFileSyncSpy = jest.spyOn(LocalConfig, "stubFsReadFile"); const jsonParse = jest.spyOn(JSON, "parse"); let datasource: LocalConfigDataSource; @@ -61,4 +62,12 @@ describe("LocalConfigDataSource", () => { expect(datasource.getConfig()).toEqual(Left(new JSONParseError(err))); }); }); + + describe("stubFsReadFile", () => { + it("should return a stringified version of the version object", () => { + expect(LocalConfig.stubFsReadFile()).toEqual( + JSON.stringify({ name: "DeviceSDK", version: "0.0.0-local.1" }) + ); + }); + }); }); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index 64ccad93c..05b91bca1 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -1,6 +1,4 @@ -import fs from "fs"; import { injectable } from "inversify"; -import path from "path"; import { Either } from "purify-ts"; import { ReadFileError, @@ -10,6 +8,13 @@ import { import { Config } from "@internal/config/model/Config"; import { LocalConfigDataSource } from "./ConfigDataSource"; +const version = { + name: "DeviceSDK", + version: "0.0.0-local.1", +}; + +export const stubFsReadFile = () => JSON.stringify(version); + /** * * class FileLocalConfigDataSource @@ -19,9 +24,7 @@ import { LocalConfigDataSource } from "./ConfigDataSource"; @injectable() export class FileLocalConfigDataSource implements LocalConfigDataSource { getConfig(): Either { - return Either.encase(() => - fs.readFileSync(path.join(__dirname, "version.json"), "utf-8") - ) + return Either.encase(() => stubFsReadFile()) .mapLeft((error) => { console.log("readFileSync error"); return new ReadFileError(error); diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts index bc4a5209b..a3b413187 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts @@ -9,7 +9,7 @@ import { RestRemoteConfigDataSource } from "./RemoteConfigDataSource"; let datasource: RemoteConfigDataSource; -// Necesary to use `any` on the prototype to be able to spy on private methods +// Necessary to use `any` on the prototype to be able to spy on private methods /* eslint-disable @typescript-eslint/no-explicit-any */ const callApiSpy = jest.spyOn( RestRemoteConfigDataSource.prototype as any, diff --git a/packages/core/src/internal/config/data/version.json b/packages/core/src/internal/config/data/version.json deleted file mode 100644 index 2fde7da1a..000000000 --- a/packages/core/src/internal/config/data/version.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "DeviceSDK", - "version": "0.0.0-local.1" -} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index ee3fcdc53..8ffe96945 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -7,6 +7,5 @@ "@internal/*": ["src/internal/*"] } }, - "include": ["src/**/*", "jest.config.ts", "jest.setup.ts"], - "exclude": ["src/**/*.test.ts"] + "include": ["src", "jest.*.ts"] } diff --git a/packages/core/tsconfig.prod.json b/packages/core/tsconfig.prod.json new file mode 100644 index 000000000..457b19611 --- /dev/null +++ b/packages/core/tsconfig.prod.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/**/*.test.ts", "jest.*.ts"] +} diff --git a/packages/core/tsconfig.test.json b/packages/core/tsconfig.test.json deleted file mode 100644 index 560cb6484..000000000 --- a/packages/core/tsconfig.test.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@ledgerhq/tsconfig-dsdk/sdk", - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@internal/*": ["src/internal/*"] - } - }, - "include": ["src/**/*.test.ts"] -} diff --git a/packages/signer/package.json b/packages/signer/package.json index 539dbe798..5d22ed8b9 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -8,7 +8,7 @@ "./lib" ], "scripts": { - "build": "rm -rf lib && tsc", + "build": "rimraf lib && tsc", "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index e6a05f3b8..af535ef61 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -8,7 +8,7 @@ "./lib" ], "scripts": { - "build": "rm -rf lib && tsc", + "build": "rimraf lib && tsc", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "dev": "tsc --watch", diff --git a/packages/ui/package.json b/packages/ui/package.json index c14e0385f..df50fed1c 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -8,7 +8,7 @@ "./lib" ], "scripts": { - "build": "rm -rf lib && tsc", + "build": "rimraf lib && tsc", "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0bbe16e8a..a9bd7a6ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,6 +26,9 @@ importers: prettier: specifier: ^3.1.1 version: 3.1.1 + rimraf: + specifier: ^5.0.5 + version: 5.0.5 turbo: specifier: ^1.11.2 version: 1.11.2 @@ -615,6 +618,18 @@ packages: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -1008,6 +1023,13 @@ packages: fastq: 1.15.0 dev: true + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + /@pkgr/utils@2.4.2: resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -1797,6 +1819,12 @@ packages: concat-map: 0.0.1 dev: true + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -2252,6 +2280,10 @@ packages: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + /electron-to-chromium@1.4.614: resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} @@ -3078,6 +3110,14 @@ packages: is-callable: 1.2.7 dev: true + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true + /formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -3216,6 +3256,18 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 + dev: true + /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: @@ -3753,6 +3805,15 @@ packages: set-function-name: 2.0.1 dev: true + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + /jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4376,6 +4437,11 @@ packages: dependencies: js-tokens: 4.0.0 + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + dev: true + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -4447,10 +4513,22 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -4762,6 +4840,14 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 + dev: true + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -5154,6 +5240,14 @@ packages: glob: 7.2.3 dev: true + /rimraf@5.0.5: + resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} + engines: {node: '>=14'} + hasBin: true + dependencies: + glob: 10.3.10 + dev: true + /run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} engines: {node: '>=12'} @@ -5405,6 +5499,15 @@ packages: strip-ansi: 6.0.1 dev: true + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + /string-width@7.0.0: resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} engines: {node: '>=18'} @@ -6079,6 +6182,15 @@ packages: strip-ansi: 6.0.1 dev: true + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + /wrap-ansi@9.0.0: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} From f52c2bf88840e6ef12af5638b19e5211b438fa65 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 30 Jan 2024 11:39:05 +0100 Subject: [PATCH 040/253] chore(pr): fix pr template formatting --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index da4f95495..873dd9e69 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -26,7 +26,7 @@ Pull Requests must pass the CI and be code reviewed. Set as Draft if the PR is n - [ ] **Covered by automatic tests.** - [ ] **Impact of the changes:** - - + - ... --- From 4d69c677e29e66082890b0717fd7670239886399 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 30 Jan 2024 17:32:05 +0100 Subject: [PATCH 041/253] fix(packages): remove tailwindcss --- apps/sample/package.json | 11 +- apps/sample/postcss.config.js | 3 +- apps/sample/src/app/globals.css | 4 - apps/sample/tailwind.config.ts | 20 --- pnpm-lock.yaml | 214 +------------------------------- 5 files changed, 7 insertions(+), 245 deletions(-) delete mode 100644 apps/sample/tailwind.config.ts diff --git a/apps/sample/package.json b/apps/sample/package.json index d38edd1a1..1cf2b4f77 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -9,16 +9,15 @@ "lint": "next lint" }, "dependencies": { + "next": "14.0.4", "react": "^18", - "react-dom": "^18", - "next": "14.0.4" + "react-dom": "^18" }, "devDependencies": { + "@ledgerhq/eslint-config-dsdk": "workspace:*", + "@ledgerhq/tsconfig-dsdk": "workspace:*", "autoprefixer": "^10.0.1", - "postcss": "^8", - "tailwindcss": "^3.3.0", "eslint-config-next": "14.0.4", - "@ledgerhq/tsconfig-dsdk": "workspace:*", - "@ledgerhq/eslint-config-dsdk": "workspace:*" + "postcss": "^8" } } diff --git a/apps/sample/postcss.config.js b/apps/sample/postcss.config.js index 33ad091d2..a47ef4f95 100644 --- a/apps/sample/postcss.config.js +++ b/apps/sample/postcss.config.js @@ -1,6 +1,5 @@ module.exports = { plugins: { - tailwindcss: {}, autoprefixer: {}, }, -} +}; diff --git a/apps/sample/src/app/globals.css b/apps/sample/src/app/globals.css index fd81e8858..2b602f66b 100644 --- a/apps/sample/src/app/globals.css +++ b/apps/sample/src/app/globals.css @@ -1,7 +1,3 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - :root { --foreground-rgb: 0, 0, 0; --background-start-rgb: 214, 219, 220; diff --git a/apps/sample/tailwind.config.ts b/apps/sample/tailwind.config.ts deleted file mode 100644 index 1af3b8f01..000000000 --- a/apps/sample/tailwind.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { Config } from 'tailwindcss' - -const config: Config = { - content: [ - './src/pages/**/*.{js,ts,jsx,tsx,mdx}', - './src/components/**/*.{js,ts,jsx,tsx,mdx}', - './src/app/**/*.{js,ts,jsx,tsx,mdx}', - ], - theme: { - extend: { - backgroundImage: { - 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', - 'gradient-conic': - 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', - }, - }, - }, - plugins: [], -} -export default config diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9bd7a6ea..abf99355a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,9 +66,6 @@ importers: postcss: specifier: ^8 version: 8.4.32 - tailwindcss: - specifier: ^3.3.0 - version: 3.3.6 packages/config/eslint: devDependencies: @@ -213,11 +210,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - dev: true - /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -1564,10 +1556,6 @@ packages: engines: {node: '>=12'} dev: true - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true - /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -1580,10 +1568,6 @@ packages: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -1891,11 +1875,6 @@ packages: engines: {node: '>=6'} dev: true - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true - /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -2040,11 +2019,6 @@ packages: engines: {node: '>=16'} dev: true - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true - /commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} @@ -2105,12 +2079,6 @@ packages: which: 2.0.2 dev: true - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true @@ -2232,10 +2200,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true - /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2253,10 +2217,6 @@ packages: path-type: 4.0.0 dev: true - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true - /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -3268,17 +3228,6 @@ packages: path-scurry: 1.10.1 dev: true - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: @@ -3295,7 +3244,7 @@ packages: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 - inherits: 2.0.3 + inherits: 2.0.4 minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 @@ -3465,10 +3414,6 @@ packages: wrappy: 1.0.2 dev: true - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: true - /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true @@ -4225,11 +4170,6 @@ packages: - ts-node dev: true - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: true - /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true @@ -4349,11 +4289,6 @@ packages: type-check: 0.4.0 dev: true - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: true - /lilconfig@3.0.0: resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} engines: {node: '>=14'} @@ -4541,14 +4476,6 @@ packages: engines: {node: '>=12.0.0'} dev: true - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: true - /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4657,11 +4584,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: true - /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true @@ -4873,11 +4795,6 @@ packages: hasBin: true dev: true - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true - /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -4902,63 +4819,6 @@ packages: engines: {node: '>=4'} dev: true - /postcss-import@15.1.0(postcss@8.4.32): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - dev: true - - /postcss-js@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.32 - dev: true - - /postcss-load-config@4.0.2(postcss@8.4.32): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 3.0.0 - postcss: 8.4.32 - yaml: 2.3.4 - dev: true - - /postcss-nested@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true - - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: true - /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true @@ -5087,12 +4947,6 @@ packages: loose-envify: 1.4.0 dev: false - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: true - /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -5620,20 +5474,6 @@ packages: react: 18.2.0 dev: false - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - dev: true - /supports-color@4.5.0: resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} engines: {node: '>=4'} @@ -5674,37 +5514,6 @@ packages: tslib: 2.6.2 dev: true - /tailwindcss@3.3.6: - resolution: {integrity: sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.5.3 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.32 - postcss-import: 15.1.0(postcss@8.4.32) - postcss-js: 4.0.1(postcss@8.4.32) - postcss-load-config: 4.0.2(postcss@8.4.32) - postcss-nested: 6.0.1(postcss@8.4.32) - postcss-selector-parser: 6.0.13 - resolve: 1.22.8 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - dev: true - /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -5723,19 +5532,6 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: true - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: true - /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true @@ -5774,10 +5570,6 @@ packages: typescript: 5.3.3 dev: true - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true - /ts-jest@29.1.1(@babel/core@7.23.6)(jest@29.7.0)(typescript@5.3.3): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6061,10 +5853,6 @@ packages: punycode: 2.3.1 dev: true - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true From aa8ea60c64575ad83771836ce0323021e314761b Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 18 Jan 2024 09:26:19 +0100 Subject: [PATCH 042/253] fix(packages): add react types --- apps/sample/package.json | 1 + pnpm-lock.yaml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/apps/sample/package.json b/apps/sample/package.json index 1cf2b4f77..e19d191c4 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -16,6 +16,7 @@ "devDependencies": { "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", + "@types/react": "^18", "autoprefixer": "^10.0.1", "eslint-config-next": "14.0.4", "postcss": "^8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index abf99355a..d97aaf8fd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,6 +57,9 @@ importers: '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../../packages/config/typescript + '@types/react': + specifier: ^18 + version: 18.2.45 autoprefixer: specifier: ^10.0.1 version: 10.4.16(postcss@8.4.32) From a138fad6cf712d5a0cd56fa3d054b9237b048c73 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 30 Jan 2024 16:59:54 +0100 Subject: [PATCH 043/253] feat(packages): add ledgerhq react-ui dependency --- apps/sample/next.config.js | 10 +- apps/sample/package.json | 4 +- apps/sample/src/app/favicon.ico | Bin 25931 -> 0 bytes apps/sample/src/app/globals.css | 23 - apps/sample/src/app/layout.tsx | 22 - apps/sample/src/app/page.tsx | 113 ---- apps/sample/src/components/globalstyles.tsx | 12 + apps/sample/src/pages/_app.tsx | 14 + apps/sample/src/pages/_document.tsx | 28 + apps/sample/src/pages/index.tsx | 17 + apps/sample/src/providers/theme.tsx | 27 + apps/sample/tsconfig.json | 5 +- pnpm-lock.yaml | 653 ++++++++++++++++++-- 13 files changed, 699 insertions(+), 229 deletions(-) delete mode 100644 apps/sample/src/app/favicon.ico delete mode 100644 apps/sample/src/app/globals.css delete mode 100644 apps/sample/src/app/layout.tsx delete mode 100644 apps/sample/src/app/page.tsx create mode 100644 apps/sample/src/components/globalstyles.tsx create mode 100644 apps/sample/src/pages/_app.tsx create mode 100644 apps/sample/src/pages/_document.tsx create mode 100644 apps/sample/src/pages/index.tsx create mode 100644 apps/sample/src/providers/theme.tsx diff --git a/apps/sample/next.config.js b/apps/sample/next.config.js index 767719fc4..a2d42fe6e 100644 --- a/apps/sample/next.config.js +++ b/apps/sample/next.config.js @@ -1,4 +1,10 @@ /** @type {import('next').NextConfig} */ -const nextConfig = {} -module.exports = nextConfig +const nextConfig = { + reactStrictMode: true, + compiler: { + styledComponents: true, + }, +}; + +module.exports = nextConfig; diff --git a/apps/sample/package.json b/apps/sample/package.json index e19d191c4..5675b1178 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -9,9 +9,11 @@ "lint": "next lint" }, "dependencies": { + "@ledgerhq/react-ui": "^0.14.13", "next": "14.0.4", "react": "^18", - "react-dom": "^18" + "react-dom": "^18", + "styled-components": "^6.1.8" }, "devDependencies": { "@ledgerhq/eslint-config-dsdk": "workspace:*", diff --git a/apps/sample/src/app/favicon.ico b/apps/sample/src/app/favicon.ico deleted file mode 100644 index 718d6fea4835ec2d246af9800eddb7ffb276240c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/apps/sample/src/app/globals.css b/apps/sample/src/app/globals.css deleted file mode 100644 index 2b602f66b..000000000 --- a/apps/sample/src/app/globals.css +++ /dev/null @@ -1,23 +0,0 @@ -:root { - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - } -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); -} diff --git a/apps/sample/src/app/layout.tsx b/apps/sample/src/app/layout.tsx deleted file mode 100644 index 323bd9c95..000000000 --- a/apps/sample/src/app/layout.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { Metadata } from "next"; -import { Inter } from "next/font/google"; -import "./globals.css"; - -const inter = Inter({ subsets: ["latin"] }); - -export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; - -export default function RootLayout({ - children, -}: { - children: React.ReactNode; -}) { - return ( - - {children} - - ); -} diff --git a/apps/sample/src/app/page.tsx b/apps/sample/src/app/page.tsx deleted file mode 100644 index 992bc443e..000000000 --- a/apps/sample/src/app/page.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import Image from "next/image"; - -export default function Home() { - return ( -
-
-

- Get started by editing  - src/app/page.tsx -

- -
- -
- Next.js Logo -
- - -
- ); -} diff --git a/apps/sample/src/components/globalstyles.tsx b/apps/sample/src/components/globalstyles.tsx new file mode 100644 index 000000000..10ea87200 --- /dev/null +++ b/apps/sample/src/components/globalstyles.tsx @@ -0,0 +1,12 @@ +import { createGlobalStyle } from "styled-components"; + +export const GlobalStyle = createGlobalStyle` + html, + body, + #__next { + width: 100%; + height: 100%; + padding: 0; + margin: 0; + } +`; diff --git a/apps/sample/src/pages/_app.tsx b/apps/sample/src/pages/_app.tsx new file mode 100644 index 000000000..8ac64b68d --- /dev/null +++ b/apps/sample/src/pages/_app.tsx @@ -0,0 +1,14 @@ +import { CustomThemeProvider } from "@/providers/theme"; +import { GlobalStyle } from "@/components/globalstyles"; +import type { AppProps } from "next/app"; + +export default function App({ Component, pageProps }: AppProps) { + return ( + <> + + + + + + ); +} diff --git a/apps/sample/src/pages/_document.tsx b/apps/sample/src/pages/_document.tsx new file mode 100644 index 000000000..f399849d6 --- /dev/null +++ b/apps/sample/src/pages/_document.tsx @@ -0,0 +1,28 @@ +import type { DocumentContext, DocumentInitialProps } from "next/document"; +import Document from "next/document"; +import { ServerStyleSheet } from "styled-components"; + +export default class MyDocument extends Document { + static async getInitialProps( + ctx: DocumentContext + ): Promise { + const sheet = new ServerStyleSheet(); + const originalRenderPage = ctx.renderPage; + + try { + ctx.renderPage = () => + originalRenderPage({ + enhanceApp: (App) => (props) => + sheet.collectStyles(), + }); + + const initialProps = await Document.getInitialProps(ctx); + return { + ...initialProps, + styles: [initialProps.styles, sheet.getStyleElement()], + }; + } finally { + sheet.seal(); + } + } +} diff --git a/apps/sample/src/pages/index.tsx b/apps/sample/src/pages/index.tsx new file mode 100644 index 000000000..558f74d8e --- /dev/null +++ b/apps/sample/src/pages/index.tsx @@ -0,0 +1,17 @@ +"use client"; +import React from "react"; +import { Box } from "@ledgerhq/react-ui/index"; +import styled from "styled-components"; + +const MainContainer = styled(Box)` + width: 100%; + height: 100%; + background-color: ${({ theme }) => theme.colors.background.main}; + color: ${({ theme }) => theme.colors.neutral.c90}; +`; + +const Home: React.FC = () => { + return Test; +}; + +export default Home; diff --git a/apps/sample/src/providers/theme.tsx b/apps/sample/src/providers/theme.tsx new file mode 100644 index 000000000..325d8e737 --- /dev/null +++ b/apps/sample/src/providers/theme.tsx @@ -0,0 +1,27 @@ +import React, { useMemo } from "react"; +import { defaultTheme, palettes } from "@ledgerhq/react-ui/styles/index"; +import { ThemeProvider } from "styled-components"; + +interface CustomThemeProviderProps { + children: React.ReactNode; +} + +export const CustomThemeProvider: React.FC = ({ + children, +}) => { + const selectedPalettes: "dark" | "light" = "dark"; + + const theme = useMemo( + () => ({ + ...defaultTheme, + theme: selectedPalettes, + colors: { + ...defaultTheme.colors, + ...palettes[selectedPalettes], + }, + }), + [] + ); + + return {children}; +}; diff --git a/apps/sample/tsconfig.json b/apps/sample/tsconfig.json index 7ff288875..f9c79624a 100644 --- a/apps/sample/tsconfig.json +++ b/apps/sample/tsconfig.json @@ -8,8 +8,9 @@ ], "paths": { "@/*": ["./src/*"] - } + }, + "strictNullChecks": true }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "include": ["**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d97aaf8fd..67c27ef02 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,6 +41,9 @@ importers: apps/sample: dependencies: + '@ledgerhq/react-ui': + specifier: ^0.14.13 + version: 0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@6.1.8) next: specifier: 14.0.4 version: 14.0.4(@babel/core@7.23.6)(react-dom@18.2.0)(react@18.2.0) @@ -50,6 +53,9 @@ importers: react-dom: specifier: ^18 version: 18.2.0(react@18.2.0) + styled-components: + specifier: ^6.1.8 + version: 6.1.8(react-dom@18.2.0)(react@18.2.0) devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -510,7 +516,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - dev: true /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} @@ -556,6 +561,105 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true + /@emotion/babel-plugin@11.11.0: + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + dependencies: + '@babel/helper-module-imports': 7.22.15 + '@babel/runtime': 7.23.6 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + dev: false + + /@emotion/cache@11.11.0: + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 + dev: false + + /@emotion/hash@0.9.1: + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + dev: false + + /@emotion/is-prop-valid@1.2.1: + resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} + dependencies: + '@emotion/memoize': 0.8.1 + dev: false + + /@emotion/memoize@0.8.1: + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + dev: false + + /@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.6 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + '@types/react': 18.2.45 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + dev: false + + /@emotion/serialize@1.1.3: + resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} + dependencies: + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 + csstype: 3.1.3 + dev: false + + /@emotion/sheet@1.2.2: + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} + dev: false + + /@emotion/unitless@0.8.0: + resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} + dev: false + + /@emotion/unitless@0.8.1: + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + dev: false + + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.2.0 + dev: false + + /@emotion/utils@1.2.1: + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + dev: false + + /@emotion/weak-memoize@0.3.1: + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + dev: false + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -593,6 +697,47 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@floating-ui/core@0.3.1: + resolution: {integrity: sha512-ensKY7Ub59u16qsVIFEo2hwTCqZ/r9oZZFh51ivcLGHfUwTn8l1Xzng8RJUe91H/UP8PeqeBronAGx0qmzwk2g==} + dev: false + + /@floating-ui/core@1.5.3: + resolution: {integrity: sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==} + dependencies: + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/dom@0.1.10: + resolution: {integrity: sha512-4kAVoogvQm2N0XE0G6APQJuCNuErjOfPW8Ux7DFxh8+AfugWflwVJ5LDlHOwrwut7z/30NUvdtHzQ3zSip4EzQ==} + dependencies: + '@floating-ui/core': 0.3.1 + dev: false + + /@floating-ui/dom@1.5.4: + resolution: {integrity: sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==} + dependencies: + '@floating-ui/core': 1.5.3 + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/react-dom@0.4.3(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ZL88ryd9p6sFh9jIC/+05JZoNsogcq6U09cygQjiy757QtQqxIVLQwFag+BAWWYqpNEMO0S60fkqmh8KIAV4oA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 0.1.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.45)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + + /@floating-ui/utils@0.2.1: + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + dev: false + /@humanwhocodes/config-array@0.11.13: resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} @@ -887,6 +1032,76 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@ledgerhq/crypto-icons-ui@1.0.0(@types/react@18.2.45)(react@18.2.0)(styled-components@6.1.8)(styled-system@5.1.5): + resolution: {integrity: sha512-d6wuM5qiIjGwb0K7EN+1vI4Le7K1cIml47Wmt12Y9vf3tW13ls1YYyvruvVbTXlavJQLOWO+IF1mQAGdVvUnLg==} + peerDependencies: + '@types/react': '*' + react: '*' + styled-components: '*' + styled-system: '*' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + styled-components: 6.1.8(react-dom@18.2.0)(react@18.2.0) + styled-system: 5.1.5 + dev: false + + /@ledgerhq/icons-ui@0.6.2(@types/react@18.2.45)(react@18.2.0)(styled-components@6.1.8)(styled-system@5.1.5): + resolution: {integrity: sha512-e7xcw1QChKntu9uFj/o/9o4UglH3emaO1pB+ukiHX5YcOCPROHi8sHVKAFkte5+ohIjtLbskaUuYFlBEFE2GcQ==} + peerDependencies: + '@types/react': '*' + react: '*' + styled-components: '*' + styled-system: '*' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + styled-components: 6.1.8(react-dom@18.2.0)(react@18.2.0) + styled-system: 5.1.5 + dev: false + + /@ledgerhq/react-ui@0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@6.1.8): + resolution: {integrity: sha512-LABUaH7aMzRRMSDGSfeB6FPxzQljP8HKi3EOaZtQZcJTNypl6StG5T2ua2x4cAvRbZNnmJoxWZF3nOFNMMiuXQ==} + peerDependencies: + '@types/react': '*' + react: '>=17.0.2' + react-dom: '>=17.0.2' + styled-components: ^5.3.3 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@floating-ui/react-dom': 0.4.3(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@ledgerhq/crypto-icons-ui': 1.0.0(@types/react@18.2.45)(react@18.2.0)(styled-components@6.1.8)(styled-system@5.1.5) + '@ledgerhq/icons-ui': 0.6.2(@types/react@18.2.45)(react@18.2.0)(styled-components@6.1.8)(styled-system@5.1.5) + '@ledgerhq/ui-shared': 0.2.1 + '@tippyjs/react': 4.2.6(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.45 + chart.js: 3.9.1 + chartjs-adapter-moment: 1.0.1(chart.js@3.9.1)(moment@2.30.1) + color: 4.2.3 + moment: 2.30.1 + react: 18.2.0 + react-chartjs-2: 3.3.0(chart.js@3.9.1)(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + react-is: 17.0.2 + react-select: 5.8.0(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + react-window: 1.8.10(react-dom@18.2.0)(react@18.2.0) + styled-components: 6.1.8(react-dom@18.2.0)(react@18.2.0) + styled-system: 5.1.5 + dev: false + + /@ledgerhq/ui-shared@0.2.1: + resolution: {integrity: sha512-mPvo78REWxhYTmkFI96ryCOAyZTV42f+l55AnuoeJ2tGn5nN7bmkOUIzZ4MJOx5VvGlWcvtY/+2dA0yEelCs9w==} + dev: false + /@microsoft/tsdoc-config@0.16.2: resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} dependencies: @@ -1037,6 +1252,10 @@ packages: tslib: 2.6.2 dev: true + /@popperjs/core@2.11.8: + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + dev: false + /@rushstack/eslint-patch@1.6.1: resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} dev: true @@ -1057,12 +1276,100 @@ packages: '@sinonjs/commons': 3.0.0 dev: true + /@styled-system/background@5.1.2: + resolution: {integrity: sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==} + dependencies: + '@styled-system/core': 5.1.2 + dev: false + + /@styled-system/border@5.1.5: + resolution: {integrity: sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==} + dependencies: + '@styled-system/core': 5.1.2 + dev: false + + /@styled-system/color@5.1.2: + resolution: {integrity: sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==} + dependencies: + '@styled-system/core': 5.1.2 + dev: false + + /@styled-system/core@5.1.2: + resolution: {integrity: sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==} + dependencies: + object-assign: 4.1.1 + dev: false + + /@styled-system/css@5.1.5: + resolution: {integrity: sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==} + dev: false + + /@styled-system/flexbox@5.1.2: + resolution: {integrity: sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==} + dependencies: + '@styled-system/core': 5.1.2 + dev: false + + /@styled-system/grid@5.1.2: + resolution: {integrity: sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==} + dependencies: + '@styled-system/core': 5.1.2 + dev: false + + /@styled-system/layout@5.1.2: + resolution: {integrity: sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==} + dependencies: + '@styled-system/core': 5.1.2 + dev: false + + /@styled-system/position@5.1.2: + resolution: {integrity: sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==} + dependencies: + '@styled-system/core': 5.1.2 + dev: false + + /@styled-system/shadow@5.1.2: + resolution: {integrity: sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==} + dependencies: + '@styled-system/core': 5.1.2 + dev: false + + /@styled-system/space@5.1.2: + resolution: {integrity: sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==} + dependencies: + '@styled-system/core': 5.1.2 + dev: false + + /@styled-system/typography@5.1.2: + resolution: {integrity: sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==} + dependencies: + '@styled-system/core': 5.1.2 + dev: false + + /@styled-system/variant@5.1.5: + resolution: {integrity: sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==} + dependencies: + '@styled-system/core': 5.1.2 + '@styled-system/css': 5.1.5 + dev: false + /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: tslib: 2.6.2 dev: false + /@tippyjs/react@4.2.6(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tippy.js: 6.3.7 + dev: false + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true @@ -1192,9 +1499,12 @@ packages: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: false + /@types/prop-types@15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - dev: true /@types/ps-tree@1.1.6: resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} @@ -1206,17 +1516,21 @@ packages: '@types/react': 18.2.45 dev: true + /@types/react-transition-group@4.4.10: + resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} + dependencies: + '@types/react': 18.2.45 + dev: false + /@types/react@18.2.45: resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 csstype: 3.1.3 - dev: true /@types/scheduler@0.16.8: resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} - dev: true /@types/semver@7.5.6: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} @@ -1226,6 +1540,10 @@ packages: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true + /@types/stylis@4.2.0: + resolution: {integrity: sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==} + dev: false + /@types/which@3.0.3: resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} dev: true @@ -1465,7 +1783,7 @@ packages: eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) @@ -1747,6 +2065,15 @@ packages: '@types/babel__traverse': 7.20.4 dev: true + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.23.6 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + dev: false + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: @@ -1876,7 +2203,6 @@ packages: /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} @@ -1888,6 +2214,10 @@ packages: engines: {node: '>=10'} dev: true + /camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + dev: false + /caniuse-lite@1.0.30001570: resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} @@ -1926,6 +2256,20 @@ packages: engines: {node: '>=10'} dev: true + /chart.js@3.9.1: + resolution: {integrity: sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==} + dev: false + + /chartjs-adapter-moment@1.0.1(chart.js@3.9.1)(moment@2.30.1): + resolution: {integrity: sha512-Uz+nTX/GxocuqXpGylxK19YG4R3OSVf8326D+HwSTsNw1LgzyIGRo+Qujwro1wy6X+soNSnfj5t2vZ+r6EaDmA==} + peerDependencies: + chart.js: '>=3.0.0' + moment: ^2.10.2 + dependencies: + chart.js: 3.9.1 + moment: 2.30.1 + dev: false + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -2004,14 +2348,27 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + + /color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + + /color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: false /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -2047,9 +2404,24 @@ packages: yargs: 17.7.2 dev: true + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: false + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + /create-jest@29.7.0(@types/node@20.10.6)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2082,9 +2454,25 @@ packages: which: 2.0.2 dev: true + /css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + dev: false + + /css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + dependencies: + camelize: 1.0.1 + css-color-keywords: 1.0.0 + postcss-value-parser: 4.2.0 + dev: false + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + dev: false + /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: true /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -2234,6 +2622,13 @@ packages: esutils: 2.0.3 dev: true + /dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dependencies: + '@babel/runtime': 7.23.6 + csstype: 3.1.3 + dev: false + /dotenv@16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} @@ -2279,7 +2674,6 @@ packages: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: true /es-abstract@1.22.3: resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} @@ -2385,7 +2779,6 @@ packages: /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true /eslint-config-next@14.0.4(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==} @@ -2402,7 +2795,7 @@ packages: eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) @@ -2436,7 +2829,7 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -2460,7 +2853,7 @@ packages: enhanced-resolve: 5.15.0 eslint: 8.56.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -2482,8 +2875,8 @@ packages: debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -2520,35 +2913,6 @@ packages: debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color @@ -2600,7 +2964,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -2610,7 +2974,6 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3038,6 +3401,10 @@ packages: to-regex-range: 5.0.1 dev: true + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3119,7 +3486,6 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} @@ -3353,7 +3719,12 @@ packages: engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - dev: true + + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -3389,7 +3760,6 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} @@ -3450,7 +3820,10 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + + /is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false /is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} @@ -3496,7 +3869,6 @@ packages: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.0 - dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -4217,7 +4589,6 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -4299,7 +4670,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /lint-staged@15.2.0: resolution: {integrity: sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==} @@ -4413,6 +4783,14 @@ packages: resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} dev: true + /memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + dev: false + + /memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + dev: false + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true @@ -4467,6 +4845,10 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dev: true + /moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + dev: false + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -4585,7 +4967,6 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: true /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -4729,7 +5110,6 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 - dev: true /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} @@ -4739,7 +5119,6 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -4763,7 +5142,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-scurry@1.10.1: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} @@ -4776,7 +5154,6 @@ packages: /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: true /pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} @@ -4824,7 +5201,6 @@ packages: /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true /postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} @@ -4891,7 +5267,6 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true /ps-tree@1.2.0: resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} @@ -4925,6 +5300,16 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /react-chartjs-2@3.3.0(chart.js@3.9.1)(react@18.2.0): + resolution: {integrity: sha512-4Mt0SR2aiUbWi/4762odRBYSnbNKSs4HWc0o3IW43py5bMfmfpeZU95w6mbvtuLZH/M3GsPJMU8DvDc+5U9blQ==} + peerDependencies: + chart.js: ^3.5.0 + react: ^16.8.0 || ^17.0.0 + dependencies: + chart.js: 3.9.1 + react: 18.2.0 + dev: false + /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -4937,12 +5322,63 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true + + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: false /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true + /react-select@5.8.0(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.23.6 + '@emotion/cache': 11.11.0 + '@emotion/react': 11.11.3(@types/react@18.2.45)(react@18.2.0) + '@floating-ui/dom': 1.5.4 + '@types/react-transition-group': 4.4.10 + memoize-one: 6.0.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.45)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + dependencies: + '@babel/runtime': 7.23.6 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /react-window@1.8.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Y0Cx+dnU6NLa5/EvoHukUD0BklJ8qITCtVEPY1C/nL8wwoZ0b5aEw8Ff1dOVHw7fCzMt55XfJDd8S8W8LCaUCg==} + engines: {node: '>8.0.0'} + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.23.6 + memoize-one: 5.2.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -4994,7 +5430,6 @@ packages: /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} @@ -5032,7 +5467,6 @@ packages: /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} @@ -5062,7 +5496,6 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} @@ -5184,6 +5617,10 @@ packages: has-property-descriptors: 1.0.1 dev: true + /shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + dev: false + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -5217,6 +5654,12 @@ packages: engines: {node: '>=14'} dev: true + /simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: false + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true @@ -5275,6 +5718,11 @@ packages: source-map: 0.6.1 dev: true + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: false + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -5459,6 +5907,26 @@ packages: engines: {node: '>=8'} dev: true + /styled-components@6.1.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==} + engines: {node: '>= 16'} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' + dependencies: + '@emotion/is-prop-valid': 1.2.1 + '@emotion/unitless': 0.8.0 + '@types/stylis': 4.2.0 + css-to-react-native: 3.2.0 + csstype: 3.1.2 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + shallowequal: 1.1.0 + stylis: 4.3.1 + tslib: 2.5.0 + dev: false + /styled-jsx@5.1.1(@babel/core@7.23.6)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -5477,6 +5945,32 @@ packages: react: 18.2.0 dev: false + /styled-system@5.1.5: + resolution: {integrity: sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==} + dependencies: + '@styled-system/background': 5.1.2 + '@styled-system/border': 5.1.5 + '@styled-system/color': 5.1.2 + '@styled-system/core': 5.1.2 + '@styled-system/flexbox': 5.1.2 + '@styled-system/grid': 5.1.2 + '@styled-system/layout': 5.1.2 + '@styled-system/position': 5.1.2 + '@styled-system/shadow': 5.1.2 + '@styled-system/space': 5.1.2 + '@styled-system/typography': 5.1.2 + '@styled-system/variant': 5.1.5 + object-assign: 4.1.1 + dev: false + + /stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: false + + /stylis@4.3.1: + resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==} + dev: false + /supports-color@4.5.0: resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} engines: {node: '>=4'} @@ -5507,7 +6001,6 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /synckit@0.8.6: resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} @@ -5539,6 +6032,12 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true + /tippy.js@6.3.7: + resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + dependencies: + '@popperjs/core': 2.11.8 + dev: false + /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} @@ -5663,6 +6162,10 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true + /tslib@2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + dev: false + /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -5856,6 +6359,19 @@ packages: punycode: 2.3.1 dev: true + /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: false + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true @@ -6015,6 +6531,11 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} From 3f14b8173d282be161074ae049c6c4c4bdbe3c28 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 18 Jan 2024 11:01:47 +0100 Subject: [PATCH 044/253] fix(eslint): extend config with next --- apps/sample/.eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sample/.eslintrc.js b/apps/sample/.eslintrc.js index 56e504615..427a5846e 100644 --- a/apps/sample/.eslintrc.js +++ b/apps/sample/.eslintrc.js @@ -1,5 +1,5 @@ module.exports = { - extends: ["next/core-web-vitals", "@ledgerhq/dsdk"], + extends: ["next", "@ledgerhq/dsdk"], parserOptions: { project: true, tsconfigRootDir: __dirname, From 62381ca283d97b81e3e04755c3f5cfb0005e3fdb Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 30 Jan 2024 17:00:38 +0100 Subject: [PATCH 045/253] fix(sample): downgrade styled-components to match react-ui ledgerh --- apps/sample/package.json | 3 +- apps/sample/src/pages/index.tsx | 7 +- pnpm-lock.yaml | 194 +++++++++++++++++++++----------- 3 files changed, 132 insertions(+), 72 deletions(-) diff --git a/apps/sample/package.json b/apps/sample/package.json index 5675b1178..03583a602 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -13,12 +13,13 @@ "next": "14.0.4", "react": "^18", "react-dom": "^18", - "styled-components": "^6.1.8" + "styled-components": "^5.3.11" }, "devDependencies": { "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", "@types/react": "^18", + "@types/styled-components": "^5.1.25", "autoprefixer": "^10.0.1", "eslint-config-next": "14.0.4", "postcss": "^8" diff --git a/apps/sample/src/pages/index.tsx b/apps/sample/src/pages/index.tsx index 558f74d8e..5107f4428 100644 --- a/apps/sample/src/pages/index.tsx +++ b/apps/sample/src/pages/index.tsx @@ -1,13 +1,14 @@ "use client"; import React from "react"; import { Box } from "@ledgerhq/react-ui/index"; -import styled from "styled-components"; +import styled, { DefaultTheme } from "styled-components"; const MainContainer = styled(Box)` width: 100%; height: 100%; - background-color: ${({ theme }) => theme.colors.background.main}; - color: ${({ theme }) => theme.colors.neutral.c90}; + background-color: ${({ theme }: { theme: DefaultTheme }) => + theme.colors.background.main}; + color: ${({ theme }: { theme: DefaultTheme }) => theme.colors.neutral.c90}; `; const Home: React.FC = () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 67c27ef02..163fa0223 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,7 +43,7 @@ importers: dependencies: '@ledgerhq/react-ui': specifier: ^0.14.13 - version: 0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@6.1.8) + version: 0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11) next: specifier: 14.0.4 version: 14.0.4(@babel/core@7.23.6)(react-dom@18.2.0)(react@18.2.0) @@ -54,8 +54,8 @@ importers: specifier: ^18 version: 18.2.0(react@18.2.0) styled-components: - specifier: ^6.1.8 - version: 6.1.8(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.3.11 + version: 5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -66,6 +66,9 @@ importers: '@types/react': specifier: ^18 version: 18.2.45 + '@types/styled-components': + specifier: ^5.1.25 + version: 5.1.34 autoprefixer: specifier: ^10.0.1 version: 10.4.16(postcss@8.4.32) @@ -249,10 +252,10 @@ packages: '@babel/helpers': 7.23.6 '@babel/parser': 7.23.6 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 + '@babel/traverse': 7.23.6(supports-color@5.5.0) '@babel/types': 7.23.6 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -282,6 +285,13 @@ packages: '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} @@ -331,7 +341,6 @@ packages: /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} @@ -362,7 +371,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 + '@babel/traverse': 7.23.6(supports-color@5.5.0) '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color @@ -435,7 +444,6 @@ packages: dependencies: '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} @@ -525,7 +533,7 @@ packages: '@babel/parser': 7.23.6 '@babel/types': 7.23.6 - /@babel/traverse@7.23.6: + /@babel/traverse@7.23.6(supports-color@5.5.0): resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} engines: {node: '>=6.9.0'} dependencies: @@ -537,7 +545,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.6 '@babel/types': 7.23.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -636,8 +644,12 @@ packages: resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} dev: false - /@emotion/unitless@0.8.0: - resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} + /@emotion/stylis@0.8.5: + resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} + dev: false + + /@emotion/unitless@0.7.5: + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} dev: false /@emotion/unitless@0.8.1: @@ -680,7 +692,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.0 @@ -743,7 +755,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -1032,7 +1044,7 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@ledgerhq/crypto-icons-ui@1.0.0(@types/react@18.2.45)(react@18.2.0)(styled-components@6.1.8)(styled-system@5.1.5): + /@ledgerhq/crypto-icons-ui@1.0.0(@types/react@18.2.45)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): resolution: {integrity: sha512-d6wuM5qiIjGwb0K7EN+1vI4Le7K1cIml47Wmt12Y9vf3tW13ls1YYyvruvVbTXlavJQLOWO+IF1mQAGdVvUnLg==} peerDependencies: '@types/react': '*' @@ -1045,11 +1057,11 @@ packages: dependencies: '@types/react': 18.2.45 react: 18.2.0 - styled-components: 6.1.8(react-dom@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false - /@ledgerhq/icons-ui@0.6.2(@types/react@18.2.45)(react@18.2.0)(styled-components@6.1.8)(styled-system@5.1.5): + /@ledgerhq/icons-ui@0.6.2(@types/react@18.2.45)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): resolution: {integrity: sha512-e7xcw1QChKntu9uFj/o/9o4UglH3emaO1pB+ukiHX5YcOCPROHi8sHVKAFkte5+ohIjtLbskaUuYFlBEFE2GcQ==} peerDependencies: '@types/react': '*' @@ -1062,11 +1074,11 @@ packages: dependencies: '@types/react': 18.2.45 react: 18.2.0 - styled-components: 6.1.8(react-dom@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false - /@ledgerhq/react-ui@0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@6.1.8): + /@ledgerhq/react-ui@0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11): resolution: {integrity: sha512-LABUaH7aMzRRMSDGSfeB6FPxzQljP8HKi3EOaZtQZcJTNypl6StG5T2ua2x4cAvRbZNnmJoxWZF3nOFNMMiuXQ==} peerDependencies: '@types/react': '*' @@ -1078,8 +1090,8 @@ packages: optional: true dependencies: '@floating-ui/react-dom': 0.4.3(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@ledgerhq/crypto-icons-ui': 1.0.0(@types/react@18.2.45)(react@18.2.0)(styled-components@6.1.8)(styled-system@5.1.5) - '@ledgerhq/icons-ui': 0.6.2(@types/react@18.2.45)(react@18.2.0)(styled-components@6.1.8)(styled-system@5.1.5) + '@ledgerhq/crypto-icons-ui': 1.0.0(@types/react@18.2.45)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) + '@ledgerhq/icons-ui': 0.6.2(@types/react@18.2.45)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) '@ledgerhq/ui-shared': 0.2.1 '@tippyjs/react': 4.2.6(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.45 @@ -1094,7 +1106,7 @@ packages: react-select: 5.8.0(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) react-window: 1.8.10(react-dom@18.2.0)(react@18.2.0) - styled-components: 6.1.8(react-dom@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false @@ -1443,6 +1455,13 @@ packages: '@types/node': 20.10.6 dev: true + /@types/hoist-non-react-statics@3.3.5: + resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} + dependencies: + '@types/react': 18.2.45 + hoist-non-react-statics: 3.3.2 + dev: true + /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true @@ -1540,9 +1559,13 @@ packages: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true - /@types/stylis@4.2.0: - resolution: {integrity: sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==} - dev: false + /@types/styled-components@5.1.34: + resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} + dependencies: + '@types/hoist-non-react-statics': 3.3.5 + '@types/react': 18.2.45 + csstype: 3.1.3 + dev: true /@types/which@3.0.3: resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} @@ -1575,7 +1598,7 @@ packages: '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.3.0 @@ -1601,7 +1624,7 @@ packages: '@typescript-eslint/types': 6.14.0 '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: @@ -1636,7 +1659,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 @@ -1665,7 +1688,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -1686,7 +1709,7 @@ packages: dependencies: '@typescript-eslint/types': 6.14.0 '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -1783,7 +1806,7 @@ packages: eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) @@ -2074,6 +2097,21 @@ packages: resolve: 1.22.8 dev: false + /babel-plugin-styled-components@2.1.4(@babel/core@7.23.6)(styled-components@5.3.11): + resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} + peerDependencies: + styled-components: '>= 2' + dependencies: + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + lodash: 4.17.21 + picomatch: 2.3.1 + styled-components: 5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - '@babel/core' + dev: false + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: @@ -2467,10 +2505,6 @@ packages: postcss-value-parser: 4.2.0 dev: false - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - dev: false - /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -2501,7 +2535,7 @@ packages: ms: 2.1.3 dev: true - /debug@4.3.4: + /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -2511,6 +2545,7 @@ packages: optional: true dependencies: ms: 2.1.2 + supports-color: 5.5.0 /dedent@1.5.1: resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} @@ -2795,7 +2830,7 @@ packages: eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) @@ -2829,7 +2864,7 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -2849,11 +2884,11 @@ packages: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.15.0 eslint: 8.56.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -2872,11 +2907,11 @@ packages: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -2913,6 +2948,35 @@ packages: debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color @@ -2964,7 +3028,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -2974,6 +3038,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3192,7 +3257,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -3724,7 +3789,6 @@ packages: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 - dev: false /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -4100,7 +4164,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -4678,7 +4742,7 @@ packages: dependencies: chalk: 5.3.0 commander: 11.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) execa: 8.0.1 lilconfig: 3.0.0 listr2: 8.0.0 @@ -4726,7 +4790,6 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true /log-update@6.0.0: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} @@ -5167,7 +5230,6 @@ packages: /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} @@ -5329,7 +5391,6 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true /react-select@5.8.0(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} @@ -5907,24 +5968,29 @@ packages: engines: {node: '>=8'} dev: true - /styled-components@6.1.8(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==} - engines: {node: '>= 16'} + /styled-components@5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} + engines: {node: '>=10'} peerDependencies: react: '>= 16.8.0' react-dom: '>= 16.8.0' + react-is: '>= 16.8.0' dependencies: + '@babel/helper-module-imports': 7.22.15 + '@babel/traverse': 7.23.6(supports-color@5.5.0) '@emotion/is-prop-valid': 1.2.1 - '@emotion/unitless': 0.8.0 - '@types/stylis': 4.2.0 + '@emotion/stylis': 0.8.5 + '@emotion/unitless': 0.7.5 + babel-plugin-styled-components: 2.1.4(@babel/core@7.23.6)(styled-components@5.3.11) css-to-react-native: 3.2.0 - csstype: 3.1.2 - postcss: 8.4.31 + hoist-non-react-statics: 3.3.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + react-is: 18.2.0 shallowequal: 1.1.0 - stylis: 4.3.1 - tslib: 2.5.0 + supports-color: 5.5.0 + transitivePeerDependencies: + - '@babel/core' dev: false /styled-jsx@5.1.1(@babel/core@7.23.6)(react@18.2.0): @@ -5967,10 +6033,6 @@ packages: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} dev: false - /stylis@4.3.1: - resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==} - dev: false - /supports-color@4.5.0: resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} engines: {node: '>=4'} @@ -6162,10 +6224,6 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - dev: false - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} From 2d7d81dab032eefb9f3c1a5cc3cf97ae3225a79d Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Mon, 22 Jan 2024 11:34:28 +0100 Subject: [PATCH 046/253] fix(sample): move globalstyles into styles folder --- apps/sample/src/pages/_app.tsx | 2 +- apps/sample/src/{components => styles}/globalstyles.tsx | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) rename apps/sample/src/{components => styles}/globalstyles.tsx (78%) diff --git a/apps/sample/src/pages/_app.tsx b/apps/sample/src/pages/_app.tsx index 8ac64b68d..073397414 100644 --- a/apps/sample/src/pages/_app.tsx +++ b/apps/sample/src/pages/_app.tsx @@ -1,5 +1,5 @@ import { CustomThemeProvider } from "@/providers/theme"; -import { GlobalStyle } from "@/components/globalstyles"; +import { GlobalStyle } from "@/styles/globalstyles"; import type { AppProps } from "next/app"; export default function App({ Component, pageProps }: AppProps) { diff --git a/apps/sample/src/components/globalstyles.tsx b/apps/sample/src/styles/globalstyles.tsx similarity index 78% rename from apps/sample/src/components/globalstyles.tsx rename to apps/sample/src/styles/globalstyles.tsx index 10ea87200..5ddbef368 100644 --- a/apps/sample/src/components/globalstyles.tsx +++ b/apps/sample/src/styles/globalstyles.tsx @@ -8,5 +8,7 @@ export const GlobalStyle = createGlobalStyle` height: 100%; padding: 0; margin: 0; + background-color: #000000; + font-family: Inter; } `; From 2c60f5422bbf390493cdebe725d9a5680c8c26f5 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Mon, 22 Jan 2024 12:03:55 +0100 Subject: [PATCH 047/253] fix(sample): add Inner google font --- apps/sample/src/pages/_app.tsx | 7 +++++-- apps/sample/src/styles/globalstyles.tsx | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/sample/src/pages/_app.tsx b/apps/sample/src/pages/_app.tsx index 073397414..1efdedb24 100644 --- a/apps/sample/src/pages/_app.tsx +++ b/apps/sample/src/pages/_app.tsx @@ -1,14 +1,17 @@ import { CustomThemeProvider } from "@/providers/theme"; import { GlobalStyle } from "@/styles/globalstyles"; import type { AppProps } from "next/app"; +import { Inter } from "next/font/google"; + +const inter = Inter({ subsets: ["latin"] }); export default function App({ Component, pageProps }: AppProps) { return ( - <> +
- +
); } diff --git a/apps/sample/src/styles/globalstyles.tsx b/apps/sample/src/styles/globalstyles.tsx index 5ddbef368..487e64123 100644 --- a/apps/sample/src/styles/globalstyles.tsx +++ b/apps/sample/src/styles/globalstyles.tsx @@ -3,12 +3,12 @@ import { createGlobalStyle } from "styled-components"; export const GlobalStyle = createGlobalStyle` html, body, - #__next { + #__next, + main { width: 100%; height: 100%; padding: 0; margin: 0; background-color: #000000; - font-family: Inter; } `; From aa845e1def357987bb2e93fc70864fb57ed9ba9c Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 23 Jan 2024 16:48:46 +0100 Subject: [PATCH 048/253] chore(sample): add comments for _app and _document --- apps/sample/src/pages/_app.tsx | 13 +++++++++++++ apps/sample/src/pages/_document.tsx | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/apps/sample/src/pages/_app.tsx b/apps/sample/src/pages/_app.tsx index 1efdedb24..6fa2c0544 100644 --- a/apps/sample/src/pages/_app.tsx +++ b/apps/sample/src/pages/_app.tsx @@ -1,3 +1,16 @@ +/** + * _app.tsx + * + * This is a special Next.js file used to wrap the entire application and provide a common + * layout or functionality across all pages. It allows you to maintain state, apply global + * styles, and handle other aspects that should persist across different pages. + * + * The `App` component in this file is initialized once for the entire application and is + * used to customize the rendering of pages. For more information, refer to the Next.js + * documentation on customizing the App component: + * https://nextjs.org/docs/advanced-features/custom-app + */ + import { CustomThemeProvider } from "@/providers/theme"; import { GlobalStyle } from "@/styles/globalstyles"; import type { AppProps } from "next/app"; diff --git a/apps/sample/src/pages/_document.tsx b/apps/sample/src/pages/_document.tsx index f399849d6..849bc11e9 100644 --- a/apps/sample/src/pages/_document.tsx +++ b/apps/sample/src/pages/_document.tsx @@ -1,3 +1,16 @@ +/** + * _document.tsx + * + * This is a special Next.js file used to create a custom document layout. It allows you + * to enhance and optimize the server-side rendering of your application by customizing + * the HTML document structure. This file is crucial for implementing global styles, meta + * tags, and other layout-related configurations that should be applied on the server side. + * + * Keep in mind that changes made in this file affect the entire application's HTML structure, + * so use it judiciously. For more information, refer to the Next.js documentation on customizing + * the document: https://nextjs.org/docs/advanced-features/custom-document + */ + import type { DocumentContext, DocumentInitialProps } from "next/document"; import Document from "next/document"; import { ServerStyleSheet } from "styled-components"; From 9cc42b7f514d3a01c8c50e44624745641b4357f0 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 26 Jan 2024 18:04:07 +0100 Subject: [PATCH 049/253] chore: add hygen and create a generator for core module --- package.json | 1 + .../core-module/with-prompt/datasource.ejs.t | 6 + .../with-prompt/default-service.ejs.t | 10 + .../with-prompt/default-service.test.ejs.t | 16 + .../core-module/with-prompt/di-module.ejs.t | 15 + .../with-prompt/di-module.test.ejs.t | 22 ++ .../core-module/with-prompt/di-types.ejs.t | 6 + .../with-prompt/gitkeep-model.ejs.t | 3 + .../with-prompt/gitkeep-usecase.ejs.t | 3 + .../core-module/with-prompt/prompt.js | 10 + .../core-module/with-prompt/service.ejs.t | 4 + .../_templates/generator/help/index.ejs.t | 5 + .../core/_templates/generator/new/hello.ejs.t | 18 + .../generator/with-prompt/hello.ejs.t | 18 + .../generator/with-prompt/prompt.ejs.t | 14 + .../core/_templates/init/repo/new-repo.ejs.t | 4 + packages/core/package.json | 2 +- pnpm-lock.yaml | 361 ++++++++++++++++++ 18 files changed, 517 insertions(+), 1 deletion(-) create mode 100644 packages/core/_templates/core-module/with-prompt/datasource.ejs.t create mode 100644 packages/core/_templates/core-module/with-prompt/default-service.ejs.t create mode 100644 packages/core/_templates/core-module/with-prompt/default-service.test.ejs.t create mode 100644 packages/core/_templates/core-module/with-prompt/di-module.ejs.t create mode 100644 packages/core/_templates/core-module/with-prompt/di-module.test.ejs.t create mode 100644 packages/core/_templates/core-module/with-prompt/di-types.ejs.t create mode 100644 packages/core/_templates/core-module/with-prompt/gitkeep-model.ejs.t create mode 100644 packages/core/_templates/core-module/with-prompt/gitkeep-usecase.ejs.t create mode 100644 packages/core/_templates/core-module/with-prompt/prompt.js create mode 100644 packages/core/_templates/core-module/with-prompt/service.ejs.t create mode 100644 packages/core/_templates/generator/help/index.ejs.t create mode 100644 packages/core/_templates/generator/new/hello.ejs.t create mode 100644 packages/core/_templates/generator/with-prompt/hello.ejs.t create mode 100644 packages/core/_templates/generator/with-prompt/prompt.ejs.t create mode 100644 packages/core/_templates/init/repo/new-repo.ejs.t diff --git a/package.json b/package.json index 74e8ac3ab..df967b01b 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@types/jest": "^29.5.11", "@types/node": "^20.10.6", "eslint": "^8.56.0", + "hygen": "^6.2.11", "jest": "^29.7.0", "lint-staged": "^15.2.0", "prettier": "^3.1.1", diff --git a/packages/core/_templates/core-module/with-prompt/datasource.ejs.t b/packages/core/_templates/core-module/with-prompt/datasource.ejs.t new file mode 100644 index 000000000..772afcab9 --- /dev/null +++ b/packages/core/_templates/core-module/with-prompt/datasource.ejs.t @@ -0,0 +1,6 @@ +--- +to: src/internal/<%= moduleName %>/data/<%= h.capitalize(moduleName) %>DataSource.ts +--- +export interface <%= h.capitalize(moduleName) %>DataSource {} + + diff --git a/packages/core/_templates/core-module/with-prompt/default-service.ejs.t b/packages/core/_templates/core-module/with-prompt/default-service.ejs.t new file mode 100644 index 000000000..088513ca5 --- /dev/null +++ b/packages/core/_templates/core-module/with-prompt/default-service.ejs.t @@ -0,0 +1,10 @@ +--- +to: src/internal/<%= moduleName %>/service/Default<%= h.capitalize(moduleName) %>Service.ts +--- +import { injectable } from "inversify"; +import { <%= h.capitalize(moduleName) %>Service } from "./<%= h.capitalize(moduleName) %>Service"; + +@injectable() +export class Default<%= h.capitalize(moduleName) %>Service implements <%= h.capitalize(moduleName) %>Service { + constructor() {} +} \ No newline at end of file diff --git a/packages/core/_templates/core-module/with-prompt/default-service.test.ejs.t b/packages/core/_templates/core-module/with-prompt/default-service.test.ejs.t new file mode 100644 index 000000000..4725d2c5d --- /dev/null +++ b/packages/core/_templates/core-module/with-prompt/default-service.test.ejs.t @@ -0,0 +1,16 @@ +--- +to: src/internal/<%= moduleName %>/service/Default<%= h.capitalize(moduleName) %>Service.test.ts +--- +import { <%= h.capitalize(moduleName) %>Service } from "./<%= h.capitalize(moduleName) %>Service"; +import { Default<%= h.capitalize(moduleName) %>Service } from "./Default<%= h.capitalize(moduleName) %>Service"; + +let service: <%= h.capitalize(moduleName) %>Service; +describe("<%= h.capitalize(moduleName) %>Service", () => { + beforeEach(() => { + service = new Default<%= h.capitalize(moduleName) %>Service(); + }); + + it("should be defined", () => { + expect(service).toBeDefined(); + }); +}); \ No newline at end of file diff --git a/packages/core/_templates/core-module/with-prompt/di-module.ejs.t b/packages/core/_templates/core-module/with-prompt/di-module.ejs.t new file mode 100644 index 000000000..e3e1e0587 --- /dev/null +++ b/packages/core/_templates/core-module/with-prompt/di-module.ejs.t @@ -0,0 +1,15 @@ +--- +to: src/internal/<%= moduleName %>/di/<%= moduleName %>Module.ts +--- +import { ContainerModule } from "inversify"; +import { Default<%= h.capitalize(moduleName) %>Service } from "../service/Default<%= h.capitalize(moduleName) %>Service"; +import { types } from "./<%= moduleName %>Types"; + +type FactoryProps = {}; + +const <%= moduleName %>ModuleFactory = ({}: Partial = {}) => + new ContainerModule((bind, _unbind, _isBound, _rebind, _unbindAsync, _onActivation, _onDeactivation) => { + bind(types.<%= h.capitalize(moduleName) %>Service).to(Default<%= h.capitalize(moduleName) %>Service); + }); + +export default <%= moduleName %>ModuleFactory; \ No newline at end of file diff --git a/packages/core/_templates/core-module/with-prompt/di-module.test.ejs.t b/packages/core/_templates/core-module/with-prompt/di-module.test.ejs.t new file mode 100644 index 000000000..c8e2677e6 --- /dev/null +++ b/packages/core/_templates/core-module/with-prompt/di-module.test.ejs.t @@ -0,0 +1,22 @@ +--- +to: src/internal/<%= moduleName %>/di/<%= moduleName %>Module.test.ts +--- +import { Container } from "inversify"; +import <%= moduleName %>ModuleFactory from "./<%= moduleName %>Module"; +import { types } from "./<%= moduleName %>Types"; + +describe("<%= moduleName %>ModuleFactory", () => { + describe("Default", () => { + let container: Container; + let mod: ReturnTypeModuleFactory>; + beforeEach(() => { + mod = <%= moduleName %>ModuleFactory(); + container = new Container(); + container.load(mod); + }); + + it("should return the config module", () => { + expect(mod).toBeDefined(); + }); + }); +}); \ No newline at end of file diff --git a/packages/core/_templates/core-module/with-prompt/di-types.ejs.t b/packages/core/_templates/core-module/with-prompt/di-types.ejs.t new file mode 100644 index 000000000..4eb2349bf --- /dev/null +++ b/packages/core/_templates/core-module/with-prompt/di-types.ejs.t @@ -0,0 +1,6 @@ +--- +to: src/internal/<%= moduleName %>/di/<%= moduleName %>Types.ts +--- +export const types = { + <%= h.capitalize(moduleName) %>Service: Symbol.for("<%= h.capitalize(moduleName) %>Service"), +}; \ No newline at end of file diff --git a/packages/core/_templates/core-module/with-prompt/gitkeep-model.ejs.t b/packages/core/_templates/core-module/with-prompt/gitkeep-model.ejs.t new file mode 100644 index 000000000..9d187af38 --- /dev/null +++ b/packages/core/_templates/core-module/with-prompt/gitkeep-model.ejs.t @@ -0,0 +1,3 @@ +--- +to: src/internal/<%= moduleName %>/model/.gitkeep +--- \ No newline at end of file diff --git a/packages/core/_templates/core-module/with-prompt/gitkeep-usecase.ejs.t b/packages/core/_templates/core-module/with-prompt/gitkeep-usecase.ejs.t new file mode 100644 index 000000000..e409444bd --- /dev/null +++ b/packages/core/_templates/core-module/with-prompt/gitkeep-usecase.ejs.t @@ -0,0 +1,3 @@ +--- +to: src/internal/<%= moduleName %>/usecase/.gitkeep +--- \ No newline at end of file diff --git a/packages/core/_templates/core-module/with-prompt/prompt.js b/packages/core/_templates/core-module/with-prompt/prompt.js new file mode 100644 index 000000000..1e82eaa02 --- /dev/null +++ b/packages/core/_templates/core-module/with-prompt/prompt.js @@ -0,0 +1,10 @@ +// see types of prompts: +// https://github.com/enquirer/enquirer/tree/master/examples +// +module.exports = [ + { + type: "input", + name: "moduleName", + message: "What's the name of the module?", + }, +]; diff --git a/packages/core/_templates/core-module/with-prompt/service.ejs.t b/packages/core/_templates/core-module/with-prompt/service.ejs.t new file mode 100644 index 000000000..86615137e --- /dev/null +++ b/packages/core/_templates/core-module/with-prompt/service.ejs.t @@ -0,0 +1,4 @@ +--- +to: src/internal/<%= moduleName %>/service/<%= h.capitalize(moduleName) %>Service.ts +--- +export interface <%= h.capitalize(moduleName) %>Service {} \ No newline at end of file diff --git a/packages/core/_templates/generator/help/index.ejs.t b/packages/core/_templates/generator/help/index.ejs.t new file mode 100644 index 000000000..90a29aff2 --- /dev/null +++ b/packages/core/_templates/generator/help/index.ejs.t @@ -0,0 +1,5 @@ +--- +message: | + hygen {bold generator new} --name [NAME] --action [ACTION] + hygen {bold generator with-prompt} --name [NAME] --action [ACTION] +--- \ No newline at end of file diff --git a/packages/core/_templates/generator/new/hello.ejs.t b/packages/core/_templates/generator/new/hello.ejs.t new file mode 100644 index 000000000..5680d9639 --- /dev/null +++ b/packages/core/_templates/generator/new/hello.ejs.t @@ -0,0 +1,18 @@ +--- +to: _templates/<%= name %>/<%= action || 'new' %>/hello.ejs.t +--- +--- +to: app/hello.js +--- +const hello = ``` +Hello! +This is your first hygen template. + +Learn what it can do here: + +https://github.com/jondot/hygen +``` + +console.log(hello) + + diff --git a/packages/core/_templates/generator/with-prompt/hello.ejs.t b/packages/core/_templates/generator/with-prompt/hello.ejs.t new file mode 100644 index 000000000..ba6abc562 --- /dev/null +++ b/packages/core/_templates/generator/with-prompt/hello.ejs.t @@ -0,0 +1,18 @@ +--- +to: _templates/<%= name %>/<%= action || 'new' %>/hello.ejs.t +--- +--- +to: app/hello.js +--- +const hello = ``` +Hello! +This is your first prompt based hygen template. + +Learn what it can do here: + +https://github.com/jondot/hygen +``` + +console.log(hello) + + diff --git a/packages/core/_templates/generator/with-prompt/prompt.ejs.t b/packages/core/_templates/generator/with-prompt/prompt.ejs.t new file mode 100644 index 000000000..76ea532a6 --- /dev/null +++ b/packages/core/_templates/generator/with-prompt/prompt.ejs.t @@ -0,0 +1,14 @@ +--- +to: _templates/<%= name %>/<%= action || 'new' %>/prompt.js +--- + +// see types of prompts: +// https://github.com/enquirer/enquirer/tree/master/examples +// +module.exports = [ + { + type: 'input', + name: 'message', + message: "What's your message?" + } +] diff --git a/packages/core/_templates/init/repo/new-repo.ejs.t b/packages/core/_templates/init/repo/new-repo.ejs.t new file mode 100644 index 000000000..08e7cffdb --- /dev/null +++ b/packages/core/_templates/init/repo/new-repo.ejs.t @@ -0,0 +1,4 @@ +--- +setup: <%= name %> +force: true # this is because mostly, people init into existing folders is safe +--- diff --git a/packages/core/package.json b/packages/core/package.json index cde19d97a..7387010a3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -15,7 +15,7 @@ "test": "jest src", "test:watch": "pnpm test -- --watch", "test:coverage": "pnpm test -- --coverage", - "module:init": "zx scripts/add-module.mjs" + "module:create": "pnpm hygen core-module with-prompt" }, "dependencies": { "inversify": "^6.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 163fa0223..94bedead3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: eslint: specifier: ^8.56.0 version: 8.56.0 + hygen: + specifier: ^6.2.11 + version: 6.2.11 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) @@ -1502,6 +1505,10 @@ packages: resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} dev: true + /@types/node@17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + dev: true + /@types/node@18.19.3: resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} dependencies: @@ -1853,6 +1860,11 @@ packages: uri-js: 4.4.1 dev: true + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: true + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -2009,6 +2021,10 @@ packages: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: true + /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: @@ -2147,6 +2163,10 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + /big-integer@1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} @@ -2157,6 +2177,14 @@ packages: engines: {node: '>=8'} dev: true + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + /bplist-parser@0.2.0: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} @@ -2211,6 +2239,13 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -2242,6 +2277,13 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + /camel-case@3.0.0: + resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -2289,6 +2331,29 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true + /change-case@3.1.0: + resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} + dependencies: + camel-case: 3.0.0 + constant-case: 2.0.0 + dot-case: 2.1.1 + header-case: 1.0.1 + is-lower-case: 1.1.3 + is-upper-case: 1.1.2 + lower-case: 1.1.4 + lower-case-first: 1.0.2 + no-case: 2.3.2 + param-case: 2.1.1 + pascal-case: 2.0.1 + path-case: 2.1.1 + sentence-case: 2.1.1 + snake-case: 2.1.0 + swap-case: 1.1.2 + title-case: 2.1.1 + upper-case: 1.1.3 + upper-case-first: 1.1.2 + dev: true + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -2339,6 +2404,13 @@ packages: escape-string-regexp: 1.0.5 dev: true + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + /cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2346,6 +2418,11 @@ packages: restore-cursor: 4.0.0 dev: true + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: true + /cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -2367,6 +2444,11 @@ packages: wrap-ansi: 7.0.0 dev: true + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -2442,6 +2524,13 @@ packages: yargs: 17.7.2 dev: true + /constant-case@2.0.0: + resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} + dependencies: + snake-case: 2.1.0 + upper-case: 1.1.3 + dev: true + /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: false @@ -2583,6 +2672,12 @@ packages: titleize: 3.0.0 dev: true + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} @@ -2606,6 +2701,12 @@ packages: object-keys: 1.1.1 dev: true + /degit@2.8.4: + resolution: {integrity: sha512-vqYuzmSA5I50J882jd+AbAhQtgK6bdKUJIex1JNfEUPENCgYsxugzKVZlFyMwV4i06MmnV47/Iqi5Io86zf3Ng==} + engines: {node: '>=8.0.0'} + hasBin: true + dev: true + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -2664,6 +2765,12 @@ packages: csstype: 3.1.3 dev: false + /dot-case@2.1.1: + resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} + dependencies: + no-case: 2.3.2 + dev: true + /dotenv@16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} @@ -2677,6 +2784,14 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: true + /electron-to-chromium@1.4.614: resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} @@ -2705,6 +2820,14 @@ packages: tapable: 2.2.1 dev: true + /enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + dev: true + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -3459,6 +3582,12 @@ packages: flat-cache: 3.2.0 dev: true + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -3528,6 +3657,21 @@ packages: resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} dev: true + /front-matter@4.0.2: + resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} + dependencies: + js-yaml: 3.14.1 + dev: true + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + /fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -3785,6 +3929,13 @@ packages: dependencies: function-bind: 1.1.2 + /header-case@1.0.1: + resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: @@ -3813,6 +3964,39 @@ packages: engines: {node: '>=16.17.0'} dev: true + /hygen@6.2.11: + resolution: {integrity: sha512-t6/zLI2XozP5gvV74nnl8LZSbwpVNFUkUs/O9DwuOdiiBbws5k4AQNVwKZ9FGzcKjdJ5EBBYkVzlcUHkLyY0FQ==} + hasBin: true + dependencies: + '@types/node': 17.0.45 + chalk: 4.1.2 + change-case: 3.1.0 + debug: 4.3.4(supports-color@5.5.0) + degit: 2.8.4 + ejs: 3.1.9 + enquirer: 2.4.1 + execa: 5.1.1 + front-matter: 4.0.2 + fs-extra: 10.1.0 + ignore-walk: 4.0.1 + inflection: 1.13.4 + ora: 5.4.1 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore-walk@4.0.1: + resolution: {integrity: sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==} + engines: {node: '>=10'} + dependencies: + minimatch: 3.1.2 + dev: true + /ignore@5.3.0: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} @@ -3844,6 +4028,11 @@ packages: engines: {node: '>=8'} dev: true + /inflection@1.13.4: + resolution: {integrity: sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==} + engines: {'0': node >= 0.4.0} + dev: true + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -4008,6 +4197,17 @@ packages: is-docker: 3.0.0 dev: true + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + + /is-lower-case@1.1.3: + resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} + dependencies: + lower-case: 1.1.4 + dev: true + /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true @@ -4088,6 +4288,17 @@ packages: which-typed-array: 1.1.13 dev: true + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /is-upper-case@1.1.2: + resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} + dependencies: + upper-case: 1.1.3 + dev: true + /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} dev: true @@ -4198,6 +4409,17 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + /jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4791,6 +5013,14 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + /log-update@6.0.0: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} @@ -4808,6 +5038,16 @@ packages: dependencies: js-tokens: 4.0.0 + /lower-case-first@1.0.2: + resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} + dependencies: + lower-case: 1.1.4 + dev: true + + /lower-case@1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + dev: true + /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} @@ -4892,6 +5132,13 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -4973,6 +5220,12 @@ packages: - babel-plugin-macros dev: false + /no-case@2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + dependencies: + lower-case: 1.1.4 + dev: true + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -5135,6 +5388,21 @@ packages: type-check: 0.4.0 dev: true + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -5168,6 +5436,12 @@ packages: engines: {node: '>=6'} dev: true + /param-case@2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + dependencies: + no-case: 2.3.2 + dev: true + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -5183,6 +5457,19 @@ packages: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + /pascal-case@2.0.1: + resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} + dependencies: + camel-case: 3.0.0 + upper-case-first: 1.1.2 + dev: true + + /path-case@2.1.1: + resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} + dependencies: + no-case: 2.3.2 + dev: true + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -5466,6 +5753,15 @@ packages: type-fest: 0.6.0 dev: true + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -5567,6 +5863,14 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + /restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5628,6 +5932,10 @@ packages: isarray: 2.0.5 dev: true + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -5659,6 +5967,13 @@ packages: lru-cache: 6.0.0 dev: true + /sentence-case@2.1.1: + resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} + dependencies: + no-case: 2.3.2 + upper-case-first: 1.1.2 + dev: true + /set-function-length@1.1.1: resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} engines: {node: '>= 0.4'} @@ -5751,6 +6066,12 @@ packages: is-fullwidth-code-point: 5.0.0 dev: true + /snake-case@2.1.0: + resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} + dependencies: + no-case: 2.3.2 + dev: true + /sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} dev: true @@ -5922,6 +6243,12 @@ packages: es-abstract: 1.22.3 dev: true + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -6064,6 +6391,13 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + /swap-case@1.1.2: + resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} + dependencies: + lower-case: 1.1.4 + upper-case: 1.1.3 + dev: true + /synckit@0.8.6: resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -6100,6 +6434,13 @@ packages: '@popperjs/core': 2.11.8 dev: false + /title-case@2.1.1: + resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} @@ -6411,6 +6752,16 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /upper-case-first@1.1.2: + resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} + dependencies: + upper-case: 1.1.3 + dev: true + + /upper-case@1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -6430,6 +6781,10 @@ packages: react: 18.2.0 dev: false + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true @@ -6464,6 +6819,12 @@ packages: graceful-fs: 4.2.11 dev: false + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + /web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} From 413e722faa40bd26c9fc861b89be9fa283f7d985 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 29 Jan 2024 16:52:15 +0100 Subject: [PATCH 050/253] chore: setup for monorepo --- .../core/_templates => _templates}/generator/help/index.ejs.t | 0 .../core/_templates => _templates}/generator/new/hello.ejs.t | 0 .../_templates => _templates}/generator/with-prompt/hello.ejs.t | 0 .../_templates => _templates}/generator/with-prompt/prompt.ejs.t | 0 {packages/core/_templates => _templates}/init/repo/new-repo.ejs.t | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {packages/core/_templates => _templates}/generator/help/index.ejs.t (100%) rename {packages/core/_templates => _templates}/generator/new/hello.ejs.t (100%) rename {packages/core/_templates => _templates}/generator/with-prompt/hello.ejs.t (100%) rename {packages/core/_templates => _templates}/generator/with-prompt/prompt.ejs.t (100%) rename {packages/core/_templates => _templates}/init/repo/new-repo.ejs.t (100%) diff --git a/packages/core/_templates/generator/help/index.ejs.t b/_templates/generator/help/index.ejs.t similarity index 100% rename from packages/core/_templates/generator/help/index.ejs.t rename to _templates/generator/help/index.ejs.t diff --git a/packages/core/_templates/generator/new/hello.ejs.t b/_templates/generator/new/hello.ejs.t similarity index 100% rename from packages/core/_templates/generator/new/hello.ejs.t rename to _templates/generator/new/hello.ejs.t diff --git a/packages/core/_templates/generator/with-prompt/hello.ejs.t b/_templates/generator/with-prompt/hello.ejs.t similarity index 100% rename from packages/core/_templates/generator/with-prompt/hello.ejs.t rename to _templates/generator/with-prompt/hello.ejs.t diff --git a/packages/core/_templates/generator/with-prompt/prompt.ejs.t b/_templates/generator/with-prompt/prompt.ejs.t similarity index 100% rename from packages/core/_templates/generator/with-prompt/prompt.ejs.t rename to _templates/generator/with-prompt/prompt.ejs.t diff --git a/packages/core/_templates/init/repo/new-repo.ejs.t b/_templates/init/repo/new-repo.ejs.t similarity index 100% rename from packages/core/_templates/init/repo/new-repo.ejs.t rename to _templates/init/repo/new-repo.ejs.t From 3c7e0a5e5445b4fa79d238c2927d70ca6d6eee02 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 31 Jan 2024 14:32:18 +0100 Subject: [PATCH 051/253] feature(sample): create Home page --- apps/sample/public/nano-x.png | Bin 0 -> 2035263 bytes apps/sample/public/next.svg | 1 - apps/sample/public/vercel.svg | 1 - apps/sample/src/components/Device/index.tsx | 12 +++ apps/sample/src/components/MainView/index.tsx | 81 ++++++++++++++++++ apps/sample/src/components/Menu/index.tsx | 35 ++++++++ apps/sample/src/components/Sidebar/index.tsx | 67 +++++++++++++++ apps/sample/src/pages/index.tsx | 19 ++-- apps/sample/src/providers/theme.tsx | 4 +- 9 files changed, 209 insertions(+), 11 deletions(-) create mode 100644 apps/sample/public/nano-x.png delete mode 100644 apps/sample/public/next.svg delete mode 100644 apps/sample/public/vercel.svg create mode 100644 apps/sample/src/components/Device/index.tsx create mode 100644 apps/sample/src/components/MainView/index.tsx create mode 100644 apps/sample/src/components/Menu/index.tsx create mode 100644 apps/sample/src/components/Sidebar/index.tsx diff --git a/apps/sample/public/nano-x.png b/apps/sample/public/nano-x.png new file mode 100644 index 0000000000000000000000000000000000000000..4df3dd8af6049698d619c00391d15577afc0e91c GIT binary patch literal 2035263 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 z
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 z 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

P0 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 z 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%0Dytv!SAd99 z9L!o@^R}G}k0Y*jCvxr*G}0I*3^K0W7Ui^I{k~D| zKsDo+l0hd6duMA5Xu#wtkK27~tYLAW`odnod#6XKUQZL707Ny9$mK*rY=LPc&J{;ZlTqpJ=zH0XtJ@C`Cx=p9`cg%4T!Ltek1u&R zT8(VHj@>89d$3U>L?IL=)|+fw;8uLb3e-gtQ`+q>Fhy+EE<~eXdlSy3TyrB6{pq>; z`}G6qf!4vcE?-?2rIp6%%!3cAK8%%_BaJ|urMq*sw+ZHHAWgp1OO`$V!~zY5*D!&5 z)h2VlPjXMoE!-c+RXuUG8tj!H?tvYXu@qT*MsFqEY9%Pk73-I^8Pnc1^CG;RGgB0Nk7t1LT3fFPfDLvu3TCVs-rg@XQUkZFe3%UE|)O z@8E~;UUIv*dNKEu+veJFpZ_8QL>BSzQS^rrf>3?@r0h9t&Q#rvsa>hGksp1B`R(-3 zbjcECAu;TuLN4plrK`F`=Ey7FI&1nFf1<-G-l&T)i>A>L>j@>$zzAS78%@BA+b@^h zIWZ)ijbWH8885hT7HiP{|9;I`ZRKtC{+-=WGS4CcBz1(Ha zSjg6W*bR$A6ZizIwSTdA>&ue&(|s_INIh|Jzk?z>_-(!>6UBaMbLYoEH3Q|IJqYJG zBlgbYifGejq#r2JCTBGYT`1;Imja^~t2o;D*eaDF7wzraDNlCCDkuv>}8L@-3Ls^p}EsduEy8s#gHw8F%o*+nYua$*%g8ng-xmZanfSU z+;YUi?f8v&?_JLK@wquqM&m!Q2A88qbqcnor_6vC;Uw^LV^baock!Y}_W-v_VIxXB z5Ix!{eSV>_gRw)kfse5fh?2)wyu;4;6~5mQ?wCr0D;l^VdgOP~^zN}ykSB&w5cmCH zyfeI6zb(hvX$CXYbo%?#wdRRYmEiG{<}o0uKE*xv6$K+a3}>%f!}G}K(871R#*vr82MGQbAA*vGO8r4OO4oue2*IKbKB~DX8GoQO2sC0PM2anrY)WUs zcX3YB%gq`~M@6kSK}eq|Ek8i9e*l5FkW>*iGs8|95XW{ZrOC<8@^hs))1}jn=PORI zI?MdzwPz7Ydv;_S%k$ZtYm}_3BKf<6D}1VCwfbV(pMflLy6~yEShe){cFQ9NcFu|) zXvWW7upb8v%t`N&lv(?=_TOT#gRxwjsn~1oblh_1?6ZZ|q88Yr<;OGzKouEv-0=)% z(QP6OD9u{*@+U@~e%^A~XjnS2}$^l*F+iw(_FsLNW;Sg@(O0h*Rx0owKOY zWZ-L;|8A~O=Zk0R)PMIGy`O<`qw+vPwn684XRp<()_}t42SjbI?pzJR9aZ-D!cKa` z{VXFt`C|=LF1FwR_0Dcv>yb&q$fPZqSdb6*oAR#V|uCO8QJIaeiIbew!2$<3L;Yx zCEb%*$2Vx4OcD5vK^1njEC}BUIjZ|fIAwfh+#&APn}M_VYZRZL>dq^ZXJ)nAXmF2o z&*itSZ}?Cg;?uvfw*}e|kv(_5SLiRc&RVdoq*Z6<%o}vC6rzp8NIAbjOAxjDwAJfb zCmtcd(PDA411-GM)ZPK9^JP3m85R!|6YD9O$s4Rnl@a1ATcE`M(ZA*g1?pz`j(Ta8 zT=qmPjXyB>n-?@1A0h|xS7J!<3fK?y{JYBR$5F@pYL5V%Mp6>r>D8x2r>TgeFohIu zR;Mqw^kw*Pg|NwmGL5S%Q56w0M;n86icwf4>XUh^6tpPPn;y&wnUV^JCo#7!Zvc$xw@og+-d}In$6rlQf~*My?O&CxHqMi zGFVr(exvOZImr2afcDT;ruW3w(6^ScyxkKYj;{mp-whI(MceO=o~y?`-2zzX`X+7aD6>d+J<-_r#9;wza+A zE^uwN-&(mjL`PpqJ2~3sxx(+VE;7u$<#sSaT3Za`@>q+pUlRdZGNy=phbxTcRB#bd zsJV)@cx+k&36KNuuiH#}VYSEb^YU$I!ij2tH^ z)FFmhyM&;~;*GtXHl=>6-TR4;I3$*qctw9Dbj#6j=PlAvW}2uAhe6>Ba^rGp}+4g z+p8fJ67~ypWnliG_*Vv!oxj3WyQAu6b3`~F?sD*1v(uxXX*|(bD*VIkgCnPK@1am` z{lM3kb42#%07W@%2^{m^c*@WAj2gquj`uM6uyi4>XiDacU+*5d>5{?J<@MRs;}j0& zf@aFKGxkZc9nhCOS$I5-DRAgj`($w(^GJ|!Uw8tZymN9E6&|l2lHFCE|Asv;289l& zUo`mC5Jv#2zp#21?chdOY)&TZns`Q5?>RF=r;KYPKL<{DvwI)dNH2}KE1II9b{D9I za?1Cc60CM#NDnuP;G-0p@6RNZ^*5}4{b`JKx*P93{gpzq^Lw&Te>_YXovnBeEx;DM zzy+Dw9=soaGAPru9d&3`e_Dk)K<*u(WtjU}Dy7Gv8_uA~jh_pEh2Zn(vYm9(&brKx zKpX7Ne9?9x`)T+V?-DI~bcYWs_(d3lcyVHOw6^^#6T4900&Uf7xv}f zu0j( zQDDR`{sXdV#$ez*qfE5{h==ro64?`_RNCe>eeLMC>gks6Fl3yE9KA9>`~o0$b&6rp zrMTWtg@r31w;C(4E;{fN?-^kP%4W<&9{L2qigEwedZUrdtIXCC1>!Ap`X996+?Tip zG?l9q03v34pd8j>p$tc-gV{IgAlBMGUcO8_oiN(%6y>Y~&qqIdiezT|7Q|sUEUqD# z2m4$MI19nYZzqRNYZFP>kGB7FE9usD|BJr)ug&_Dd)ejtliB`U_jI?64CkvuzJPa< zxvx59nmzd?RyS7r1a{D z>VjIk81%XEnXx)=aLnRk!ZfwfbCkWSh!ck*4&dVHzDUT>2FP*|Zx*r9q5NNmRsh0_ z3>bO9m=Cq7UWH9nX3^2MHIG$XYL26p)ZRQzO0mOXudk#I?$wFP9 zz+~9M=-%;%e?8ocdWi33(3q}l{IBDOyEBja<(OetotMV6mN$eibv#nRj&=OqcKtNS zjuc!_+87G(>T3YjS12bXAN=JdCXe1%QljguO370ac28Yc$tJ8|k{q19bK;-w!7GNV zi>50@+q$~=gsG|z5r+X{Sg%4Wd5^iy`B=ZtlA)q$yNj}&k|)!XVjWESrWcxBANQPh zPug~#Y!qR5T)UuG5{$`&E6R2+^4@6vIp`51MxAHS&h|+S*kN-Jbt4Tk4_)bOC0~Gk zzPF5i5E5{ukmg~R*a2Xuh{$=ti+jNBD0qi6T!M%+#d!woG+<&~Ot(8buC2~VZKQ-F zS~B*EBM|GsGw{Z!!nS}JK&SEexk}2w#OpJM$-nO43ikThjr%`ML+$GUmb+kcnaWef zD)brCllp1zG%ce#VwY$*kIWZk-KU-Ev~Bnr<@iCtaIqkxmxykuuo<(}wF?x}BTv#R z1A(8I?PXWpr?_8S$1~|C_}3TOyb)=6JQo&z5fv}-c_?@*ghx^QPSK^gVX%T+ZGK}U zY)*2+7mEKNsm+hOnS5G0@i168ibIuCgY{)Ec+cUZq`2+YHZ0vgKoYRD=eJl}2$R+R z9y16L;)`D3W+p*(f85p{WkquMrCp&6 zt%Okw$-)khCr;MQ6GxuR(+VXw+_5=MfuDs9dn_blIw{`2*T^A3cy*cmZ;HF|?K5ak z#TY?*(-(|BJ|V#QH;VPV*h#``CjUt9e&MxQdj}OgxpOD)0Hw(-TxRLXBaM$eM+@IL z8z7bgGwk-G=VrDAH?$o3*+$Y<2jQOAJ+%WHHaK!BqO}azKL&1CRb?!A)qPXcY%=ru z0PmV|TuDqPdvu-*I2$8OHxkhm=vqb66Z7o>4*)|UN>0@;wwb%2N9F>jM)aVF)qd0I zF_DPns+snkvrO%`0+6p(96^3oEQ5Xxnu)Wey+QSZR*Sx5Qwt?-KrPJd)t|3bo{LVu<9fAMidh3=2<-Sfch53haOvor*&`XJ8qUlk}3;~SL?RkvH*^gkF~*H;+CAP;Av~l<};)z z?EWmo(B|_uevbDVvNvl_vc(s(b3!a5Z2!E{hHvT}G)6O7Ds{6Q<(w!QQ;(8do-Hx4 zcKa6u$?}xJZYwWsU$&Y-fbGuxV4g@sm)dwM$7e{Bs_GT2A3DXAVwC8mG4Jx;sT?FL z&wqtq`$=F@I$jyi7XK9_LS ze2-f+<(j6Ak$!aWspbpz`{$*Bjh8F4UojSPCpLvOC4m_X=Kmzr$8)KzXDfXFbF2V2 zXC@QIttRk*)bhQQy~8w(mYt{v&p5M&>t25uN>yJI2#NV2|EV1Uu+`WXnnKZ=1Or@t z98k1x>t>m}Xjs^obGH;Pp6R)p1y?vT#J<#cI4I6gTP8x!+ccLCzs@GEzVxLg`%w>T z$#>U!u)(BoX`?3_w4dWT1DN02?lT^_mVyop>&UJV%Ia2GD+P}&*zBeBg64WCN((lO z>I=x98nd*2uWIZq%vAKEDZq&cys6w5LJa*^$?Ngz>bU?A)JF_?7WmrK)7?|HLHk^$ z`Wa(be*&whmFJONfk0K;tM$^xe23&lZY@Us4O-_;*;;uB{nRSR;s3YRI~o~7?3 zVXmRLyhM`rE8B)5_+H6zQM(Zk^KyGS>N5h1abSCxCv1T*j5SFIln<)!1zN66axy=GUA4}S<3GS7OP3loxkM2Bh>O|)y250 z03pJa_}vARQ@p>>STJ;6DZC-bU?w)c22XinE+?Mng#-z&fy?!kfnI&Hm7V#e@Wq0k zwyVZ+F_d<#?&Bk1*AqmI6gqG+b-n%Hg;6u9xP4f>4zNtcTUn^g=*mhAOsoms4!%lU zxo8@^7M0+u}N$ASSS|Kf+EgF`$ z-OutEw{kFBKzAIn*Fi=X=Xihd_b_ZYCo&9RcuH<@-m6I3xi%U(D8LyVPEkT#Zg~0f^>eX)cO zHt)q{?|g~>(sVfTexSHg$N>B!zWy>D`3AHoF!Pg-B-WJ_DWw#W7B4QF`d4zh=PDd<)+ejda4NwuGkyAI`P3TkuqVh5LkH$d>A9r_}X51G&hqN7>^iz6dYN+Deo*F|SqYK-4OVm)5C8}q zRKZK|ukwtPB$H%gkjTkF3RF=wZ&G*aRkwXwJJ-hADs@1*gs)*C5zEGz*!NRuvI>XA zE&eyfm|^|Dx+*c0x(zJ zRi4w-GRdT*#U_kN)r+LL9q(HDRV(~Bnpkyh`y$1_K zsUIo5nF>6R@)ji*XRAc@vu+kL?mBM4OJ4+>9pW0Bm;!x3qU)a!?h=u}jWM)5|Ax*g zQgKA~wq{cWZ(QCsGb4Iz$}{K+3g)Yom|4a(5??-v+27PQ9Z~Dtu6c~RZ`N5~2=B2^ZON)M*rUFrv z1$v+%QJ+q9(PZbJ>?hNkxI7omGvk)6!&A2qt+2;ne%3>V@10f+o+g$C*~8r`l|eLh zGaMr|-4GOfT5YsPPz!^hF}RBLoLN;}Yt2*5*vigo+L~usq`OxbVx-8k%5mY|y*jlo z3YM{>S@#3wU;`{i{*QlnUcMj`TeRCc*Grh6m6n7=w~k-0$Mi2BaNv%AT$FyUqS(f3 zIcO>en}43*dk$Wb;bO8Xd1ZF5&2=)G0l0cGYsU!f*%a52^#)KOipBpkx%l${g?s3s-{*A=?V2>GwHDb_k~{HjotWSjivuC z3+9qbXPbBbb?YyFJXD=LOD!Xf=H5`6V9B6M6^G3jjAq~Sd5Bg>us&Osk6>J4X!|pi zD}X~Hv(yLW6oY++@`WZ7o4eoB9K#9)qi&R(8N}=pZVmAh6;TV9yyrFBClN14GMpvi z+{eL>*b?R8cU2*R72@Ul!$lp(+{ZOcX0(}Tlzi0U|;uO^s7xro4 zoulbe&fss189CoQFV?QL#lvEHpCNjYnqRV-X1tAbLKlJ9XX8$|l~D5Mo`+y)zep>r z;9UK@_yjkuaYNpET51v6?Zg_yPr6>to_$)!t!v$1shC|k1Vud|!Uv3BRCyjK{$@P~ zWo^1T^=;4Ak0yb^?`>D2WeuBK-NAb z?sGcjB8N6Z-$^VuPwz2EJ;T$Qr;T7IlY~9 z;K&o{ge@-!^^lkc^zrQYjw0hK-WaksJ4xsk`n&f*Es36n82lcTIA}GwXx^6ACZThlz#KNc_6)tJGGr!W@KP_vJO2Rjf15cN7 z(4i9Niqre6s&UaJT3n0M*2IB$QcCWDX#S|w2)i)G?Ci>jTpJ5v5>xl`Bp21}sUQcO z@r5%wL5jsslH{MlgQ=oet2k!MtiXl`Mv0sSLCU8`c$Hw5E^U7n8ww`lWLKG;kLew3 zH5mrxnO;kAK#UW(J%10mp|Bl%`;MYUyGR^09VZv@!$@^6dB(g5kt1@4jA5D~TnUhG z1<&^r1uua}JhzGY2$a;G<;2dRWy(0sy_4C>pSb6oucPwFY|#=44>i<}lNRm~RN+aN z`oG@B`Lpu$8_t>rbdN~DB@IIP2D5?&TG?;r2_ar`V_D<4!v*e{^6I3i@2bBm-7?|1 zXEb*?!i&Apeb!0tr_7b)6#%eHx=VcgP&OeU7MdqSANZ{|6ab^R7=Cg;9zZ^QX@GK%pW*cR)eA}MRK=K-92E{ zx|-gKzp-9f$-5gzOZSvBs}V5}d8E;C6ZArCqaR8T=n#@8{5~) z#7P0AV)&Ex^9LsC#-yOlbC+T3!?!$~;kDa)^P71Cas4!p{;TcQ{vp5qtL?73I%?z6 z^~R~MjS>Aa_A9881Zr3U$YqJcp` z8zwKamtJVGi(=u5e%$%?fja&57fnx6f(9TDJMQqs!5P4cCfvW9alVr-$!r**g;cEC zuHTs7b#{bX6mvQ$=jV9(a9s2eiscpmHkDK;W@gCdN2&>?>;!OZ3rcyuoxC6IE!l%t zI?ynz>Np#!rJ12`y19`A2}{%`m)9Z~OM0eUadoiQi z6^O1A;p<%DTs_j!Xz>p1R-CzAQ3|jZpl9VmjP|hX{xmDU60?zT97=3Ny8AcH1eJf) zyEv4)t}B=BqrolP;suHJoIvgf2?Fv|o1rw_;B8-;Pz_HLNk_gA;a59<{G@IJ_8*AJ z;I-PM9)GMppIt?=aZw`>W!Pbq)x3<8fI!NkuPeK?mm!DZ$^OFRs4w0+_eJXQ>9lRS z-=kNRClkfi-%VFFoQrxfAqjd^D19{Y65n`$=816ZiO3e7f8e{shX|bWD1f!e3AlSo zMg1;qoTyC}-J+b#;1niiVJB3)%s)EMa&j;=nR4(^`WWOl_o>egeiq$InF*x$pP`qC zM3v_Kug!ieV9WhbLXwrMT>Y9BI7dUrEqL|=UGy#lS1EXp@%vKK$=aaO{3|!5p?D9S zpn#f|{L=lyAhWJ=Zg}!can80Zl`+-m9$^O9b!SRM;@ha1IbB;o881yc| zd`PGnl(9)?;;}ogEuB_p0_eIAM+j(gi18sX$`e%BAR} zo%P#=r8eqk$nY7=jDO9eeXZzh9+tU9<16L4UhIX-bpe|A=Z*A#zv#8-xm9 zBD!3~ZRkA-$cDN)HKU`hZ-YAvS@4n%a-KL>#*TRnZ+og!z0~f$DxQNz@%Ca&$X=KH z6G|>zzr_u!7kAAZzB;A3Ai2D3Ki}&3p-h`N9W#=Jo>Zf~KR3&gmZ8|Y8_l;}SLXj* z0v$+R&+%DsGCj%fACbMYL~!9WSuGbcU3hzOBE~~O*n=%C*+lEHm9b8PzN^N&B83P9X#`{{dlHhE!E>Y zG&lKe-@fOaE+#RFNhH>6T*VW?GV5IubwO!iG00T88M&R|lYbDWa3W>Vw(1Ji04R6v!OC6(28y7JqzfvM8>$=fUtIC$(1t>>IqW! z1#@i0`?NwuBl_=0L&D}6fo~i^r@sbgtQJh&(#WJow&0Vx^vKa9@}gju8*<>KhihJ zSvyxi&`r?8^|akQNyo`j{a8f(zOAOK@6;JHtR79sgRZsR_M7*$MjW2c8ZPiB9_^_~ zfO$IQP>>%NG$it#l;-NoX{8&1$ZD^%Nop_r4ciDyN4(7oWaqp7bkk?Ay1UoREStX7 ziQ+0op$09FPRmnP{xXcP$MZfp1_YO+wLTDLlv~b3>g>CY0g-=+{|)+orTnkX(BWW?C-qsr$BhlurAFOdEJ7Q zcsZxo_;p%jH^x?pQ|Umc?b@lvnV-^t<|}C$hbJOh`Kg0h(@`w?_>zj&@Uq{S-Rlvi zDJi1#l0l_A_AJaYx@L-m!8rBAtL4RUW-@Q1+uyPFA=#Y|@_Sz9@{>1ns) zH(EX!{yN@RUjkX71F6U6GS;{|q@%&R6i=7ZByjx^#Vc({h;I6Dwqyghi#I)6rUXqZRZ1NgL|;$Oq%dyb#I~HxIH( zbrjvP{o<=3;Khn|{&JtU_pMqHw5C1+dl-55&}(Rc<0hgV3!Z^JWZs?5vZCJCm0C_e z`9mP_bKI#PeU4S~&~9WG>~%o-r1xZbpLkldtKV7>GL*`Ih{;j#3eKof} zBwHpmkLlLt4ouihwjY#Kq5p1F6C=T^fqv2sY=zWc2Th@Bh9gq;L*N8RRVKDy4rJyW znqZeDp0w6{zmI%*#1a_*RCNQ|Sh@C}>W~ij;ELtc5zz5SpWDf@8+VSWiEtl>{GAUr z3upUjit-n8a1lF2)W3W=`$2J}Bs6G*eNOUK<>rw^n3KyR^EmLAHd0h~VfQu!HE zD1x^xID2pn58c5RD!bpT(*n25*$c%PuHl=)dM~37MCI;v7>wvt{xTC7N?2P43@x!+ z%`z1wXm}s`gl{n%aX$0n>c>{hb|C2B&ylcedHWYWiwzJeGwljoJ{tT@Z2?i|;n56yzLeL($#4wyZt{ z4mUgnswURi*+`gQ3+T~z5%m&qOp3aZjAY%?cbj6?B;ogd?iTL&dP8BU<<(|ruetK2s!;i@-PJtgN+taQnwYC+T5wnwKp;CYh z(OKNvsVHbgjb{S>2qIo|0Pmqa54iXs9b~^!{y06+y4_E1O$~yBQf6WVJATbb0Z&At z-UMv6i^=4l9|$dz=du)1KCJE99r;$k8Dw zkgi7jNo;&|T>y1tAm~-vV{}@ub|&Tr3e#aYnW zZ0W#3;aiqXb-hUbPF-7S-e7%*uwpq+fQ>QYO@lvG4hWU#d_%2v@r2gqobF~Ek7pdK zPv)OCPaFa!8~%CVBpi=UwZ0P}#VVXW?*;rJsP|~qhs=fk$d75*o$1R$)SCM^ix7mO z=Sts0Q*O7fPI~2kYTos5_nD?j`Iqu9)>qN#C~BwWP1h{O{2N5ZKv=dGitxM2^1f*n^jg3TJgJTI2;wpq<;$4R47_%W4C}@MyMU$ zdcP@1M~}_(2-p@rFUQh(5aS@5QL6`+UbMX|EwVZ$8|p5AAV@cz7}t4*@d~kS5E%5D z?&k)fI_f&H$%`1G_Y}*cpHaf37?s~deTCWiRK+wm^FwXly0%;XwdF7MEo7%_N%5dQ zJm7k_{_lxY#@GsXdC%`O;zp8lvucx`D6ZWQEOzC2fah_t8taPwaF>r{8m47cQkJoi z-dc1y^~=s&)QYczLWgSe55?%mV5D2pWhb zNd)DJf(0|_JJHJTYc5p|7_2DhmlE_UmC$ufJ4Pv!8F4koS~?KuBmV#DyoRg)JI9hW zb-aoOPQJT3O0$8R-k=JmLm;QDk?e%D+hb=c;f8M5UE%!b_p#8q%7q$`HJ<+OS%Qv69o7`$19 zS+RH_I3TgO2ZQg|{+X1bjt*Ea74KKw51!vSrE=!GE1+~-&PQ{f2#jsC3%(27-{oA$ zzFs6N7rnCVZ(pR773g-Puo=1Y6KS|>6>C+vYZ1nASBuE-(A8XLJS~sYOE>Dk740bZ z(aE*58hJ3}u_*g%n6Z4i5H=i04C0D9oBS^??QUgbh?W+!wZiTb(~f-&g=ZZL5=2a? zfij-PHOg1QO?LfubAiF7?e663)=EJ50eQ&JN`j#xtq^Bc?i-pMuylu5r6&bnf}khk z!6(y)&{1A{jw1>zC+b!)h#&8j)l0D0jy)Zz_2NF%@2V)|d6*rJ^2Yd> zD>&>TxCHxn!Buslc^C7TI>K_QW#1?lFB?IWpBnVj=xDWN9@|xpTE-KL+IWv-O+-cK zI`^zU0P#x*KB?pP_{iJu zTv=7~5N)HfC6%Xflj2#}**e3(J>5%sv+DyX_hgG*$Q110Y{3WIvJVk-F&qy0{EB<} zoz)oqEC}fFFb}Ci^>vx*7oPgxhUF{}{(p@4`W%uqjWsUj#~W{__H~U-+)P$L`l^|s zro4q;0+u3DLpUDnr-uo%NS|(K13#fj06!#!b>9o%e!Ls!rY^4xi2eXf-~%j6gjVJm zWPQ-D>>5kp&5bV|Xm8KTLzX<#p^J$y2#va>cQ!|~!k(MIimJ(QG`kFue&*FSwE7|X zC6};!RtQ#r&(*~Hpy4Z1RI&IkQ>dI;iW}qDiYK4?GI?j{hxuIbP9PBRC`#}H{4ekr zlfOc}sqqo+f`{Z1t4yESYa&}FZ@2v@IpMSXeon0ByKh~Z<2LoL$ zT!FWDos~RC{ImAphZuT0*Xt~`>%OUqD9W|GDj9W~<=ATRy&MsD#l$pCceYhQq4W+E zmAA)pJc$&^k-!BSrOUs*ix@pjR)F*OCBDma9maum4_d*m4rEvvy%@Y^wnUcHM<=6( zl-jC;#r3Ms2X#_=54HO%PDDCldomaEFhIE*hm>`!)+9UrT?d|Nx?B{P!O3HR=RQfJ z+!Q4Fx*~F7qXw!c|s+8aafLLz)HJK-ws75q2GV`duwD4rawb4$LQ&Fi_U~#6U*WQnsTg2iXjb^XD;qQ!vyC_K=bSb|`@n7`; z0&^B#XG!!!X@8>|_5fsjx6oL+6(~HMv zkwdU&0pIDumr!NX@n6Gd^V`?8=3-zd-zH0%k%=O}@{r&98ApCT#4G0M-aXFH+N8)j z4%9T+E2o3)@==p?l78`awq%4~xE*W##f8t#8da|R&u%$CPis0_d)98dcYar;SWa$i z$=3+_oX&2%)c8$$YAn)&1z50gb)3u%#*Ee&&j0Hv!OJXT9Uh{^kA> z(|7mxKb0#(x=EVWvO}3TrfIFa2Y*!VDZIi49d6XX*Vgn+2Cm{(guxC&5>*`fhV!2s ze?&b*FDV6emC>WP$+|(=V!2Jvl(%0<+CpL#>B4ui7;ir5?TA(IZVfyTSb8Wfe~ycr zEmGP&$d$NF?Q~(zrohw}ZA%`SpfpSOd^!6SpukRJ`=3G{N8Hmnn$Yjn-c}JaV4-D}Aw zcD02+YCg;zSqZsap#ulh?gW48@i4&!R{Aw-rE2ucp|%r<0bsZ@C(t>KCyJ0$HsJi# zNu+qrgJ?0dxS-Q6&-QeL)>Aw?&0AYHt1S79Y>GPx;zv6M-)o1?((uSee0NP>M49}G&Zg)ptjdts?=d7`$H{hzxZ_u$!be2 zRnwvw_kol6I2jA-ImH4QtiJQw=$Fk(euN+smW( z6`ge9Cu-OcihidaL@ff{lt$wf5RgZDSY{RGBu7w#tMcyggd~7Qh${0jXAfjqy6b38 zdPi?l$9>OI;`@>{V{Y5?UX_DlG?X$8@ov%VZ}N;A@R`R^`yqSLmxdm(Oq+3Z%dfYx zI@RxOok{*v zete#@wGrw*;8|auv2V`e3b~(seQh4v#+Q43al0(8{y{&mAG0@J4Vm~VtHi7DKL_bP z=jH!(W~WIX1xehP8BNFwOuf0Q3TVGrGF*555B=2=&TB$^O=|W>oJ$0@ze7(R_H6f! zWqUjX4JCm!Xmw>evokX<;KPLrL$C9&q5Q&mX$5NMr*HN>=ox73Qq-r}bJVv!7ttvF z^vOF@{f8Eiro&}}(vvTI^ioPN@(!RG1=F&dZ_~s#2ZAe#A}`8(T!Ri_1I@OBLXqKa zk6cE=d|2;8zx1yoO((Kn4JV0*I!UPEs=DTO%@*3zqs3j6ImoP~DzuJKOzG0Q%%4#K z_8cZheFq04mrSRB6bSVkW^sslm6)@;X?gw4bLusY#+CwrJFR?_;te8dyM|vT0PTl> z3efMLh~V&V)e!f|Ph$OkgY@*2}L2NF%>x$IW@|t^>-~OxE|>2=u%GsLJnxU&{dT+F9;XDPH`Q7W@(GeWZhkMv4NA2~#8t2%7uGYTBoq zft(>1i4wSURLY(Csaeubdh)BCkQO0Pqb5A)T}{Wd0Ab5^Kn6SwI675oQ{^$bq}HIq zV~J|o>LH97Fn%aaWcfTmdP2qN$^V z*tu9;(J>-B-fgw7Nt^WDr)%+8@~UsNH23j=172)zwDVHDWimF{rEb-uqeEn6YgTh= zW^Dv1@6s)5WBS=XdESrlJG9}~wOTGJr_srL@EatwsFdY9LK4qol?}%oC?@5v;KX+6 zKb_Ldqq<@|8gw-T^@hsNzi-v+!Ha1^|BNZRscrPylr~@E{mGyo7k(Ydd7lxm6*zGM{lw?uua$8=<9Vn2 zFmXhEuBW5r<8VX4PBYb=Em&&8p>Vo6=rA|ieq^MVdO?@p#ixC9?pH5L|5{%ipwCGo zP<^Jhwm|3^fo;J<-__Td@k8o&al4La;br!u}N`PHfii^ zql7UNKq+aaxTl}g!GZ)}71OjU!%(sHJXC;LuzhjpT;aGh_j`>)3-?ue#j0ZdE1>bb zJF05jcIaden!QGGJlN_2vWa5~*>J2eXNh8@1h%_GUCja&zo}+I3G#+ZZZ(F#2Rxi@ znkjI|YL9B2>AD-IV{o>Bgv?RrACSUBXB<*k{9{vH-`AGbh*c7V*uDb0uKBeks9p0e z@-Y*={T-(IM0HoX!S>aI3?b(NRp*$*O9 z2bvS8?9iV9Pkcw3VDRGrw4IXE&zj>X49x;19?VhSs^GGv+C~~il#f3hJbCOK=Rwb< znB(7gq6V~ZdjV@yX!*8_(5o1wF?w@BI&6iyyU%(`4N zQRMvZDS9cLlsbK|1de9)pbmNn=M2ty9rk1B%7MCYy!WY4g|TOdDm~s8mn0T=?;<2+QgqO7#$Ow*7h^3cioHc&h>!*z&s=zZp{3g(Q!PjCuSEl~>?J9Ya}5X`B_O^xxc_nR zOqSyp`(H#OQ&>8lvtj-$r(99$1h-ejR<#`2E&$b}@_n{t@vT1EF!1BH<=Uy+gL1-g z1v^)>p{HZ)A)UUMY(&imXHmP}HH~+x50+2P{DqmRb-Wjhqu$iu~ z9;309v~=ZK#gK0OwOGc{^}&d!NA!h_lAV<^MwsEHs>a)TRSg$}LB2ST*I%o$<}z2^ z*Mg2N%WXVz*8wuxBnsNTuCW#)vi?mc&r1JiM=Ur^vG`q*e=s?bz&4im3g$grsBRv1oaDJ4zsRKzTh7I?5lH)X{ad zV;GzPo`V-)DTZrx=C$B4H^yM$t&YfRFS?)R86T@lS{CbmU>xtqP!Oo8n$70Dx~4xI z4?vvlP$5a0DWCx^3yoma5!TNqcDn4qA6c#tX;^ZovU2A0wu-|QZ*!;X8df1oq@koL z>Vg5#29Ow^NU$ttELnps0-BnFz_a#(nxDn@<250jnZ>1fz#$=uYA9+EL5nRe3)~BQ zx|vms#liAcgy2>6wN{I(k5lep0Ma$-IV`mAG>?<0-n5 z^`5Rynz)eZ{heWB&1o?D?_{r$ET3ZAGj1L8RuNhxdqIv%%|S}im2ozBg`K5FGJ0B= zOB{OJtG@Z9uG|!E@^0IcD*n7-5uoDP{9LvZ4@ryFG(C&+aYS~*BA1ws>4<&M?uHBYp1}?pKaaa=z*Px z)GwFPzeIrjxRsadeuVjT1EjV>9u{WDv-o}Lqz6f@UW-uaW((?k z!Ur152#dTTM({`R%|**T2s(&9HM~?QS}q)Z>ABu-|10Bv>2sDQSdH0h6vqhl_>?~L zqklh|q!hSgBY9ahST9|1i4oARcl(%T*^17K*`F?URA=Qs^>0w+#|=dT?W9##u)*ri z7sZzgf_<9VUB2tWAlrPMJ_lW%?yv@N5w1c++YwAa zIvG%n`%@?m~M?YgR>{;ZTAV!qJrR}ht_c0+mIs0x$Fa0ub^X-?!9Fj31 zevcAEdXo)I{tjYB&cgu~E($i$R{vP93l|iU$SjS}h-u))iBg3gaaT*vDjd(y!hGM!NG@s`6?R$tX;S zxsrM}`7-nMBYVkh07|Hjw%&B(ihTUFh}q+abDswdZQ=RBBfvkh^|!-(yehJqm48MZ z=~7yev7O^!M)?%RlT8SaNt5WpmkGS0o^E?{yWE~K*PKZhd?%_-8*8D)lic?8w_)Zv zW@5vZP!JIER8*xY!)a%+YM(w5a_Eh2^647(Rpq!aWqW|IizH8yAY%o#C<7a|iT>`} zp;Sf6=VuIVzk8F7Q`oi-|5|egZv8ixN@sF^e)Zm$4~)Wf^RdImh}jNA|Jrj7C2l=&Ei+W<$wYqJu@xH$jT%qt(2MLdf8&sJZ; zpWiv_G?M>PdJ5f;xm1!hz2*`OQci!s_++?L*m$CLn(Oz~kxfQTwzoYKCaYe|So8{#Q-pAdiz%4wb* zkRK1oGA8#t##|nZddI)y6W$43DBzEuHVWODrSloqs#~xsrdgC0xSNb(rx#P% zg?3-}$;T0Fl3af!7T8FSn%;}bY4QpA<{Oc1>s_a>R^sJV#wSEwZq<%hYM<=4O(*M) z3R_@`Mt@kay4%mY;X@B6hNC-Lt=1v$B^XJ#$PUkP&w#|HRVMh1RY%-oeHHWc#c{vS zH7o2mlZ6hiS6o{wmu}kEUs*<8OARqJm5x(hZ%ou?hXYj+Ubn^kvH)}H$NNh!F}a#- zlVrF}63kByh$qO@KM+{{EPOIE2-EPCl1Bkhj;o-)>FingHYnsTT&_6nEP%95NH5v` z_T=|zU9q9wql%EY2L7RF$Bb`Cv)^8Ot7_THE%l$?nhR>+A>}T4Z-5CWfa50`yr26t z%p_}uPZOMf?@EVPZJZR&H52(%c)|nEUci!bXa>4Jf2{78+pK5|yi?(29Q^X%Io7ZB zyB)P_rdmW?5IzDPA0eL-Ng%=TnFzOAB*PWHs$}w1x;@lFjtYo5Qp9-Qn|4`1j`0-4 z$WhI)n_QP$9E2jE&z=5F&j zt7x~P?jl|sDnFkAq?gTmRV~DUy-PFt#t#0f>rO++uLWUV{Xui$+ypY%(suD5D%aJ9T zXBUpiMkUG8)0$8luNddJ-MBm8zlXft&USy_MN@)3L%(R`(4GtTIDSvzDMlYUM521WYS#YZ#$fhH{zjdWUXbkreK6do6 z!!;)QaZ+&G@DfW@1l}dMAs04m8r2>|!EQAIcCL%4(|%McVnI8^@0&z=U=fqa!r98d zUxgqJN)|S76ba613AL7CAvZ*1sbg26dXmN^F?Bl+uN}t-qQ6>+Qqh)q(2Qy--?8bS ztsskfLn=gl1kf+;?l2c|qn+}m;$Yr=n04Vvb7%pYWfB-_sb#Ekxk^dpb=Q#X(+49- zqh0t)o*V|qp-j14-j2FH)gm`Dg*z-bVYt0$9U{^*{QCAx9q?e5*HbiTqqV<4lS#^n z3hjRR=m!qqwVal15(XzHemX9WzMtBKv!ROVazW+>pt&jb+xs}ntp=4$IBjV=@1A)% zE%Eu9^^7$e2ig4X3>^|B>!$1Rvd^> zGe$##j6(A_mBLVeT(k1Nydw;|d#P-<`!le<9ztEfmdb^g7JA4Jl~p9Q+dnNvqSHiG zOAYLa2{PKLjI>OGTM1LvQ3BQ5)%*VoPpN+KfAEyyBd!mKDGzsg*L*|Gkc5Kv8|>Im z__VPoH8Su}1MxcYgonxzV{lqhzyaG|Fwa$-MEv4(DX$IDb1SF#LIBPM_to$HwXb3M z?~5O6>e~povj6XvZ78`1r~$;)_rw9vLlhZsbqas1r~2$fwm?DL7tWC49&T|2Zn`8@ z6OuF1rDs*`j(rz99r#qhbxJRZay}G?>`-lXwyOjuOHPBFpio1ekau`@bMOdDXJ)?s zm~tdE{a{`FZBE+RKsAyigUyd5KveEG%og!o>R8MnZp$3|7D#}X99|bkDn%TqwJ9P` ze_DUP8N(7t~}~ZxE3`X>8T&8KA8xG{n&#d7*Q0egwMU?=@eyeTSZE(pK># zF6po+6Tg0c6wvG7+W~zLiuFm_OY>V;G6m99Ev6Tr_mVuaMFyh>6Ph;lK!;6pPkL@U z&g8jp5hp5zgt$X%`){-C4a-YT;crjgK%TPRe{izq984 z7}K-c=@BsDu!#G`qFI8Kh8BKQml8bHbJE9CBlT~cSHcCDr<^;%nDxjA9GvRO5r+MMhh0iyKes%&8sqpL?yo z_rB5?EK*Q4a0Z0|6q$%BDGzlbd=hjM0!8i{5~R?&67$jzs?Yf7nV<(x{L&Pz`lOPl z9#Y*z9$WrvKo0*o(|-4_p+0~A-~H}=+Sj#|+JqL{e+=|OG~z>M)WT>sguoqXo`myK zv4<^z*=1Qm@3fkH$Foj!YGQ_3*0OAC^@QG~s?AvHhL&gI?7fP&p}%?|!4ZckYJ%=< z_Y$h|04cSHZ=aii?b^d}}D_WU-TAeqKjsJwMkOA-X=-IBbYernLsdXYT7~d3TVD$^L&6}N07NCN% zIYV5U(X&gkhqOK02OdBRhpFM#%HnC**vR*O*szD7;XmbQA>umt?{#lTnd z*}KnFWs@!)%VSI4HZ-iiMmBs$7g!*iZ+F0D#cP~#vhu+EpvXx2mDpR!D{}Cyspq7K zS45CnnCkSf-k1>0f^a@n?#Q{6Ae~y#ps2kUqLq$Hxb}K|w~Mbn6p2fiHG~bw#A1=24u)uSusJ(eh7r z#gcw>Gz&nMs&f%-riMkb3cWUu^GqkO)_wE9yeecgIVm7FUTA*~S zD(h|U?b=oR)i+&^nC>T^zO1kEu178j>B8`%e#%u4%*LpVCsQ0jXSX4vN76%~0MuyR z+~8hQW7U{%d0bNCRKpF+)b(4fdd(JCrpPyW7f`7t`;7Q^(Y>B99#5oJ`pA|q6`BMh zE%>QvuRUzes8W__NI98w!}TJeaYR>XY6;DLy7Wb4PyxoCS9NH zJ}ZWWjt|abaq2_!P6*Hb@6NV!ExD`}a_NwFO{^@Bk>-bY+t*?F&GSdJ9i^9J(d>JSGhx~7tT?a!#6EjYG?Gd zim;*R9@KPV_p^+H=FTHqtPVa9Zun*I-k*rSdQGDGpOsSu6)S;;=9Lyp5n{zAUuO@ z5XRSD2`_KEE5Sn|UrYQsql4c^-ns$2iDB4{Cr@^K9+2M5Yg z!%dP6-OU#_{oorKo74{dU)Vl)s}a*iM>6Vx-6P9K?L{3hV_*P5lp@2pyY4EkA7K)8 z3G*_{SWPxebJ$5FZda74%I64>7$|k{6zyUq11IvOdxxVL=Ir`7d`nVQotB{m#bkP| z|8{q$=vq$G2*7ju4ay`??!f>pr#{ao(U4Io$FRH}Re)vXgpk?KMnu4NAQj;KjG3#8 zO#zPgLME&Ac`M3XP{ZoV8w}$f8u*4d@X4?uV^~ChfiT#W!Kh3enb=lu|;@%r5?JRxmW2u{i(^c(zdJab%`K&n+vxOTB}^MxZxQY9u%r4z@xo=gklXO+FtAG`mubv zd0@0d6`$uCpB!$|r+`B5j+z*(<_a~2|eByU1X z^iuQ}s7p7#q?GrYkjnnDRAJ1T_~olb}7eP{eaN;9?+T^;$zBfVQu)+b#lq zeoQTBb(^pjVM|?xpKgirjhVRKt^4zir{VbH`>Cq^gjc`O5Iw$)E*q-?^@U_Oyt2ul zxiLJRRlYg}%xLu#j`IrG0&)_nh68>o;s#l+#_4(OX2v{bEcI1I>uFeSr`>Y6KD-vb z9Y#~ZsD|!LuRR-?eR5^rYrnj!+8J_A^?&~K1nPeh%{8z;f(zL(FPHVJt6>xnFkGCOp zeZ1Rh+^*U$o*6x+S$vcI{&!c8Y7vp2w4^A40z~3;j5Bod6~CDWi@R?7RIK@`M=ty2 ze9buGpYt3cnKNeIkyPr7ZAsXv-+Ws+mT)px7-c0oefO}?Xnf%*t7)xfVt2s!Fg+wW z_#Qp2L&2DQQjWDAtcyW_cr4v>z~{^e=iUOjU%u1rEEZNsGuDsC5a(5poT6ni69i~3 zFR1xC5T{0I%Ak{a6nCA_lX@h@G_rQo_MurfzZ};14=mIOnEzmUdSCdPj_=v2CP>hI zL0K7R0hX~qNZ$QuX2PbFLrLMo0sGKt-x{AoNzEW|`PQ>}rOvm4pU}61Cnd}&u&e`!sh@2TqDXY|TYkP$qGoYOt;_T8Y_>39*>z@?$uV!8|_ zp3qtDdD6u<%H@Q%ftTuxdeJx{iP_%I)sJ4F3n45wgfe|ERP6>2rd3 zu$ft6HIAC&kLzCkjsE>^ZQ5ksoQa9Al}Uv$cMV!SYFB^a0@s6SbxtVglGp73zf+~I zEW-XhlJD(nUCv{&l#}T~O5`YW zvvR&EkMR3wIK)jeamxr?uMb`j?Z3;SYqE$rZaBZStZS>w;?B=W2R;?-D|CC7H#ETa z@PMx2ZVaR^EdA&dotSTC2d9<(u_aBP5aVpnV;*M}iM+vCjnOmJBJ7VUd`~^S)TyjPLSZB4f zAVzymUnA^pp9KWEn1v6k7AHf6^Sw$<(!8oRWe!^Mh&alLFSb9&$Jm7gHsXTco4<+@ zi2h6J#ALv`BK5^fGY2GwWJC5!bXnLZqxCnBGXCPZ_F#60g9nL6hHM#lFsM<4lcb#m zMwo8x`&V0LCwHF?*^<5^xV2ojitmq76CS9IA07X+lgsjn%WDQE7M1`wzjVrKO?tE_ ztQ7BT3{%g<+*n_Gm;svJ>T;i1Y%ngLek`KvROoJDT)PI-^dXo===wua)QkB{W=)Of zR`iy%RKfQqHOJBxPdoq5x2%c$-`meYYuG7Qf9lW0y!})kYVxkl_#n5d-%iXTy06a4 z9eKv|XxYUl@YtcVkAC-}B1ge*u`b`~K^%7wgMF!c@g0xnv6DqDz5eNc^^8ZUX*d83 z?sOCl6=j?I$&9n%N$$wTI5`O>u4B&0X-7%U)p*3BLw2^%s02E3z3yr~alu@`p>|@; ziP@eZ8C`1jex6Kyp?n?6j7Oyw20k*x9zoLIhDX7LlMHvGaxvL(wZ%Zk4@t`J{dRjB zxNzRr7N7PAcA7+OmttJ5B8l}c3r5JR+cCrQ%oAF#EQ|za zWX6Nenpfoc94lRjtL-f$SZH=v8P0c$7)#gBI0Z}>3irX>=cr!cZi@$2Y&r*Gt3J+R zOfHQlNqI~sI)`|mB^tmUtm4Sgnv37&m%BT^3@lW}$aUJy`YdmL>W?dq+D@Lw{z#l3 zBhMHWZ(I;>tTh|$hb9;mM+2PVx7#|CW9;5>3sQ{JF|XmP;RC5FYHM!-$)E|PjG#hy z`6i;xG-H%cD7s*rD73a2qkN(KRMqaeiIGgAPh@0f(p&CmgQfI~(op;EXXzkjy@5?P zov>}N9_5uTu{`3tbNCk_(u>x!!aRw$T9`k7i#p7u;}-SvZVLRU(uY_)qdfeQZL-9- z_ylC8XzTm?p@P>PG{?{@ZLuRA1yumV-3YU`{-(hL#&G6c}Y18z_*!|abkd#3o zhY^~sp`FxI)?!NQ!f77mmF{uwwbW{B4c zGq({xa9`GWuY41=qhb}yJAPgKZyNp5r{DM7*#(6Hwv~mDIbM^-nGso^x*tm85GYLR3~o30lu< zCvFQW#y^v)$MTnso>O11E?@WWuBeceytgG= z?S{Px9uWyoQL?ETn;kMzk0N>(=u_MfCR0&f=tGjCYq*Y(e71h7o@{0OdMQ?~CMLja zwwsb(uDrfyw^~1YjYKV30bE%IIG2?1uxu?VeNGX9fv{s@0>^Tu7P14 z?$fA=IhTd@Ap|Iq5N1gEsLP^?ioE>nY#7u>N7puo*0yBHyRR|WsFCvo5#5?w2DM}MAHh=Wv zup9hvS(LaUefB1nIQ{vrJc{=G`&W)G{$1_<21B#aj$_z3+Gnkd$c9C_-n>bBNxLn9 z6Lyem7pJ@<)Jd$G(_UhO#Rhqyk{jNnszA-|@Q~ci9lFTG-KJgOt!GuliD$dz{aOEK zzqD2OPujn}k^bsdQ-RbM%%6)$tdrlxi+%~$H19>cBuX~JQZE%L?w$=9p>RouKX-b( zGV2p=K$Z0-R_nRuYLAt9wWOLy$ZSC5M|=LVQ8ksA;&;BI=)_oi3l*;|hCBooteH&u zTR%PNkv6cXeQ{8M2Vm^@ZYeo(alw!QtBT5Y4w$fj#<C>+v?uRZMIzkWmKTO^1tNZyQv$%HNNNvh1()$T% z>-g)DL&SVsQW8k{X@tPQE4B{ysdQ|eou*hbF!vvYL zU!#7WjlilD8n+vzvlIE6CAMrx> z%Y;nqKk5dnzHFZ`t+XDx(RN1ez`J*sn0mT^r;J+`{2ro?8Wqq;4iHxHXf8Q15|rSU zWnyiN*;y@Zi935~CtxrTvsCAeb0L3;2AC%lS=V z5-4jq&-6zx%sv|`Zr=DPC%kATD$?*x0fBSTxJ@j=1}!P1a*73cg&uhb3%dqpGEgi= zY_K-`o_XRZN&SKg*aseCxD~qH!oj=h`Xc11nsDpExD2vPU5(q-QcUES;e0iX3Hy-V zXWio~=z1I;$+V^HY?Mj)-hKk#((#IG5}z4Y+)*F3Tz;y3XhK)fCy6)4c6_kc)!k8j zBUZYfs~K-BAJ%1AuInJQc`w)T=AAM`-BFY3+o|AbxQBdudhd}S zp49|Y`SSqo*hDCjYbfhTYd6;&`ieXs)l&dDL{{y%Z{By$Zq8^>2)4y&^dvAYDxJVH znRifRXN};?&!dNR>*}NNL?EHDIrs3?j9(tD*z=E9%}(q8+P|#-vww9)ys~ZjA!QJw z_=p&te{-tT*~3L|0}_OdSAO4f3VCv*IPzY{24Oo0(-A;WD5M3<_%+@|Ip_BE_YszK zaG#H5bcFSBc=?p`o%=mhRjhzKvW;k^Ua^Trpw5HJl2|2@3u zJH5I_4e!%57@knEdY@Ot9yAk2?|VMBpu|Ja>K25&E#%Vcv+2LRri7HoLNu)8+wi@_ zHM7MLz}Xn2fiY)Y`ec_91gTn6GtrBx@SE)76u9VQiFk0gGqh(>J&Wu!(2Ko`&Nl|E zAr5+Bd1pyf8G!t0I3qx+u&XE^q2!h+dlWZ!25#jlJhjkyWL)D~ z(_T0YTD%TE8u1!X&)}Iv*PsX>^~-xwV~;`9@M78eqfe`KM<6;rT^YphdW?8U3qaJk zWQL@>;kO`z@i<^XfzMxt>Qa<0VnDIl9)*p}H{Yr-0L`xFJ&1N$%f5FCG^Wz8pE18R zykG$f9q0gW6}byfO)dv4(1{tW3HSL!((Yr(BD1#tgBg6yxHVKP7{zd)Oj$(?)mg@e z=pXJl#?6z-y}=va9vw+%Hw_NYWT=$Zlm|r({`1 z>g1Ge3uBHC6OdrcDVwmH1s5InG^o@s=iqM>N8(<_qwRZI?K!up0|yCgDVr(tDZj*dX*C2v(1$uRyq{0ebf91XoRG7 z{DwVh_S-_VBI%&K$$&hRW*%WbM&wbQSOf5eZA|h0cq)lmie}8-`4z~18eZRSKNj+? z-`^I()yn}MP)70jE!R3;q7PsG9xcDY3-j)a&Edsg;;I#!+1Q$iou3hStHVQo#z4;d zSleMf$TpV_N1um-9YXn|Mo4u7dec0dzmmKR%AaettZ#uZD}xdWliZ=wu-5< zi;s0v)aO$tJ;sN~$#<-U6cVLvjx>AD6_(BTR36ZedE4h-=x*b& z{|3X$iXUIGsb<*bS}A8S_HNt7U~Ydctst+~w4ij$(O&2?f#o|Z8xt(hH&)&GaI{I?2Zb}Ro=;RHX z3I4);BjMx!DShAnA=hw_`$|W_FUPZIXNBW7+lai8PYp&X-F5H(>`Omccq+15FFkFrRm`d&)3 z`TA3QN$UJ^p6~cJ%``PC9Tl4~GMU1hFrER}HRt!7`Z!Q~t5VWano*&7UGooeoO|>* z!2_{vy~L5>d6NFBmwgti)I0+h)uN@JQ2UgXt2~ATb$H4ziOCcU7Hj4|re2^BJQgtZ zt-PUo?Yh@{r&)(ImKa;1Olf;(#93+tlO`_Zmn0tV_C%8pf6aH$NM%_Ky08W7W6&mM8~l7~cfr zb3YPvIYqo+gICW!f{ywId$3hbCP3*MHJ0Ntr{cktIKT~aDg|AFQxony>c&mb!ZoKd zUQ5UYy0v^*fo{F}3%8Wkr+plb zwns;#^>m87l?fAmt1d0;FeWZUhxh@rub&Qzdi+~f*vIR`17MxUOtfM%f!bxDat^8} zo5Z0)RS8WvDR`Xpcep5LdSo=&$czw@d-R*H_P1kVeqSzciY2eWDR{>_{_z0;YzzH}pDqk~Y@I1IzHCZ!c^A>kR4p ze;=HWw0q(mYnpqlyoUw(8|srG7|!;vjL~zMd-WBovklCuBrT7){SFz*3D;ayGl;9< z$RoC|29zKrw81X^{b9Z%BYDK7IAL4b9W|*=&7YPhyu7s;bU2~>Fz?%i*Av4aMe{vm zzIn)nj4R52(kP53=I(^<+Epzp-k2-OvU$job$PE|mAt=3pmTpU*PqLmk9JH2Eqd}P zdC}L5u8!#{xC`E?C{IVd=IDr{@nwF=jB|Qbx3LOQH9|KDYw~}btV=L?51T(VIl{lw zP&Xt=?t~PK4Mzqj8jw%6<&O12a&AP}Q7N7w+o`F#qEJUM#uU`Do3q@cr6sjMkhzf4 zD^JYWo|>4A2CS4_9`8? z^b+&_4*oAI=P-Ox97c*}7Hv^6NW_t8}`=YEE|jIfhf3H zc*k%~6!JB}Ynh5CpD;a1-%wrBI-Zz+8x`E?MNJT@G$~qBspC7o8QQqt`PEm`sHSRh)8w$afz2rqflx4 zX#vf)H8(qZ4vy?@>f4x`KgW59hP4RTj?`+YZPK!ul>CQJj~fOqdJ#io&PO~p4N<*9 zN}e}$)EqIX`pQ!-eUT^lr;TdjO7dPCY!YRa>(K?w7Rg%|Z#mtAI`tb;&Ycit#wpAm z4MhJAtsCYyK_lQLJoR7BiMIH%0;aQhM9aP$tluJ)zk0)T}o{r|pjI-E8{(@hu-uUgxNRIb%^9w|;sc(@@;x77D^9Mb_|tbhM1k`n7-G>0XNQ{iA$-{ zJ8AySV)-t$^;?aw^}(Eb-qD1z)}-Jnc>{~5hXyZztwtCH!<$ur2k8Xo z=*D-XMC$qQ{Ct7yyslmz0GfT7IEGYhQBmlxTuc4G~(N`vL)a8ioju0{37#y^z{T`Xh+F3MwV4Xu$p zoo2I^DU>*xDjXmx#tVKGQ~py^a5}w4xi&x`-E(JZ;`X#e?z}J^H{|ci-O>mSu3$wi zJX<1Bhllq4-t{;WVv2oAYD5u4=z-M;(NxEAEN2sph?m!sHy64v9(3jWsGjJJC;Ild z*gF1g_xM>`8H$Fx2R(0hZ>=VRF`NX3k@|O;a%`1T+Ps1W3t#&Jh3a3nfWmwhU=gJh zK}!Hk@B^7w!4+FeCC^u%10I*BETfq^USS`zuWjtI6B(Ex3lg>t4bF z0TM2M{Z;lUoJ*L;WSVIGFidye8!iPg&%N!naxNF#W|=FDDDzS0IyV&C65hOaE=w;0+6uqFJ|gEK7;goI&*W@>X@{B4^gK(si!S#W~11^J6`Cg8@xBv*f3ZAwKHo3Y>T1IaxLJA zi6+H(Kr_3_sd46Sgx}s(k#Vg9?@5(>`c>5!?I(habBe@!A5^+XfLgwmKt?6)5=QzC zG^Ig&AZ%lVROBb&nPjLwrdju!H>8Hoa|A61@!|)dx!Y`f$9ANzc8_eHe`r6xT?>ja{c#{3H_gMbo8G1(0wP+(>UHD?!UJIA?_w2@v>8 zwO)#|w75AZWR}`_r2B@68Xt7(0xI%__AKs3)bgBTUXt13lVrQ#A>ofkm& zMyFiXgBFspTCNw%RtR6;%`d+C`9nB-Of!yeP}_R?$j+zxh(3P~)bK(@Ch^p>e)o|8 zDinPz#x^0gpecs7AQ_+$oNs8gNcXiHl99<04EH!iBWhUjdg=~*wBjYk(~{rxCUjpC z(_yw513<3wD;8VV*sRZ_;Z+BAJKbW`^P)9m2I=E60n>G1Fi0>6Hw7~>Na ztjUZZBsuNtW$1ae++oZigRHx!jZ(_M98ysfQsRYCJIGWui@7%+W54w7moOnGhZcAo zZxea}S#tpX>iHy8L&n!|m+tn2PjTi$o5JW2tYfyo&@G=Ch(rV|oy$C~Qe1a-!(U>N zi}T$3^Y9~`{2O`U65q%kq{X(c99F-a7h?UO$gBi8>K#q5q8*hFCX}k=tX}W6YbNnC zd^~`l5Ag6zXyI3Rs|$^l{LwbrFayAqo$j{}MbbEZT1+YBsYV(pRoP<`6B8|DXqdvRCr8^8Y804zpGsH%%Ii0`1n4q3wsOHEa%`xhJF;M?nbs^_nUpUrxBndLVm7;_w%ZYi zAhb@Lmy}G854lLaK`&AKqLTLn_9(+Ar~C@HS+}zCDFz_Y+yWijo}iU>r_WVO$Km6J zTo0sQiZG;y8#^EII0Q7HH+BOtY=D&tGfP>&^JsrT*sMCER{vu-Wr3#VbMJ(!?Pab4 zd?UN!dS4-BD?ULASaU&)-o!JLsowL_J%wqI>Gr11Kx;?`cNI4gT$Ox3 zb??B_^j1xH>T%4lNX<*d$$ zJjOZ~`g%r8N8xspk2z#g780y5>D|Z-ck4MGa_UP|U~oD+VvZiz|7Syvl5C(g0>6xQL88k1dZz%D@J47LKj52lvbPhs#3uv)}Yq!QmM$|^pmjg51`KuLK? zyBVPjV-|_vkqKRiIb4p}#a_JKOZ>C&z*FST``5QE%Z3NIN=eS}Xi6S!01IZ>aiH(< zQ;fJq{-|>|bxQF)SJ&s&fjb?Ll!vAdxCU#UjZdUHo-u@rMFq3NYzCBj={v1b+R^fY z%7QW4=eMYWZq|$jzc)w+zo*|^D8D(aX6QRF-p1K9Q z7QQ1Sc~iJ~&{u!nNZAAHZ>4Vy;eVO7>gFu`(RPR@P99Z)Bjxt#~U-$Y|tpFr!>XjrP*D( zl>X5))RuO%kkHhXmnw}B*OWbW&lc6+{i9HE*Ty->-6u8H8@BZQq$Bzo!4HkkI z-P#@#_iyn!eIFd@t`xnE-YR)ABaSsZEQM+tm))a7|YVS_tvu#`Gy30eiUMNA&IJ@JiaieqFCLGwGZ` z1js$bE2Y_I-JsAbieZ<(>70;L;n}!WgZ}Y&r|Wt0$?}zWC*f<#ux~~Psf>W6JzZ>} zCRQ4}xUI!_GG}FAgZOcoZ|eu1)3*sAYV3>rp$HqziKozc)Yx6e4JI~QfDB@t;dnd? zU6t&dkPmv6@6FIzn^%F+)jcV+Pw5F~z%j*031Ap;vVPGe4Bg!S>i)=p1)beA6I_y1 z9w(%KMn(G2ar|fRJ(0N0ahLy(toMFrgKz);TOGR4rE0fTwP{g;puLRLu3bg6MeRKk zL0c`QNbQ!OX6)47qg5-hmDFB|h#*8_#QLPy{l4$-58wa5aY&B5&hz;^9}nB$F)^{1 zce#!7kq2%r89TCkAqBy~C8e7xGdTLrWTQjP7CpxJtqyF;EO;ObTNcqDX?`JAi8&fK z@FaYD7{MOG!!brFN6V*j4=~k@lqrb{gi@`!OG~V2)@ivD&&E!k3a)yP@twQG9GhSI zLd(qDDfvX#sYkQbn)mL+gcN5mD3;qxZ<+Z3@jVSQ28soUT-@jVX>v#a`HA1(`buWi zn3>8U_T)KYMnp@5x67*gf;d4e=gcp}I@!iN};?!d?+6hJ#8w|-6q+fK?9RJPVaw5c@e?ZIHXQ{z>isg5}0|Sjocqdzx+@FU*DEoa3(2-qzRuxrhDYne@Lhi`snn>%gXZ5p{;!$yV>jcy^+qiO^%i zF)2;ok5jTfPdd;qagM(j`7VrrUww6|e4+qTB|M`Q!ObPg6_m#1&Z1D9M_rXToS!vnAcYz-0TR*5ZZS|Ww=+Nca+1-7PLWpEe^7Y zMQo_7a{5fM4duis#3j>-XZ4JG=pAk$_h`RGvr+JzS9{`!&CrtV)TAD{>g4-V$(KTU zTs(u0d=m>Me(nvD91!l*?|V0eX^5TkAr!gxO=JI933*+m*%KMIJO&OgXBhM%^Z{$n zC!7Iga9#$X@Tet%S)WDO z2_kr=K3Arpug#JfhM~T{Cl!YX0iM4dm~C>BjbSMjOq8{m+xW2l*zQ{1@y_wlEXp0} zY_;S2j<26&%^LkJ9@0$1K8LyB`jf&(va^IHV=eC)26zfnT(+i$&hlCTy#6VixPX)( zcJSegn8sc*tc^&)9=2f-FiBZmZkO*uEzHb>V!6ZYV+E z&~)pg=g%Olpdfn5oH&rFb!(MLs98}C){wyRhB-E_9h zOO=uT6}G+pUm4Z;^VN~-YiSeMu2kd-59KsFE%*iYN*r7n5&zmmu}!|8%1)=XMx~nK7=%mp!PmOt@@X+KmNyxyBS8~j zOYu>ZkUUT|xZEw4-z|691U7cYmalGvn8StaZ_I$98+!f}u<$EmwSpNKL3zgMURECo z>(Yp`P=qVQf>l$8fcDrdd0GXi--3~2{4@yI1Y?%akjFzG?C7V z_X@#l7|h(25*4DlI;0G#NXi5ow3r^=pS=1)+>UcxD5&3DB*-`)znkScTeoraTw%BV zfLc!S^ZUxcHMI!x&fH7PgCm}62w)5Cc>nBf*A($cCcF;p_wh)p$?`2L4W7Y{t%kNH z9Ud{H?7*3^AgOBE(DHQsXIbZUvc8#uMV z{cf{f#lK-bA94Vr1N58#k;PPYR-oqs5C5XfR00LQFFtv5)$=J! zm)&v~n{Hb{BXZtP{L^o4v-^`{d+pX?3Is$QHUkWw|Kjn-(Ht7ETDH3eTYx+aDW-MM zSVy7XnU#-l`xjJaL9!+TAkVzXdB9@d2%n<SE&i#qdYAM&z3UOl6xU z$0?V5luol+De^oC#=l`GCs+IcJ9W)5<>5X_ZGO)Xu#c%lWWKDAw8D*S+cprv<|xR znGaKQ>QdQf{*f9=e$UOyaW_ea&`rqgC%b%m+|7C@;zIBtiEVn-`1^k_urZhp$3^?OL zT$~$7xn%NnAZE`cTC3j6teHOvo0H{mZaqm=`rW?Av5msfU0&EMJGVeH5OL(=P!N|T zwI!8jZEI3;X)S~QOsa7d@!TAq>iF|}xL1QT&s`SN;IX#U7TCuhRSTdbDV7HezsIrc zXQ{_yD0CVP{IfBCDi0RX4KErHGzqSY2q?X@f;T-jn@xVKeQ11EJ#_Yzluu!1%*rYi z^CypjUltC#i9AY?d#M@hqaL7mlS*O?KM2m&40Tf?MXjW# z7(aeUh6g6}V;S~wc&CX*z^G(%wS5T6Q9<1wlKW<+!4_*VQvPERImgRm)1mYhgAwoI z9Vx`-2|t_MK5hx$S~CYj@EnsQ@@x>fd4iq3`TA#h*5)xUOP~?NG6q$7K|sN;+h-;{ zw?BurY4Jvl;CUQUO3Hbn|HQc_>9)`RNVlx+k&L+A z8tZu4Wkmc(YBfQams)vVVqBE@qDB+_Z*eqbVB!Evd*^-n&Al>9-;HIl1^zfY+^>6G z5(=R5p|Wlhb&(;ElL{pc&eP11SwAzxD^HD<9W3^KZ!@QVQ$0REcKxQ_G{_upMhc&4 z5TT6(T;oBiu#=NtxY>aB`-yc%o)Y#P!Ko@4`tM6hKfd`89J#Ez%rg4$!;!L|`B*@- zs$C9g3^2a`LmR$qqQO29&WDSA0mz!u?UWg2;%kly;8|Iy-RT3ue9J!4FC11?D?P?f zq|IhzkXD~WRC2&5E;qJ3Z>%j2rH<&Y_|~;2qC>CtkOljHn5)9f{f83w6v7X+L0xH76AC{c?xfp_{_~-^xX}Yu zKg{v~BW=P`$j=X@(C1zL!*F*GYS5~H0VMOyH-mp$U`MtKFz|NL;c^r_6FaQSxgj?81J1vc3|fc~jhrUvP; z*xliWq7Bj-+}g^_;$4|%MBTQiwB{2kHRTQu8v1?3#@mf$nK zP%)Y=NlC3=MJepiCZy~ihHpFTQ|Y+6XIxUvJVN#NdZ<--TiDyEUP=qm2lNj+Evn$`OayUJgrl-KxLqwy@6RKw;xG9{ zt1^Psl5Aed4kTa5JgL@=5?YXS82Q(zoLN<2;|^zUU<^0B*SHL7P5D=Ps;UPWm%2y{{^Q*vMJ3N`^^wJ2 zKN|qVPIilBi;EbL(PbqgUNiQ=(BP~E!z8l-Tw5+w8|>m%HjsHl%v{e26mIs_F2(XU zTtB1J@B9~fzf>E#UkmpTmWkFs=@%!eKy;dDtA z2lda0Sy%=}aeqI`gQ?oQnlm%d+bzyXxz8fS&HO^V2V?O~sbF^L{AaY^{9>7XeF$&5 z&GZs9r8CplvJ?aBi>l1-JP|8J*E8YE8w$jU%G)7APE~O?oV$hKYL6;76EnB-QLW@6 zFC1j~I=BS*6ND2SL;NHSrPe9x-vSxk37kKz0a>5>^{2yM(^tTz_^O1#tq2nyd9ASY zIR78+NO<5$zHD7$?J66TIa8VGdX4?b10-uz%#jS?a~GSn(Tyhm2`Zu(>=Tmjkvr8+ ze3+?Z4Rf?4q=mSE-x7YGijX}N8h*}1^HDrQy%M-exw(JeaBdk3FjUeTJSjzumg7@k zhJK}b(Q}ko_XF>uZ?IyRY;0r*Z#h89yZB(X36Y#p7i{2W!uDSIk;i`uI`3Uh|8Gge zR4c1NY}eB|G%<#${Jx&;*ZTjxI|5eNa#ew+b0Zcz5Mm``6XSg%&p4@8{cb*8QkalqWyNet?7;6go^lWN&X%o4}eiVIx+-JHGuk1|%XQxTEK7 z8RqwpM_;Rvsb5r4^b!Kfk?(QrXi30u^5QSjRKmrh5>cs5lQ|mgp!on3xvexp$>m=~Y6PIPu^ubX;z8sL=lv^*BJ zd`)diaJ6j)X$=CgwP%i-Lum|JMT*h7sdP85RnuzTg9TbKx`1xpA#iC^LA7DE)RCFP z?Ww{$$UcBPVgVqqscugC+|@?buN*$%+uzd8Hvx!+*n?MaSl-?JnJ=WiI4zJMqX&H# zJTZitE~byx$Z+iN=!z*$y)ASmuiEUXl8F70#LHi+2=oC=@ows&4Y{eW=%FUp-aLFu zA$^55Ef0=&za-DdO#(;AC5Rpb2>+(j*x2e2EPC7aM%OMv`kGbS;dqZk6Zr1yS0EOMB5b=lFi&w?Nmnc!SUs29!IGqqm zI*)o4G1Dh%v1Ck^-C$PYbMVyd{Uc%WlN;L<)LZQ_YG*&~x16%YpHm2+r{mAUU%cEF zmd-#iCfW7~A0RKyLu7PDm8CtF?ut8mH5a{HHJ zrpmyp9JJ5YKLntgKW=MNF7VE>$-hx!l>i6$1|eQQK~~VB#T;pyV*FmRchFawUd5Ej z#w$gg?Po6lh#B&2#i4O8UJJq#HDfCQn7G)GN8Cdxp8iZ6th!Z7tcG*nB=Gk&$FtM6 zNBpYY$@*#E94Q}dLfYO@Og!+L!Z;Nya)yo7L(H`;JBBhZe~=9%?}R*yI@TVj4y7t% zji(fzy0N$|#3`MIDi>{%@cC|$4pyhcr+%{$Bm+ve#N?}AtCqpi|COIy(?9j!THP}i zJttVGafo|84o34yx;=0b-yd_f?0a1PJ3-ruP}RuCJ?Z&liEEw7Q5h>c=Zd^jqV z31e(XuKe8!TJ!1tvs}$P3)+)DG&;l%TgFsB^jmRz1!!*e)`YNqD2lnZJhGA^{m2_C zBX0~0j-5t-&!m-1+>;MIkxogu_9ePodJZ}xjugd?>^NEr*g^sDQ$k&PoGuy|pHBPj+WWxU1X3(SqSR?S3?94hJWAC%Frxdc&+0n={)@v!$ zkrEu#M_+>y_HL8jiD|VD0|ys<&<6>_aSTL>$13lIx#3iEeWOhJZ{&9C5ON1tv4!1WL$Wt?%CJ z@;Nz_CVB)_%5P`2zct`_f$|XOxoJc#ztElLme>%v)oTx=`B(}<4hJ=c@%k^v`IM*I zF#!ZQr17kBR4QRjVZw|-Nr4T7DS*pHI$)=i*#Yp8o*_v0A8MHO=)tag!iWE)5%m8} zQ#Z0i9t`K#crY$MyHc5`;|y@-bYda5vQ>>3##L^wFx4d9DyvuckrPb+19pU7scl$# zOTNF&Mug58(?&|GYRD#&HRJdY%w=}@x9|O6;laHOGdOEv9rR}N$JQL~M~`fT?De-; zma`Ez*~QvliLUmin0%WyeEiMWG}}VR7k}$#PdWM~ndT`Fj?kuNUW*7}f|z9HK6L7@ z+1?Jwu^5xz*V53jPxNUw+a|1bjhh$ynwnfk`moqE0p- zQ@R)}cn$X}xatekAF`hXr`g%8!%c0qsJ6gusHr!axIr=249d7-$J@LLTVnJETT{$? zd@i*$A5~MER&1M9!1KNS+7=JEY%N++hzvQajmFrDo4Q$WA@lfpBHpLYCX660wcko$ zE^<*hti?7@T;H7K+!UUi=z`QZ`H2EH8?Dyd9@RxJ&--#Ul?rzeDb?qMP|XIpi;mUq zKB)=#vTkGZrOPW$xj2kLPp@_R^U5Wix4? zK7>#6PoqOthcb)Wzh+5A`a6}(3K7zyb z!;qyJycZhGp2ih>niw5k-;08ZADJw-JnG`) zT80PZ8JKy81-N)3G;a2E81k_`xZ)T21hAa&H}F$I$HOh)!eX8+<*dFAf@P=d-7GZv z@4$JuBK>o_b)$8%xgqM}tjax_9rMV<<8CWFR`DuQdPPn7ht6piWwjgUT32pa+Z-!j zNZcSPn4{W~@qFTaAR)D%W=A(W{Y5j=iFFCy7Br@R{8S0Ez{U`F)?Y*jNMAuqf}`Ywj+z+7i#(NOsA3ZZ z>eCoj8?g}u%C@8}H5k&fhYM8eWM==5=OppJ806utnB``@AA247-LR_QnGqGs*%K6& z@*$67$v^HcT}bqDo6iyQDsfIbqfOp&3IQH$Wt$M>YV#y^$(!8wvN3nuS>lXg@r>W3g8RW~DxOhrJ3;Mo(D{Zr~ zst2)Vw)vfFKp&Jbj3JMsC_#cs2)^UKO6{7vE#Pr>yXmHAa7c``HS;$*<|zqi4vr3s zmD+!gIX#@W73T40f7g$(qdF{WT%Y*s&fE942l^0<3G9#&tvsv^=N3cMOwSS{_J`o8 z`HKl^T&zLFG`lcR?ONUr0y-w!boaT6us?-odR)HCT+ql$`^(Mw>?I75x`>zST6f-cQ!smyLpA+vfQqmoEPQq`JZ`h3KM@oQT0||B zAGru+Spta>Ir&2n8wZ4aWdKypDIlFt%g?8Z*gIn>`$#`uJ7y)!14Fw zJC_>1UE-2^q1B$RoJO-sFBN{;qIrG!vu=XSK3iI~Yq&Ps2;HpiF0&LvWIYa3Dl&f< zV6tV-W`3rp7Qrmt*8vFp9Q#|x_9Fzdc9%Ff$9jE2_r`#%1Mn}uzUDLQ{@)v?Jt5>( zUuI%$!yQ9%Bv0uvbbC;ZZH>*mTkaN+zN}2|bmUEUAcl)um3>1_(*axuJbgs3S%5l6p#3+-}&VPMN|!bA1~|m zr=2%s5N;ZazD4KRqgmtWsVwycz~9^!Sy0E`YZB)UtoHJ&vL8bPeWtT6I!KgBBu+i$ zDm6&TbSzya0&457U5-`fgPd2n4;thfWFb$#Jbz>!3t*a0(KX)Roa9ZhV#^LzSM_1- zf0cXXn+y)7y;sE6@W}?1LcdNWByDWWKuEEk(3C3(lY5W8LS95lKielM^_v39>aQgZ zNaYG;=h&n@BknsT_%bW6tSUxqmQ!s(my8N3nP(NIsG#XkjyMTCf(GRkn9#gWF> zUZ-!41N7uYNxAo(2Z|#X0r;2q6{=RjO8iDg6TT6y{v|&G9x`mS8BVL{6RE*LjlsxD z)9Oe$XfmTPs?GQDtXoNsC!?kA(JC+UZU3ByUC9|uH_0b zL;wR>hqI&yMI+||#^ed@BYZnaaj?FL7w54P6$a8$v7S62aQ>$1dRD`!C8{6Lkxrr2U<19_LTIqDj%$~f^)ZMQw7c5;1i;R z6&;sM8%K!y@yt%kPGKifs@8mBG>!FH*PG%8v$|hAOHTyHk?FgyMd@GUtgFk>G(Wz# z3ycG%S=gG3&E&D>&ccc4Y%}3Z3I_5Kh?POu^({*CfLsE4#p}MGooH|>-~gUXbjZ3erui)5OVCeKonkxc*jzRTXAq0u3O6_QiDPa}(D4 z>cg8)6mmNX&p7ZSo?pEQCmv+j&SKjSG&2^Sg`N6DC@mvgo9h+Wa4b=mT~MHH`IY0& zR*a<^3!}V&?R!P$%$~-vlOt2%i4i_V^4(#toGLw;?;(7QYB#)3E{P%vM4L)li~T#_ zmQ{Q(T}xmdL8xww5eyOW)+rrwq<+Uqx3xgs^lvuQg(jo}k6bBE!KZwHJR`}lqX-p> z&%Ztjm}r{^b{Re;cbvLoyGQ>C3D{h)u_-+-u}&py-2uRWxg%eyhho#%{`(0%`QIhR zCC1xw@^4#rEX}=v_?EF2j>vS0`rSnnXXkI(LR@=RCY*O?`2tsK=~P)oJqf^C_bNTg zGeee1dI4mrIsDZ=Xm9kaZ}@Y4+enXG`|B(NDOE~(e3Admp6@6XmP1tCK>##wb}drv zu7A#*jk#F33~erE>6;0E#Z@`{q+Mo3c(F42L4)K^jDIR`lZ2g>u?lCg->cpjshLjG zM!L`O8nFAEP-H;kn$np-8yzcsoozh&RuW)1aGqG)H(UMLwl9@G6q8^Al*HC>va_o07%Wo;|WC#IBWgIBg%33H0YY$#0i!+~=(h(_NTZ4#*vze#v$3w4+QC2@$CP((nX$4c3&=r)IkfsMgEwj!5ZnAPJ-)h)j)j7k@#^C~UR%3xrB z?dQ}#(Cn7wBFC~fUK8FKZ|>o$YMJW}CqT?0Hj0KVZhm!z^Sk_(bot}efuq%$?W0ih zig1VZCe)iTR#m4ax)!B4-sil|BEz(Txj=8MDWSv#LLjlTa}G){NglJr(!D~zFaUX8LX+NBb_hSYX5HFU16T6j~7szQ9e;B>$*Q1QXb^NO8TbU-(~zv zeOfWtC19&H*RRi1DirC93vP_+O*HS1G#f{KK4ZmAsChOZfE~%nGXT}I@AX(J(HmsG4i?NLbvJT5aPY!qd^hl(Oto8th>u z*9|!@Q4xcruPAAt5*)#-EF>%c=&s&TaL>(UdsEqsOQ#|d_oteuWcC3D>q067y$R_2 zRn(k94`c&v$CQ9fk$f}atqVQzkL%5mg0|F;9L)sNy^OM*kdZ7h;QL)}=mBX|b^kbZ zQ=gN|!8>qxDTe2}bThnbRaJzH2=`?eDHNLN-E+k(GU=&UzxTvdb-H+KeAal1aZBzh z@8&?dD^OJvgL~X>p%r>mHc^}+Z$HLmrE@4kDE?(m+lxXqQxcM+?scUTMfY&Wl^NjH zJg+sHPQ)D8!eSs!_eq$$h9wsignY*cn<=Wi-p%l(FTMqxX8myG@s4A3Pu1KmH@v>dVmsm%A1|xLY5@7z1llzNNWqsZi;I z7U71$VqaU|yU1pY^*3WLQdcGuEHY3(%TMc2v?`u+Crtp%PYcT3ub%l0HE>ZT#>N|D z9^i!FIQ}asxNf!g*Yk{_J%F;FYwilKoTh~xB;?jjnGau&ShrSliXkNr4WPvjHQ@nA zEwwkEwX2Rkj_{d!X^y4NxBW6T2&D*xRvb(4i4HJMy1oY_#|yAG?EKXgqEZ60W+$G8 ztP~=*;|fe16y`-!lg8-YE%7;Fo}{n40)&(Jp|f)4AI^Kmb}#eiKv#INDivO(5M}~c z#hF{#V42nzS5o{9t0_=7W*d5UR`by7Jql}(GR7J4Pg$n^Mb<*{?fb)!rd2S105e;U zSjugH=3WvcfWKeDn&#>2t_tj~Wb5BUIMu4KreLdJQ{osoUV_-!odFYh^aIGsmuNDOD8l&!ay8z~U#JrB0B&&8{q>J?q(J#L8^{cJRP zQ`^Jf-+jE3o+SeOfd}72sO|EsAM8Utp>r4cmo;LcmfK??WrW*d^MyNp%gn02YK=P# z6~|z_Z5NxgDYTq^gHg2dZnARd`QtS;PQK~zC!<-i-zR_vcS_~WW`aGG|81yM*ppx7 z$pJef*v3zKd{(WWy8k`Z_ndC`ZA<-kajNs(4c#lDR}RSyK7O%(FxBzcq*(UVMrbX` zgK8S*Y{iKYvo|`ASyql*Y_P=7DO^N{q%D}-p8L%%G*;BN85cLg`yJqiw@1d$ z=1A=uJ>(OG>2&^D_2|JwWkjVY+<>MnH@BD#WgOrk?0WVrErN_9&oj1JVFQm<{QiYn z)#7Xs+OQ;}#dLYVv+Wg6{z(Z^>Vd8rKcLyFYt2^BDeiG>jBI*QqTwW|>ln;ma0z}? zhHb5g#+}b0%bv;TQ zsPGV4?^P95+N2KK+3>|Qu6|N5H*rZ6ACSKgpEUIh*DbE_; zI_?3qrr?Z1C;l3(RIze9sxxw8{k3{GG=3N@5#LlZ{c7zjTUR%X$$@1CZi zlHCN6Y!ozlPU^54FGTRXcSrf4!ohe- z8zus*fL=({;Lma&#KZ2auv78#W`TkbO|AegpOCutR8ad2dxJ=zNocmJp}A|KdXG`s zQxKW?AOIu^f28}~ZETc!a$Lf*CVRcd{La%Wdzi^94ibbcjCSA>?QKo&ES9tm%yR&| zs89I1HIm*eY)RWH78*%bQ*a{dSY%S?-+Ykajw?Q~*~9xC8XHC*T+dGOul{I~XUs>% z-=uD?LK}B9mgAJo<9>OzRh}CO`lI{hKic+l|NYUt`IFH%_VY1z`uMPjfKY}s(6Z`kfxJnR9mn6sx zi)Rgdgkfr7xwWDSi%^j@l z=Fvi~c3>DSg2QDMmWmui)O@BWQ})np9goGPZTDZcDH;m?Msh)x4Pj3O8=u(Bcazw} z6!3fLW)ujg{wLKP#=VBfCvwu%ldtA^#F%>UzKLH?U-2q)Kg!n*)oC=`7PRsWE=Q@p zjp`F}d$OFc#Yt55ph%NyMJBrUd-GU|f+mi)41k-zj)zx{j%%pL20=8!B!vAX2N%4C zK~T))+MDV}d@tHWJnf6X3e+Lc1Xh<}K#R5{Uy1|v6biIOn`mNfhU7t|6t*y}2bi?b z?SZ5584=KcSK>lZ&OW&{v~{S6#p2P>_doCbnrE@jFjx-OsbC3-aA0N7AfzNYQihFM zvYVWP_oa?HS^*QnM}Lni36W(>BcX1(BRTJ9*v|N+GGd7^=nCZ0wEY5iRQ6%s^!$cFKUC zAkWCR55>E48t+i`#;Vu5dFuntmN-=M^?8`JA;Oe3$@iH!Sf(-uWe4V$ zeiP!2XhL;M>TqAth@MSs59rew9}wlfqaVH@fqgb(eo&7#Pk-3uR+~ba>-8(*UyMFd zr{3qu`)v@ZnWS%Qbx4%E>9|wQTp$^;CduzB*D887qsVpM*{#YYc==V12Ns>$(D(29 zx920|mU~UXsce)T;#y`~{oqD{NA!K}YSa^9LdDufKE#X)-$m2%wq}Oyn zhEL&-ctNA98eSRdM!#Jd`&OOrFU~mCj_}?+cbPkq+mWjFreCdn0CMqQ*x)23G3DFa zTaWmdFj_pn-0hvayc64`#WBeu@plCKx9)0(m;UmC8IX^W`>K1J1J%xCvUeR}%JSmw z#+r3wxM{IjY0>j)XVWvimD(wLeix>CUEC^PzBe}QiZd!K8WBc7Eb0a3&R1+1M#WzL zXo@gAEGE}mJfBZ-n=^i{@}m>>%q;o#9I-2we3c+sG6~Sn=p&d!-v?rfqO}!aMF9)4 z&S8?|vP0}H(z!KCGN&cQt2iLs)Xfl&IgWLxp-|5qOQdmr%}n}c)T#a8wY@3Fto=P- zH{BMDTu+FDeUAQqF@uMCu+;^q;6Z;w-@HF^zbVH?@YFM~=y_xRr$jV>vCy?Qt16_c zrG&qwNJlPc+{#H(T8K2-+7#RB7;VX#!xRUem z;p4Rz|D3;=9^0}RnST&w&5&TzP05XabPfD3=+;~#4b6>(F!xP^pb zkFXwhS857rLc`4rV=U37#dXtn1G=+QX5eRgn%M2qRs?LIY;$hy#IbRRx#qRI=p}r5 zEE&7x29_tByf`uxu@mSgM0g7MmPk~X1qN-qiq!I?;DTP2X}H8cghD$HHHi_di>*q$n+(p*g5g0ix5MzX`6u$Nn6)FUrxFi z(YaZ!!z%KPaMJqj;*@65;!~2}AkRO|7JYDJM@20jn+Qi=$EtkL$TI-7>uaUjoABL? z40G?e7>Vg_3il~f9Q>yntlWUuQ5roxfbvFLQgTM|kcmKb@Afj~-c&f<7k zNv>gX3Zz`cqV-p)P8!WtwbTVoi@Z_;*w%@&-u6@mqG4qYwsS%j_m1v+qliEAnNbhi{*30gYC$wc#mOL80@ z=U3Y!WcH_=Cnfm$BFEx}N&ePtcYzEvG%ef&nh$%ywJ5`d)C><45&KFmFz{+(l$}j^ z#{%1kqOdQ?YstHWU5%sMJITJNjk%rNlY7eYcSTeEr9V}nYgU$h^Eb@QV+2CvrIy(H zOf6me;@6N(#;T3T92wOUty96Uwmo$=AqeglAd} zAC1pb-;Mqpz7g7T(7&#eQ~jV~VOIV^w-QR;*Kcii2S)V1y*%F2B&m-^M#))c&M=ME z34TY4VUiQO6xP!fd|qD*%|&PxbV3g&EicNKHc~B@%Rj_U?>ElS%EDaA>X+s`j`~_5 zx@?fP;j@2_UK)Z@ev|;MiMM_-3{XLyTyGZhZppVQYZkhvq$!_`KH`MdrtrLCBhSsY1xQy~k`BzX}a=}iI2y&I+v6_~6%ElJMFX`9p+JiJh{NIDu=%NsMpG~e*v|K#jxLo2-@0PCHwY4g;>NE({vNiEK36$u>S91Vc_#$ov@DmbX?Gf zQ>2Mec<{Trd+Qb`Nw5Yo7I`)PxcES($r)op$K@M#DY@ADdv)aeC1S5Tzhk5jdw`fE z(?q>raOp2tm#;P=%!N(fb(`OQnsFPiI8az`A?yGzG@cLN-txU^U%GjFT_mTn)dYLp zE(CXFo4AVlCAL`JY@zD@{B=;C?(6i%BaF1-`1-b9{o`9w8;xB>iN;!3(c>Z&SFz4w z$M~i`IW3i(xXYV53K`T_ja;gSfi!h4Q&Vq-s!CI;hs~_PhwrnS20hN*g0H=Trv@}U z>NT<}JgGaoI&}9o#^EqpM*fcQj+mmqZFFYwW)cviQZpt`Lm-?7V=^MgZHrCZ-#yd`EvPtM-`IkOax;fsB@Ht-k*jt0Izf6~)tDd{A7UDgQh*4G{4BAEI2xvo_X}_U*z#Rmlvmm zBOl7;`d_s{x`XAYRygxt_hO3++%P>hs#>STA#~cj6LGq``h8YV|MyiLcDt!75<6LJ z1ohQW4yNrSFG3m$@~lF`uV%-wM}U(ZI)kjP!o`Hhst-?LqrB02x;%hXSBPz5*tbgmd+@WlyZisYh9P12JI!0mW^Tg4_cY`4ro$pqQf1E3f$g9GD#cMq?)GArxjXrVjOOP>eI#caKDcAe?*W# zlDNzBr@z1btnY=LmsVU35M3Xz>;;)nVk2?kz^bfud_xzO`uMuZ#4ILps9t1A1IFHpajD|`zMb*1UbqykZ8eq%$)VINSm3KYxXVOl zcGJ@u`UQxH@N3{d`?B8*e*0+~ZXwx~tu0(Gm?3+bYTsbEhF-hu6>ccl9L?=qk*L9y zd+f2V)#T4c>2wOL30I2R2XzU2wc)548;canj7ht$r$QTtKrz0t35P|WQi98WG7L^h zsA3leq5h0B*8?-zXT`QE=6kMr%1QAGl6D~iDx{6<)tAq+6%JYaCqcY0oKJ_Nrc7b*o@TEQIm5tHx}Q?VJ}d6s0FnX~Z5w!X&gA{!j8( z%@Wi4X-0{907z}=-fGWV6-y?NQWSp2{AGWKTDOE646!1GO0E{EG=JdNyuShxIzMK2 zYzE-!<=oD~YvoLGsU*RgFF);3{wKDQ$*stluP9Ubr6ZrP?cI){rN%|)4B;GRPN`+6 z>05eC6LMvmdw_B)PtPA3X%Qx|s6OT=<`^p`aH>DkExN;o>wKnc!HTPGEo05(;qWZG zCUAE?02r;fhqAW%9Ju$Xc7{w_*~IcdE6W4O3Nik#<6 zI?3c%Ny5oC>~W+ksX zEk-9C1s*#EdY3I^wZ9sXA*y}QarZStr-%zUIed5mTAYf`d*>lRhM^qSr4iVdVZtMY_fmNIs3XPTnm z-eFkD&#gS>j|64$EJ?m+Z60_M(gW7zuy$|qLU6KW9?+BMnz{Y28?wJ?oT4)yTU+a= z0~abNCeKcKmDs^CeZ}@MpcZp`^TUz^LCMx4n*~Hur;X`AtbDP9*m9w3UyTmr5fCJ8 z`U0=o^~S4jIFPUbml7x3{FKUV8 zSR{=j<9(uErt{AF>R5a^>m~r{hav;s6r~qG2;K7{WI}~6aa`5h!XtE=_zvduf|KJY z1*xadq{8S@S=8?U&Xw*@!^|ohZ_}gqr)LkR(=Uz4mv-<$aBQ_8ZDv7~A?% z`GsqI6!hJkTcthQZ%c#SCG@uyJg&phc!XUh( z=+Y|pqunmm7MbpN!YxiG(@xJ(tCu?CmOu5yd`YdrBW{tZP=oI3UrtF0`|oIFAtGAMCj;iOCO&-4m z#|l(P7{B%oE&}9xZEK+3#w6^8XY@^F;w{j-3K=M%uhrIj6sO4-WwZ0SN)*2jvXrg= zN7i|`v;DSV|JQ1(OLb5sMpaeq8a0D1dzFe&M3odZB1VZ>RkUV}P&2i+*fYeckr+jZ z86{$+O2mr!rqA^^aaIobz@W+mxsDH+syetJmPqbQMo#XX}Sn1h6M<64rYE_RW5FwkNX;efm;4(9E~>wBTTtcYz$X`YBGD z03NX-ZClL0tujs!%+&B#0#N&px(Z!4+;h+4$`=?zQS4vd(Y~CU$X7HYzKeI$BAm|Y z$%)w01A`7NdOvky$l1nzEA(b_m-@NTbjkI;OmXuBK_yd79rFG0oJheNS&8o1me1jWvt=>nt_X;xsH*-g@;(NF$u~Y5A;wC z$gY!A-LUeU6f3uB&d+dtJ)vI{wGc0T^PZJ0&1qc+=`hVRyetTVv|Pz3T>UZ^=>lfEH2kTgy}m=?E?JG#I(Ex_PFE&x6g7W!6VvbnPG!DsZ+@f-e)G5`PoHS-S89;Uzne#!|4s?XTZ3<4^9Y7Ykr3 zYgqW}d64?L|BF$j-u#9?*?d+(CS!PU*(OG*R%*OqXVNhSzio9eiGNqAskSHCGTc=w z^J7gyixNN=H8+3#jbXMq(<{6;T6UYEc0Z}fbU=Ci@B9p(w{@{147b~|W0V`E+J{f* zI0Td7(v80fK7F$MP#g9+)qx~AQ7dyxn>M$@TiS0v)}+Wh)NbOiIQjhx?f;G#m85j~v6(Q3*PH{6_g_ zri;GJWVMzh{3T;jZb> z9H6{mQd>*eGu}+1x6z$A%AvL!vt}K#Pi_LdQ>#6OLUTN-d z7+ZJ*Ixbju%8jRDm7jmNA{SpN-Wb;!)WL5j<-j&?VNBHWXDn=-OMcZ`ji$qG3GDer z^zK%e@c5HiA&ddLW)o+}MBvt+k)?!EO`KD{$n3gwb;gsGHct z9N^7L6P|gbca@XdVxfGD=einkUl|g);3X@Av>jJCd5I&|oGy)D$bE9|NOs0!#6@b0 zZbFya@#EL$-M_~t+W(MCj3@}*#M)z1OJpYFDAA~bF?}kiw8n)_kR&SHSNRSf^d-2X zZ^lb}K|7X?`Z^O9${*gMM8W27<@Ve8a#lo+E$%pM6tqb^sm9RzFTK>fB#(b^f-!WX zr2noZ@%U|sVxV^?I2EU(g3eGk~X zh!+27Q0D4f(3!v+-rz(v=^RgR?~>asmtc0B-YNW-#5#wKXNOFPSWr!Zo-A9a$bhPEU?uU^x{(y=BHKQiFZzT3uZ|xsw7;3X-8r5>#QbE9#L_` zCH6B|n4+b-Rr<7}?O$(t&?}Bt|Lv%`NN5!4go1DSo{%eD8~n^Re!rV;_?(pg_VVGt zS$Q@Cu%ewVBcyV&S9JU>r&`{ttBOH=Bl`Uz6-LXy4llXq<*5>Rt9+2MNeer6Zr;=agbAg4D`?tsYJ%z?K z`A(|9tV;2atCJh6XXK{N6?dvDqe%&~VHPHPc$t z3dG@0k~X1a-WCq><_D+s5zJ-dC3O)epmsG7sV|!W>C8bHR5DXBo ztkC&aE~|s*Gsz1vS20bTb5aStBt*IwR7O+ONWQZHx{A1ybmZ`J>9>EV$Dh4Bq&qZm zG8SF(=r`T7DXQp`<5afUdu$#>x6g9^v29!-3O}eS6RDdtdhk5-i=L6B;(BMQG=y8E zDK49J{VFr`_WcZfO|tr+b1$Bc*6HoInHe`HAHAozVrjV~@@qTpkO228>be-Xga|Eh zA4MfI)6(4^EWV&zA!|*;xl~Dlr5tQhg9%o8-G1^X52JzUE`AfTU!jR}`;IoV{_6RS ziu%5%2SU8ZgDM~DV*mn3>7{xf62hc~%1DP`TmA)QkZ@{;{)2R|)eY@RJLY@8UuBMF zmRTt7qWO>8a!;o_&9K$xkh{9#>796PESR|drAuaszz+LA_lN>PU6tl84G_DpeCr^e z#A{=0^o|W1zcZWBTRbPkKtI*vIMAkdF8Ms{Fawo3LU#PbRS1n35t>&jd5Gc_DiVq)TL9S-NCXN(LLtOv{vqFi*po&K?&8w z2amviA9hbddAqaAuaA29UZMi6)EeMQrJIRPb(x8H`2idu#@jNJ`H4@z(^HX}uw(x9 zH6^U4MAY_gnHK?Y{_OUdH|Km^Sh)8;8_V2Zta)cqw=~%bcRlKSXvyI>u{XX__`+yP zF=J^g1urE|miTR^MR{iDJ0XesQJlC^ycJF?zRPMdJAE#^c(Vt$DCNsROo=D^ZYJO_ z{1m6X)FZxr={+;Q4{N@2m>>>w^F7Z~BY}tKO|W|-i5%fR*OxM7OxUxU37G;4=!C_& z{|3qy+W((-tc1sQWotu#S>H?xx@Bc~838Um?3?YmuiYB2ZzMLt`jC}9vO`z+7~p0j z%uD5VZX~?{kL{m8Py-Wt}{y3}-w%}DL_A&TW9-}gd?BxiaB>F_5l;8Pc@ z$vNg^Xg66zASzqI^u=|%+1_KEcd|0=?t$@`#7gI0XNWZ`($mx06twi)PLRPA6+Vkc z_t-Xbs)ZDIPlbahva)4y;Lebvnk+?{jK08|fIq(bf2nNm2HS;E*Lr07-$BeuR8~~e zD$|Q){&Yq4@lk%im)7V&MvKSozQ~IjzK1k|OSybMu$=CU@q5!?nEr-e+;E4(Ta+W} zg&VqHRrW2jkgX=2rZOsZ0Pe>1iH{h`#o9T1G3g!o-J}_|@FJLrp}2AAd_k6ZG_Pi0 zn0Ziux9K4Cy2%p%mn=mJckh1L2?vr>%1oK)Lv5o5g)^H%Ir#bM*x1J$^2mhP3E9ek zeOc(jUV;Z-DS9Fw9)9_*$7q=Bqdx8A#8j4yU~0JPW)V(5Tg<7JQ;gV4(r%~|Nfoj3 z-WpP0H)}be`+qS!^x53Y)g>D4p}e(hs~sR4*_DgGWVjgF?(Vd_Ddj;kUU#f+y!Gl? zOc_BF8Ll@|zYdK%D?95)ZKGR(2mh4aGWvRXpC4L%p`@QeE^BhJOM^7tkbs z>vjEo{o_Fy>;2BzH9dCgms8)K+i)|ha9DA3Xiq?VV%PiiEy$Hjhb}1!8JK+QZ(I6c z;eU(Y1g_%?%RR`S7HUfJ%k z1ib^HY&XhF!E9z`a#X(<(qR1Ncvy4}^T=9!!0fx?g!zNkmjJ^y+qxygdsIdJQqKqT zvG^4ICb!BGDk#NJV!=-hAp0@gO6u6Lu(OoqsrfvH`-k&5ngDs1%ANC><&~lIs_Z7m zgSRGKQ>Pc$^XoPZ1r}=@R8?IPlROo98ea~{?q_%}zR|#!nPdaq2Dj%Ir?1xR$`6TNp=3}`I>W^ z-)a^C-ansX@NkL6NbQRmHwC=6T8gW8BgOrR=GW<_ez$-76(6|i-uPQ*aFA}XzOMCJ@-@SOaXi_nJGKz<{`BN?Eze7NJF z+PN-wZUiN69xf_6;Y7R%$o}z7h?&=;ULg&#r=X1W0x*!!%CPMeREqC)ZxA1aNWU&z z82HPEniw2MWkV|T@`3{r?W9|a#?Dxn!2J2X&0WO{>J8fY6wUi2dpzvd2;_K261}z{ zJ5PS+4i*XH{$6mh{GMia^gBJmziYPf;Z^E_!pG`N7??y;Jh+T;XDU$;YHp7C-xtU9 zzb{TM6k?stI+ARM^xqK|i^$a%100#GG*2EFc}zZZMIb#!!$_KyL15%33PRNRP` z+09w^8$zt-8s7Io8*Y=@6^I;2i(k|;+=$B!5@XJBFkXG2MsOs~b>3XGU6KDH759Bd zL$f_$=MT7C+nR5?e8}2?*#jX#T zhU?p{OZb$g%VXZjDY}G$>Wx-@3!U@|Ag2WhXx>Esc)azHY3RxHqpUR7S?UT1YZt_t z;*)eL(e*kvhN_6EB3msu`b=a_>(E{`-h&>b!d^9NAXlHcj4ujvii~EX$FgN?Dn5Ly+I5@q++K_(jY0%?~vRw8figPN*bQ0VzVJjN;k5*Uw6&D7d1Wi|S`!$iL zRR)Ugz&^XKUg^;)3h_WQs7yH#+d^h&uA+N=)Da95!-wB%OYsH5-qEU2$bH6Nme zI0rJw(x_ptBdU+$wx^Y40aUU)=kce_Sc9UL32ORC;o#m|8GxRpd;i0xfSiWJvO^Dr z+7LXx<;lP~xeWJ4o{RL|%Q}};MgF1F`5eh+y-kH@+lH2&SBJK%c%vcp^S4Z}&SZ}$ zWJX9B7Qy(eU(-^i`C76u7GL>PPWvPei7Kt?zJ~&x(Xl(O<}DaD2!Nv>Sh_jCNs$v% zQh*IO`Aod{iV9(I4vCmVhFVDWvF5N@pt>VfR;-~0JCXM`rp>>}NiKUfDIf0Xf-)#A!jn6{^9EtuzillehjzV}|Rw}6eDySDfL9rt*x{~h6YLyHSL@%v;Sa5q1zI9s)V$c97Cb55_rmH4 zt5o0G{rpTgG0vn|!3#SUnKU~#Tye#+DRM(&xdm!)zADnGxUbl7{M{b?nprj!tPu8# z2mi*IW6e5vk##@3)~1X(ocnQ-+E@WWwcNwF>oN6qP506b#i*$rC9eSN=H62J;f{iK zxj(DopxR3KeO7YZri<>P)QQ$jN#wOsq1%{ulo40Qk37^;^gj?wHMp$;-GmY)3fea~ zAuq^vcj-Je>#PT*1qW|eNJcr`%AYsu>U9$`8y*7UdMKE;2QJZchfBfF$Ew9HFVa#^ zeI~!;S>7o0j)mAA@Rv|@WW!44^D;LIMCKE%L4IT6Q4USYUuZ^Z9tn1lR+JR%c3!%S zSG8vBVFvmUM}?TBuTj@w7i^-{dn#^l^si4qUlhO*Bbv%Nxwc0P*5EV93G2=?+9o$A}q31anp>LTdH}rup zbTSH_70E_F^$j!oB2g|d_0Ol zg()$;^2uYo?Og5{|5DA)<>2ow63>lNS6SUBC%$X=@*qXl!`m*s_9wL1VwzE`OQMK@ z8i#*A4+B(xS%=qmF>d`foAlTPeUN!hX&hT|1|k@5{MP)T#($cF$82E2^uDLzfWXp@ zOtp1jrrqt$OHr%N-=0B@;P!k=+4~c&sw<-1&gE|ob$^h#*vE*OxUi->Lceh%sYlc1L^5w=_x0E0Q zx3K&Q0J;EPKc(fD5N0a}PRZlQ7j70LKT?(?`7_~h`R{GaLQ-%+zItnvt=cF z4fC<8T4*di@iJ0YQaAc?vD+wsia9+}<`|KqqAwe}Ua}QCudT*wtY>4|*SD!tCaEQ5gc4FS=j-D`n7Oftf8sPS3$d|Xp|^E`7mR}C}#Rg@SPk1++m z$q$aZJ%cupV zDTxE;T9^PcI@u2X7IjLKc_%#qUgCu<)XMNyF4-}cu_Dw)N|=b-^y!PHem%1rsF;UIEh~Ac@6MSf9!a)V`mt!- z#QmeK#=*6w&v9Ozqi5nppBLs}Cf$w)PfWJUn5gMaY}jZaQQ@U3R+oQJCJV|O-C#@# z1dLH@m)e5+U|`<}T1}S_;ItsdP`qVo%U}o)@e$L|f0|)4F_lQ!Kx4saXLgLA+1&O~ zRp>lS3N4ngps$DLsaBp7{r0AL}d$>YPzl3b0sWm;eRjhJ{!T2_j>iM^F~ zf|};!w}vWoN^Jj-cEZA42T-~%hMsux@_2)FY`#g$WOa)LE=?0C!+YW0lTs+c8cYi& zeJ<}*qUXnk0FNV6fupH!z2{)u#nX%$=3Uu(8Gf&tqno=L26~Ye;sWWqR!4p7WvLVi z=J6M|;1BR${@|pCYbE%Uo{tm^n!qy--gyZ2{Q^HMP0noAsVtfQ{_I#K?^73fF_Sp{^IQ|&`f znR{U^(_baUX@@_-DU6A;h7SZ|jllYG{-OtU2!{c4Ehoegof*ISi(bgCO!waJ1>2|! z@J2;wNQD_t-k=o&Pz&cqBwU1|7@7@)Mf(2N@Mcer~ zZ=>r~y52`~)>1M*%0JiN8?1~5*7O5cGCx+ko3WOfTJ2tlCicpHj=*Jie-DmFdMEoID|VZf+pfpD z;5RLt7>in5w#5kOBaX_t?zg0HX;>v1UF=t*mMAV6R_>5TF zd{hN%kE^#d$NuP7p-txkNP<0n7X%rut5yHTDmwfaDtk*!sF7FpBtnzCx`Wd&!&8h9 z#27tv-TNF%o2Kh#iVQ-J%L4Ca|E+MF8TD(a)DHy?Dj)oA3sc_8Bt|(|R^`xE!&DCE zY}Q2rx9N@c!TJH4@lB3Re?@pppCgaf)@@#;F?;-I6OPZpBAsn(Q)8{8bm@*KqU?(ey(TV$fIaE zwz3Yl?w1)?!NzyQG;aG$MGa%QNN^eFEM)S=HN1RL-TaSiwxyxpe27zQ`1RT&1LWwtNj?4{$_C5kYBFy*iYva zlY}}{hiz)H6PNdhKKQbw0P)*;Q3Rfna|-q0r~cs^f>(10W^=^nsfxcH53%vHJ0n&u z3F1>E0=SkJFza)(6vm=I3xZOTMp9!et}IF9B~2P`U2Op~im&!q}@C%8gAstabjvz072csN^rN}K|fF(UJ?R=xs6z#8GWP5n(qsK z5p9yn!X74Fc$+*lRNP)__#B$4ofw~b7G*qF=ed@)RTCG6tU# z;*v~4v|6Po{52C;^rYowLDvUAf&j{Yal+9}7}6V(HT3B(P5bR)`fr5{8N(!t1n^L}ZRHpz0OJK%SBwCp^j{+lF}Za5&y zmki&}kV%E4I?#ilJK0e;X1n%m(d)0(Q{-(1na+46VbK5U}uDxC!NuS2aWtZbW+&t*3 z5>qQrgQ-Y-x*{W!bSk!$Dg>Yzb*&;~O?;os2N?i9{kU;m$pAzxUcLHJ>1eNE7^T2O zt*R@G4*QfeqBy<1>>aW#rPmT&5$=e3w)2%Fyi&vfl84@Fk)~Vi+40uWTdQMk$8WOp zEoO%l5hI+OoalMi4;_7sJNHRQSiXQbepCezJ@G5T<@^ncvhm5s%1-5gmjo{=D*39;>!ED71i{f))~?F|NB{Ncg@Tb(bqb%&cfW=|F{dUJBv;OhRJJjOIFvlN=KpCQHn ztg(w(VaZ4>A<`P&t8&_BUh_}{@7#m%50z7FA(z@YFKh4?Fv+Jc{{}8zEAY_Xx1AdP zXZ*Qffg*d)dStu}7rbH9BBB0TC3DL9q25_*p9x-FZ=VF|+uV-+cVM}jHCYV$RdHco zm7{)LH_aCj=Y?akNCkmc8HH1tC`v>l{PK0iO;*U&?!$zo=s~92wGWprYcd?0sw-D< zf0jMD@kv1T;b!C2ApK<%=f@h!I)n%7ae4A$Flr&uB+!ml;<)LldSm`etK1*QX$#i| zR-Q#UJz&+KPlkE=P5nuEmCY}%)C-=y-n*hudn0KZ@TjROJf+&TeqJ;c0exw^-<^U~SG(+Z?|ulhs+=xc83zgGXLACmc?nsXiSVWic)6jREGp)kEVJy)Ayq zqR*p1mv`%ijOfM<#Hq3BZI+x8Z(RV|{#`^<*u^o;l*gacq9zv2y9k%Dvg(cypG26wL+^Dl2 z{)?{}c5a}eX7s<~cJlZLUSBUWDXkNy2PI=1O@ko8Om@q?8YIJj@%ThYDis1wBhwUQ z0JE+E0>3!=-L)8)+V7J^2Uplr-G)tAeA0<-U&C7Ax72-mrDiT<1xHSc;J00foPhZU z(4>BN>9Bp|gAAWt&aaS3Y9e9HAd=8-YFC44hEh^jty?I->B>PznL2A9<{RbxA(x18 zwbE)g{EbvNUJXfAD<#3xJmk+rF$_f1E2Kv)*q`sR%hk^zRXvAHX6zuuUSx>RFyo7z0dxiv4ynv0k-@O&%05ongO+C+R# z`Eu?>vdK09VfG!x(oUDyHPpL`H_Kk}sM@oF>4c!LLL*zHGdYl2kWkF!LY-IWhYZC+ zX(Sj7nSWdTQE*VWijdzCI`0r=uQT~3z;Z?iI6lZJGvDiHr9H)NXtYv^H1RLO<RU1R#gx^=7fw$R$| zdl_AKK`LIDJ4gQQ$NuZSvjfB+*SKqmsMuaNsYsh})(&*QZE`=_e!6`>?ihh)@5Sq_ z^h$DxBgkf$hs0@4ViDywq=c-VthK)|-dQ=)lb3CRXjzR(WH#P0_6IIqEa9ONcj+8t zLCWv_SMziImxvalf;57S)_jMY-fZtE_E9A1$8uhKhjkuob4Pfr{NP-TD=eE;J?&U<@WtJFBvvG|c-VQ3k$X@B`5Q+DW+)G+d&YQOy6Oi>bwStDy zO=$5Jsj6m-n0$+eMw_W>{=HVm$I)JB;tVdY$2>`wcH%hko7Vjo>u-`|kE)KYKl3WH zd&0e1aisUF!R(rCpXNW&r$%KvZpu%Q^p}_E98iI?LJdFstpKRT_2`k_)S@Gnd*bR| z1o+aQC3wcM%HJ087MwS@3pCjWItirT;_pn(AJ1S8yke-w2Z1N+>+^!*F3)k)!r>n3 ziV2-;GXwI9Gno`YnDB$4Yvd3h*o~M%RIS@7wr?Pr4_94cBed*m-v(y*tQK++@L=CH zu`-zyRUQsrqhFLBd@$LP2KF2UDKbcr)*Ly6gI$+kIMF)J!^6Ro!?wSUgBj1D&F8sW zS*Xp*p)T>`dGSB4xz-OMjl*vP#28rmNB^Qt(<@R@8-{6Q6z2FB-PJQ*JPVQ(oysK- zj-uCd9*^S37DZ_28kf;SXHjR9H;nQpji!%04OPDJM&rL^2$0R(?{9PUN&*}%IQ@PS zqxOd_QCp@cE+}&IxmnBg=iH}1N8oQ_>8p!SO__iSIyXjpFiyon_^W`0GBd_UDc=vy z&l{*LE!!2$Ia4LVu`Emx(l_ z!DrE08wG1nUI4y?_xw=zygFX4Lqt$VciqFTMxzpK8}gE2JBS4C_32QHq^~9{ct4Vi zaZ6TEvtG)Td5Iv@sJp+rDv*R1U$~y8CUP)#?A|2D7=z@1?I;GWNXa zD|s8?BX!a{h)MNwdr|dq#usTz$GT{!&{;RoIm92<7IS<1TvmkXA!Gt9ve* z#8`{M$yiurq$nLnxnD2{ngb#4v`GKpL{#NsO1D?S2e=6AnDBUiNR$j$G-y)G*j7;y zjTNT6bX-qhID2=_0n4TD})4x;F+isAyFcIrC^CTh`t!Tx*=hKl0iylO&a|zLW>AP31 z>41Z^Ch`)RA_TvaEqL^o1>0oj?E04PMX180TrT6S??VXBmK{CPvK650H1wNqnL}{U z+meS@SdEB1%ASKudV0p+^%BzJBOm5sZHo4Mo^B=R|zi;g<$QwpmFD*Xp9-N4l zmag!Vb{Rdz3dpz$1qd`C6)saNET>oB8>+L-4=4=vAghZO@y9Mt*+)LZA{CpT4k@zX z>Vk~w#O8e3AOig>N1sApg91w8NBE&>Ap)-em3iGF!`=0<>LpdBU0GPuD2Khir%yzr z@PLn&d)-d|FICjFn~1eV9{I$6y>daAt?0=#ne z#p1s&OdNF$2Mm8w+>uOhxc!RPVZjsZR=kkX!Yi zP%@7!qG8fG`MktL_@0V>jigJWC27K0dEvAIBEiVsh*XXiLcV3VOHSJ6Jw8m-+R#C2 zz1L|vS6Kc-5jB$)R~(LV^KRxMcYF`X)zIR|l?<2TuP@mGcC2S_yyYwO8Sr3LxiBmh z4MSncK#I}DYd%k4rs|kZ*^YufTT3DC)yA{DH6)9q|)#stmNcVJnE)@7J%t z>qtw!coV=Eu-NRjYm599_U-|jSn7ICo^^m1TU45IT;r5=mWEdx|Ch3GXR!T#U~Msyt2y zdRkTv8fS!ha{yONM)Lu?MYV2J zeU%?}*Ii(Ic0WIGKcB~Z^>`$3OFhuz`{oLPpMVsH|1@S{6BOB!bN_?knmr3r^qAFS z@Nkb4BD_oy-Cke#{c=3yV^NvB%1R4#F4x6r@X(O^QotNrfVJHoA9G<^_nsCHykb6W zF%;l3&VB_poj8X;g;WAj*hN;07H)@+P<~t!+=6lDYX!gPW9}SjyQ6tFjJL(HEIsKz zg8?p%2lwOY{meEo!d%LKyQi)wZx`xw9rg_#_6_iTLWlg_Suy?v=6N~u?jPX-Y2se9 z#~aKi<$dZ~iAlxCz0XKF84iP&BYhb)TU9}zFy<)YWlbx9zw4iLnuo&;H#FB@kyN*w z8QBtBelK2+!6~=&@zIN;R)Sl-+Vvjo*!>Stbg^$nWecTT=&Ix^ibVsVh{x!qkNds9 z3~%%40g&EcQt_@|@p~mr&Af4P#^Ou##j))?ZjiTd^s4pbM&pw*XhVkEOacK<6Xe02 zVgE3BJF=^;Yswvzv{Z2iXRMrs#AdNcTIt%eL!OHIQxzt`$SqxX{gtdL^4l2evIr)0 zj@MP)glG?e^>K#mr@;ryXp2yImx&T~Ds5$XJ3Pon z1rO*NHG#QV-cd?=>*us(A|J^%0;rq zVO*Hdc;#o~noBqhjcNLXX%fOWWy|xl+$o~WlB=sF?$Cmwryg9yR5@UYEQ%DpF(`!5 z=~gh>lPD2#MAloHvSQ+`SWj|9tSv=jJe5Anj4ZU>c1Sq-=wD5=dAjs4cQv~O`z*Xo z0O{vemk9}}4KzBI55&I0evl?;q@4H8s##qx;bW5j3gt%@dX#OJw@Y+<=CLH3tYMW6 zw@;0{r%Z&J35+3~^#e3Jq{a?@Pndv%Oy=y%?@Uy`4hYMvw@XWKM(EsADJS$5OWxxx zV;$(leHQO<=lke=EhaqXEAv#BT)eE%F;T66`r4|Oe7CTt3`;V_xh^J|q}lq%?^?ug zz8D`9w5ilL;Ep{9LfR?bx2=US_$4;pwkJDA!)SXJF`g3cBCTu8PK{g zV|K4g)?@qETynd{mPJ}p2&LIEY~&w#?hBQJoZLIq^wp!$N8fRvJ%^AXi+rE;$!oatVKJ)j{b2aF?WSjw8vp)Sd-(2*7Y`k*oXyC!?9^!Or2}v!b^f@F&d<@4c5KtM#=-NcZx5yDSd=7C;d0js7#9614Ryo_u zP4Y7~316KFy^|(2SrF{s$B6XaMp8B`222VXz`$}osJE7QayC4js%e&syzG}Sa86+W zY0}ns+2151?qLg9PX#bAZrTSEMLGZThJlmg=a-h#BSV zz#`96q5H*Grk#Nd#ar_`GBZ`pM`%Aq8)DV}@>#9_^R+_%R%Fuy8fIQ15edRcXK@gV z`tydd@s~J51sMFl}uTF&dKVmN`Fj4YOgMuTwJV$%HpZ z1wr_^YBvC^6h{(@B)cEbGFv2Peh^D^nG4q2K^vDN*lr|+FBLqi9dtkzvzEaMEUkX8m&oef2d$=BZOP>WzCqC(i_d= zDlG~y?7cYbcz3Yz@K!D4&&YPfLfti$1u00H?AA_D4or2#03gR4>KNY!Fki`ygDa$g z|Jkz`O8p|YT<7HR=^wlp;K4e4E`&|F(dm5}eD;8_JA8d-_KMgwIR*8vu{z;T(ZRhzREUQ?THmzcRQ5*%Jr4FOi~d9&e;@Yh_T&mUl#JE?h!wIf?_>;al^Mq zc&^n{nS~nmKjcfKIsJ17EqcDXWzdjoF%nih;Cf0IzzgtwbNr6q7D||t|LMc-L;(p) zT~oU5!eGYkp8Q9vSeU{2*DHN7zL;N#-?tviLa!}!RW}!pe|of6;L;-FXGEZF)jVW} zOFR*v7A^U2dO!Sfw4c*fTq^GHwu7Zqb%pZtaInDu%x@R-J5+kvOXZG|vu&2wuCvdR zO`stxt{`4bUw_+8S~s5kQXyK+_>3=`(0-xT@+?@1jnQ?P=)E>@LmD^{ds>`x@YCN2Lr!JG6 z09R06TD$D-NA@}VBV(sH^q_)lemEeJ7G_mUV_^PfR2l8C?B7@I37^-9;^z#D zuP-LvF5jfg^!81E@!+;_qMnHi9KAEF#loQ9TrvGo&jCK}^o>g-jXvDOF$WxW2l~~u?a+&rxS_v|GVD3QHLCn0nzF<+;ssph>)6d??DWO_Xk@X( zm+%2S?uy6-?YdK}qlnXqzvTMDNXFsT`PzPQ$G~QbQ{C?p&7#aZrKZFjhPI3KZf+*i zN_&3@r3aaKd2HH5=w#^-Z#^F^#SPlr;az$Wu0F_@W_7n5c~?{@n>&9l?{V#V&-;vO zjkLJI71cq9&G5(^gsj`}l4o;z(iO2&ruHyz`elN& zw9n*9uL8}!9Y#o^=0_vA8Y{}k-R;{ z*ci}tEC@C6n(@T{X?z^hoYLW=Cwx^DlEa@}5{>jfo6_vz;eOTEY~_6@#(Z^Z`xGT8 zvh;U@n)4kSxglCG9sCSK&mJ_-D%PJIA52L&XeVdW+*mP}6idJOm(Ry$XFD^lejPOC zfFHNfh8%+Z4{BRCd%DDSmTkfB>fclEY=hX}PmX^K1%er1E?Cdlsi9DQ=~^w6*2TIy zZY$gyp#1R#JJL$a+x5pgT{&JPJ{r+yi4)IV6Ny5}RCC_ef8K>1S5>iE@A4GEW8qwU z5NZ5c*ND3@SoV)2mBq^446JV7u;dxPK>-E%c$qsyQeHmZKTDhkZuJvmknTWOGXjZP z==Y&CLc=1WkHuoluE-*3;k^q=gCj@TcA`%`kM24=4Up9z-=k}pWmEe5Y`)1^0i$vh z*R&`SPz+Wgi(K-C_{3XHocqntu1)uv@3nJdfEgV6D={o4;Gb2%Anz_pL%^0#kF$T7 z6{pztj8(zE+Z@!jf3?s0kB?I?{QVD?ncd9r61kL*OH##}kMtBZo(qZS#vXa*M`|-f zOxI)ObdZ+@bh??kElj1jJA?{Ynj5Sa&w4)|OcK0Z54WEl?&*R_iDE7l-GC*BR%=2u z7W=CaS%^IoK+-_R3OuXyw9x6|+5(n41F7}46SOpI&8i}Qb(+zkl;N*06BDXPM8p%Nc&qWWQgxW%!D;?X{rfGMSIQR=%EpDvCA7xGPpa4U-Vi-bOfs zt{CYhzD?`hA2EN_h3X1>sH`z*JS$9Cxm>r`jE%9*QGswfD9zVM%dHGA)IU`lh+h*`Do?#J!vVMiInkV!| z7Xb$XZwZV@038x2*9SW#Mj)0|+|rMVUHjeS@~7`K37QC@o0#&8W(}f^Y-F1+-J1o~ zr_@zh9dzqn)F|-Sv|n5nck(?0y3<@Hwh@^VTqKla@Y9OAjtawfNLgL^`qpH=h+Nt)UD=uH4)xo~xn88~z-GshQT($gZ|f-VjQeo+$`J7=y5Jn==%iy3&{tF(;JoJ}=KL*U;H|(A7%)MQ*7p%S`it4wSU)+!%(B-z*qC=g zUkWU1J*z>;w9@BW6pxhyh#h27?LPAf+Ev)qGcs&d?Bhkv6>{FTXomJeFS)wR?P{Mw z->ZQoEQB3=wT&Y9m$!3Axrxr#>Y_X@*2(hu-Ue}&!r%~2_>{YR{}7A1+lcq%#wRkM ztRr2|;pd>co?W(tRqiqni2Uheu3{ByAM@cft}e}P@>BOYIk9dv%}#L|`N5cr3uBOy zhWsG#hc-jtQg;XUem>h>-z@CIJ%hd&P+ru;7IpOFK&t0%mHq0W#XbB#(#l%2<%ehR z=e9mA`lQfVb72=Ed72>=e%!7QWMU?&xgmMIlibc!p`8}UkUOqY4nDQnRPwUVt>XLlXpE;;t_x9|)r^nCH^P6V;V}t{XqO%_!M2tG zPqXEL(52yGVz-;BSzRLWLsIlJw*%^eW#S$@fygDvJs%paF|YYXxCoju@_a)RiNS^n z&0ehCFi&zpx+w%qh2!tfmeN4L>Jaef-9+7N|EWx&Vw{Z?p~yZNJLW%pHHI4WkhX9G z-Kf=x7xOrmO~ZilObbE1hKn}h|7_m;2F1NOq6iYSGHlJ3_~_L$8Ux0g4$>~pYjq&* zJ{8t9`EySk_AWLUQ&#ZoKm%s4_O1FmchM+ z(`O1?i(E@rr`fwA7oO3LJ%e1Rn8nj!VMJIyw%F%S*AJnAmq(`enCgn;&QRYbnov&T z9(wC(#`v-mQ>f6a`%C_Za;+T)g7yn@gkxPl2WoGRz<}&94 ze;4Lw?4Qs@CmdDe`Z=1>=LLUtTwn2jKy(D-*3B6*E0-jY!7cQfy0| z9>47cd(@P*vuD5@U@G~>-zxX1Guv~g*2Beg_i3>8uz#=W=}z+rwnLm;k$t@Sy9#U7 z&}|6T_UqatjF`JmfqxrJQ?K+HMp3o^=(o4z^+P4pV_d0J)*1;^E7K?(y`zg`82m7; ze*+@??dlZ7_xp6!Z@1Q~Y{tulC^CChk9y=CyIR4QRGAf}qm_Q@#MgsNbWHWfKKI-^JaC0*&f9A5Ux>4J7 z59$r+@COEEzdkIKdBVOB(6>}N9lKODKI`L4?Wc zMPI4a!JBa2{DBJSQASEuu?}6wMtgl(1(VHf2hvmf(cXiBUwYsoYsUkp~O$;nc80F z2FSF4Cq9HF3-%s`mLc0_3FVSr7^<)X#AZ-_0^JW9J6Sn5?3&W7=aVJ9gO^}!Q4QC1 zFSA%9U9#%!0(HG3 zoU@$Y@eX!FSDp%e3U5d{F!+!ytc!KX)CEUhY0Ri*U_K#C=gEbKxxfQ4$L8sJo1|5e;78k&~- zlOG%<8?Rpa{GC>N{c3J*YBu|=1z4e(N%i#(Fv)j#y^NJ*2KafcHyyPyf;T~}HFfR1 z)ipWii8v@HcI@&ABNgi|w@ELu2sq=+d2>s9lVbW021munuWxTT9Jv^#WRfB%Y3mC~ zZ(Vl$vq=T3TRWyAdcU0AVweVfj)m-n5CV^~sGl116ozAN>jlc8d;M}j=$TKosrG}i zS3pA0@0Ze5Cr7JH-;bK4ryV8-{~<_3F1Pb2`%^O9DQ3G)?~}1ddS>yGz8O(|R}V3% zO_dG18?g%OvH{e|i62=k2!UB7@WcU;WJq2U9BSS>Q2F`LTY1l00ms4S&YuZon?60+ z+gON>DOWn0W7>!*wiB8yjlHQy>H0)urM8Jbd?SBv?`;=^I zpn_p5^rZikBBFC@=B_NE*LTjVrzAisTaVraM$|0LX!Q;DO`aLAkwTRyc|Lj%HVxJd z9?Y5_;ZI01k{*Owu$-(GF_pb$|W4eLe% zGC2;jVs@IytXqg2B0$5pQhN$a9wIKs6wV96G4&jQnme#}P96(K0p(@w=eyr@1L4aV zagAh8%R-Wr^nR3*bypz-mfa+n)fj#m6|u zSjH+bxsSNM|0FMJ1OCk@^Ikb)cAMX_pN4g}EREaW_31@^lUr!#*W15TtJ0SJ{pF|! zPZIs1MG^irKe<#om!r_|irYB>1_k`>ElxIwkA1A;(~GoDt+kw%^}Th%0Y0@x_AVet ze>D#f8|*w%ps>ZWyip#~03<80k}h|#PCi_gu8sTJn^-cbUk`6o_Y~+2{v1oTMA%qiH? zk>$t^p=AfL+4-i)Ipz_j258MkU-(oFPwWBLntPg~RMT8PdhrpESs>Z1o?6b0`@&vV zm$T%!j7UPnbX2D2=m=;AvB^8V2xzyKFzRWth9!wh5-qoA2BF`Gk(x6i(3vp@i;c3# zEJM#s-&OR|)hG!ig5}uANs}7lZBOTsc)y6{6Z@X8U=!MzHrR}&1AC({IM9d|&>EV7)A-(&0Rr=qb^ILybwfIskeu5svu_!Xvc!Rk`Y`Z5? zdXsX`8Xkoydvx%ogB6EV_f!1lJ*gIh#wJRy``dD#Q7F^(=G6(yea(-;zKSzP^72N= zyc~0uk**?{D$EX@lxDakoJWiwG9^4?mWy{e1KT+3b9|3NzxQGl!L^ z+~!00@rOu;r%I%RxYf7A8N;BwpIP6{lj=tU2G*U1d zdvn)J&4fwC?MLi*wlDh@T{rumtv&eh$Wq6iFdpR78R&ETkT|vV6l+qtZ)^eG7lK)_ z*fqqgWI1K{SLyfrv){4HkQ#gV!g`2BY#jBIFS#UhdAJQdsO70KZboSj^tkF7%wRCj zAA9wOkHHKdXF1R(FlDN%yzfV(t3efjXpYD3Ob9eS+JFZik9NdJsuTl;P$GBp^Q&dsUp zPYRcf=c6WV54<82%5ioR6}p^?_3}nOT21ASFJP@m0h+Spt{7ZE^4+#*un#27*Is@% zzwa-SU84Sg_f&SKFFlYSRAG@p3$1tSL3V&3f-&Ab*>%EPFEGeY4x% ziYu34K8O@OuDVn4GmSvb`~I7@p1r{$f^v5v+gUiZuo7P3tG|6=(b=bNxA-7yrq^7$ z9_b)WP@lR9w*6mc`tQF76Z1iW8rW})emx&*dFu(c=`BN(fV=2tFGU~lcH1UZAK%@EeusJkC2H~YC_uyMheu4w~T%4t3vWMcsxG&9~ z>oEcrP45bAGi46Ve5)*!B+3Ah8i!hPZh;=T-&QuxXF0xUE<4~p1w$=JlDK*(70hfa zzyNUi)`q&o-+Y-rot$QG5@3>kDH*`88UPB1HI^m)(pq-eKt+gxqkoZNk{YofQW?AR zr&IO~Pt|vjblNW`Ao8un?xYExz*rBysal)a4X}MwHx42-F)=gc;ANFi3leWsc%=LF zwu9Tdr2fJEq-~kLVYN%R_**W5t_wj_aNPA=N{rL9v=r)`xD$C4%ujgHtbBq~KC!MW z2%ts~PXf9QQ&TrWDQ4VbVXtBfbh%p9S!UC#94Z3AVUOxwVW$pHY~h9WVfQjL@Z=0+8Vfzw?4tA!qop- zn3<@blsE6x#6rjHB<=q$){kpV_eeI^)FeiUL=kou0w)591meIpd2#=ioJUhI6u00M zAI(qw=UOzgqhER@z1emJ7Ab|K9|N%Ec_ii^tz}u|>Wm$h zXsyz0$9t-V1gBQ6z^6A(3U~d!Po=ePbpA>) z(H?JQo@no1P2GOqE?sH$$Jx1~<~KK1hpSc7+`6GiwxnXhRMLZL*yyl>9->WrjDlfI zzUobh7@$x_8-Sm_*zkJizIo*NUO-m3tT0%2e^eqD+!kye{CM9(Sa+Nj!6^*Ru$-RB z`+PXS)QHWBy}bY5V!Y_zVm$vcDTE3Y_w;Qg9qrmD_>@8CUh~6bCuh;M5ef6fhC+ll zdMsH#Kyov4fB$gfe@1jX+_=u=>W34zT z-UIfS$LQrVI(Dtw z^CTPRosEDRLEERLF$!qD3I1kZAa*YKMc0Iz5PKJ9wVB1;==d8t)dmzgBVNefYcjHu zKmqL_NJWcC$ogg%38_dG%oOLi!kSv;LfL9?Ozv+q3%qj0!hjZRfhP7br0YWIV(doK zjV@Xt+bgAr6R3Tzjskb6kB4WAzSM|O|KTqs@wGe^Ue=NMxJ4p?W-PnEhSQ2kcBVSG zJRk>YW>35cwya=-gWz8~fHix;mL)VNJ|dOG>5#&Q?`F@R+i2 zV}C8r1jruv)kB(ScU*9{&Mes%N22SHTRyeq8DMGl65!CH5>HD(hA>AKgWdM zbh{glWNVFDf$}@R!lve7|{ANO8GG0vg4}$a9pg1``fKoT^Sngp53B1s? z0fFzwYN14!=D$$9n>BHq3O2YiDp~+7#`dLzfr-?UfbB* zXaCqtU7R$WWl-gymn>5np=6!Sbxaxl%l61po&Wn*^i zB{NM~JlOIZhfi5DZuwezT`gM(1sO}3Xdk2*%c=2k+gpu|bfs$2V|r(5({z|Xpytx{ z(D{_V;P*CM+xuEyDZ!Goc9SUSw*JXla+fE;Cd~vKEpf6+GrX59mA9cVy%j4X3J9+e z!u3p~?w`J;T%L;_{-;z@SA#OK(|D!+#LwUxdr*n&u(#9+r8#%5^mj#|(&c!_0MyK~ zo>7f#R6Ws2<=Q6!%3UM~+I7kMMmRXZY5P}8$USJtT2jED`css{L>uQ{@Fy3Ro#0_`<#o|eWhJkh;)&- zd*NJsc=+_WKpR~8yjoK&3(=Q{*Nh3V6OoIYg&;e`T?n5<1sNBfkf1;cpszwZa8uQ)k z-^s0!3hYOk2-dK9`T?R+w0ICsi>%hxno|huMagkwA+jtS9KT`Z{K;X>bD&+<>Tu#P zoouTt5jqxh+X+pb%{UuyKwB5-|NLYX4dP`U1*9A@?e|T;jdLuL{@qfX=}@F~(1%%=xjyl3(2dD)~3;-*Kj#e9ye-aUP`_;fej{^vDrs#C9cA5#lk zF4j3%OLa>UeQTbkK;dWYc7*hdT2!Y|b)p*V_1B&G^OHMo(moT5){ZmM8>!FP>upj_ zz15uzGy7xN$9tPJAm-hE1?o^I1QzqvBckpQ!Kq1c%LNbVog4f#+Rs{#kaE zvhNV$jC>a$PIb12hm{;HoC>%V*oO9Px^ygnp4i(Nc3q_cr5z3gLRwM++CCz?BUlVf z6)6iz3cR_=U)nn)^~TMY)hM|RSxUUFf@zDD2X4HXEq0LnA92B}wsdFM$90E~)@b^{ z7%fzr1W~jI9&CHKS@~v{7YkeF$WjYsIkiiVY3FD*0j3@|6Uk|@$oL&4fd&70eOM~) zmJ`l>_;#NxnAd#1o4N=Dno3makzr_6M>Z$@>NaVceRXZw zEa6J)uz4gxcysiXa5WVcEao%}bD$1B9{=czHLn8Ye?fRG1t@HN|9yu{=8yqT&SXZU zvwn!GmP_q9$@WEWu*LDAy0it<0UySnk{+ZY?%9p!fp_cja%Eh;C@tsjYnv$tQlUpv z`xtG}2oEk58rOB6%rf-dDAHd*&6qM6+}P2g9`u>+8Yrl+_2ig+32`| z!igV89FHS7|C1M1-nCV(ZZOa?aaKIu9;7?lDAIN7Douv}V)2~xFL{hKzoZi z>Z+fDh5pCQySycH(mwMeX5yH5z{6%d6?%HiE6gxnHlij^XyKso?tO8tBhHO$_Q!Uu zAs)2s;c`^qV40uqr^yc5)|p<~R1jE16;gE)rY)4VUb#7?N-c0h${X#B!AngcW|5E~ zru(WFR-9KN6Ae)q1p=^1K#x`!bt}$WC_F~lMPmhmF;5^R>)3!n|SWI47@vFm}jERxAJ#9=Ame+D5_k-6EY{1=Gbqq zNrT}dbW1AvDYFE-tm1zTuIc6~#VMDic1wtIzYbpUd%y*k>EIx={`^RkATwg=+x66p zENG%w8HRU00Y{0>*DXV98p3?Gha;MF6WgKZ0h^v8)TDgys*NkZL-S?qf9lmQoAUoA z6t%CW{OO!K6Gq{XvUN6Q$*ADV^)Uec;%hp&W!_-ad}!WKuZMt<;2*1elosBz5XjCC zE9zO>?3T666c_Sj=U*+UwLH?@nj9#exX^V#Q5-ay!8*RgTL$-U=Dz0nO~1t0+>`1n zv9S31kAwN0WdqnSHP^V5f~*+|7S`R%u;H;HSK#T6T5WN~bgz47Bx{N>w&2OnARK?u?k?cT0sHWX^j$ zWuE`#M;w>Q{!G49e=^WjqGK{3K6rzW@VhsqzHGrxZUH_q+J0rb5BBE4)sjhHNlf=8;gO@_^frI8XiF;Ljn2b+S#50P2Npo z4xGviuIk5p%|CnGCYL>Wf%W^AT)vfLI@T;L!$i=+YTV^^%2QwOPVw#{MOoa^9G5m*^zzcnb;=iZw zI(}$%u)16hHFlMEj$M52#b)R@pRoLAe zAhBuE4~rhJ750*-bfuNq0d?-F0kifSIaNdfNHf(3$N{9Hz=TED6_mYEZcWore!k0A zaVN4@h>k-l9fqt#)1fdtn{Uc)imECDxt`&tjv%`Me{77wP(OJ^l3>$%Gib(>a-Kav zPC1-GZ`(3>BNK;G5^n~rEJP5kHxD8L%CP8CYbNobphAgjSzn zKRnlC>u6}%P-NVe6M@B9%TS^j!3mppyTV8e;@w^{}5d``0V4^;8xB|cnG&c#6D3nI#?ZL=uc2T5OW-1QC}% z{n1%GMqUIJN_yR9Mb~KtRoc*q>A~>@meg#o$Lh@w7C%T=*t6``q~TvoMsi<53KDr5 zRg5GxUS21}B+YT!nZ*!2FfGyRM*I2{NcHBOk-7GIBUz9uanK!>2&HV@_j=DFH1>wA z@cn{v^|JzejZsXzbQ&Gyv&}Lr(vy*?12D=aGocc%#WnJCzPG0pd7t7a=$58F|47T> zsB{zF?Em=XPbw!RPe%(9cjcnlGn&QJnR*}CQQi&xLPjctaV(t5oD1%tHN9+n38^b& z63=%~{E7!ETOiw{_i~!b=2EZ~b3MO2)YuGg&syIJB?Y3%c?0_2b$UaxyuR+BeU5$# zVcv=NZ|mjP51OhOe9s6D9m)GQ1Vi(L}we#$U-AlIH!{f6))Uv6JD==XyR?*X54prR`4$9zb6xWUYQ^wtDAY#XPRjwbsRmOfe##CBo zj8P(*Zt3)0FHu_9822&!B0WYf8D)&igN6Y(TzGa}J9ntAqBs#7ceD1d*{1W#%||EO zoA?-K+D$+w{No?YP zq17<~8W@xuzk01xOg;D|`PoO}UcP9s6Q7}va5k!~Q$srov;+5&N=^Ei2)~-B0&7y- zYGW2n=YDu*@(c8!4qMmIpr$h#wn!5Oyh?5S(D~8PB6Te-)g{OHVq*YC9d99HU*qg@ zWZtVgyAlkcxi*cHI-65(bT|0;a&-c(Ju9+oSrog`hb^Nx53LqP1YvE~PY z#P|)%@dXM*sr&~5LTstVycTpfwzn$7r8I6)>QxY6kab`v>1&T#a$=a|6)%pi^Wd12 zxtvDvd@OI!w&sSRw4En=AH8t+l>4!D@0#~?se`5YN~uL%N~Oh*y*qO`G`j7Bv>L$8 zr(-R0GT5>#o}k7+pKY&J%ae>k+{7nzghxx4iKxM?(b{%!sp|*C_^;_&pfsD_U^tNx zZ4u{uU=s3{Z*UqbaK&YbD9On8TsU_*ECo50)n`$FBaG|JI6ZW3l^q`D%G3xNe2;4L zlNdGqyTjW&8hr~p?NsC_>Uf@e@&#n8k+@pDa2w~hI2@UVIQ($Z$W`oU0-S1aux^os|SWhg( zyw3e$c$PJ}oQyg$=7$-wEnmzb_dz83b@s~4ty5}Mzk73?zjRtLgS47wqjPS_V zHkqwiHFLMuUISg?0!QlUOOx-)-UYk?5H5?fYXch~7wc>?qc~JkMV%h2ein+{dCrxK zjNV}%s43BY7QUY5`UTYqQHPAp`AfcNN^C#lPV0O%35L~zA}+Qi{AicxQ<$iUGK8tf zJAfl5XYV|}p(eZN{n3GyuiKoM+7qY70y>_0kho{isin!AmIE!gQgZS+U_xTGm~bDZM8eFDrBw`(;;IBY;kQq>}3Uef)H&foDy90T7poXQCYR?8MR^^px<7 zen|nbsr7;@PH}hiH{$dFv2iuuE^jw;1LBYxx7hub*>a-D4-+aia$5%Q^Vw9 zB9#pM!vz~+8rmzVYPL^raf!JHUT_|~X|0xfzAt@JNkH|u%cRFM*oNl;`x4=0pSMKE z_pp>-z8L>d@`07-efOBiUo){A7N3tGNYz^ z&~^BIA+h~h9E-HZJzW>#TP_z4U{h`IHez?v!gTE(rO+p(d5o^njrw-R!PeGDux!VN z{RtK{4Z_D6v>q+pk;N_=_Dy#~5B_Fs&Ayz3v`9I@^^&r`)G(w!l|c+nre1hUAJnFG zz!y?b#W2P3Mt=OU0VVnkYCX|e6`rK&Phy*4e%(ke$S?aTwf%2#{4bVX`%+fu$r)Pl zTWRV?v{d(#MaAKJ!l4%5$R_;0UahN}n@2J~74Va{o>{p$7I^tY&u>6vo_sp}dIM=t zVzMP3@@%lgGDDBu-g89K^~b0|a9ra!kQ4+v{Y0mR2Z8POA5!HdF8*k|)Q=m+X#MQ%{-cVF zl}xAVS*x&xM06^F#*%UmUm8-T?qKTYGvprfsBdKJ0hw#KbiOqKRe~;RXI+GCjcgVz zRix-)JcLo<*EdXp<7XOb&B33XN>6^~3pZ>HEwg3s+}?rq*xpwzg$P=xli@}m{GE`Z zzOKpB=z1^gf&CsZN3Y$X$r)%p*S0OUQM~X*U9^2Th`m7kwC`I63N0?Hu6=v!)x{`> z4Z88AzqGgYh8-sJ^mwgH!kH;v`NApxtgD-f|;AsTj=BSh-ZVy_@mp(E?f!F$wng9%Y*}BezanlmY4ru)EDe9jD+}t5 z#`2h!hR)X*W3|Gpwou)r2O#XCrF^7ZU&@KBt74+;-Msu`&190^)?-KjGw0`%b=EXu1pQ7iVaE=Q%X zwk$cRZ33U)@l8lH%#%5rLsS6ooB|6LR>Zw9HaVIl4ccBCG)wt%t4Ufto|GQoL z$hD-t1s*~|gfXlPeUhr>PqOTj637pU)nsu;bm`2uhRn(@sy)ZN2VWEDw_e~Gu1oCA z&|`M*!*xcx@Wno2X?~;^QYzgQ?EA^CLb0p!P7ZskCLIaboy&KTm%?5IpfR=vg2aPYnaRR zTgW8m7zy;AqzbQI>E;JvZv_k@S`+~~>+ASW$43gBkuJ|>n%W#;g zI*a4RJ;VtHsmvXzY+P_J8nlhvN(7P)@=N2O+?SkvUZXg8)FthjvY1DCJ`YAcC`t0b zHZ)DpKc_u;VV^WBb^*?kMcWi#56 z-Cdqsjbm-4&L2Z$+dyeAtKqql#l9rv{S%6{e3BTxCT`Ae+Weyh)u zbe7h=)C`baIL~08RiaR814Rxif?^-`enYT*nOKko7^F|ME3{9-m5B6dbDj5YbW@DP zJcJWU;o03eHmSdDQ(9brWssrvKJ40}T-7hG=9|`@pse}v0PObO+$Ef*=qr=~2CR=w zMI}WH6|+`E7NHHLq3|V7ZQp9FObv{5{X~+BhpYYLw5VmFcuX;)IZ${)a%l|?i22HU-bRxL$T6;qD&| zKM*S0vmPQYLQJJVG5d|t1XT4193AeGPaWFi>bey@PDcM2J59Q=sVBDqtL)Z|RV+dUj7-Wy@epUdyf z(N|aBx@>PV79&^T5(NqPytn%d9_rO~7>1u1)c$I?cG0I@GLo|1&dF#I2|Y5jla5HrHN*E;eL;3*+2OX-YyV2F)jjw z@Wht!Q6iBK2mR*Em$i>1po`zmvc&6rFOI2F$Izh2xT}AkD)eTu6x7N+NYouqu5mCK z0I8W!ZG;njMbAy>&=td>2YRPY{+Ztvw%OxT4&QqW0<*2Ofa=Jq>WDd#>pK2YVMMhiiZ1;Z_r;*-Ode_?{0$2S*G9u019HhU)GRt!^q`3UkCMUxrCgu*PAN|xxYQf$p zC=^>scB*|U_XY@QESX)OaSMtbi_V$qmcQOQd3SsyFc*KA1T1Z$f>lzpz_3MM3vJ04qs#w zMc{EzDe^lPfxOs}3~ov>#manjlRhsgoatYk%K-1>X)h+tJF@@izplJ1H8@qN$Qt5P z+n@JeQ=m=&=l^FEXxuGtJ=(Ci#YbIAPxKc$O~pUB&Z20wDpw|vCH4aRHCi=PS-wQZ zvjLLUf9vC0m`R~suaC2=Z&YW=QQousN-q9QdB}*glz@HqV19ziykY*bV|B!!#<{NN zGkNOI8boFoKLzFg1HXA$y|?`u%+c93!G67B1hEf+!Ywnd|Il^bl9ylfZ;m6eH^$BT zuOTmv?7!QXB2zYPQr)7jc8iZ-ToS%pPAkDmO7(`QA}O4^GbE98mqGm@xkO$rtMx*C z#0&JVJrqGvAwyoSU9!i!9JOL@Vv;hr^%%xFXiS>&)!?ZVjt5^$By=jU^s>3Tu9_vO zvWYsG>`b*`n!i$-+{{q~kA=%OsC+H%8pSz(a&{YAft#U%wMjk)3B`b4Far$k!5(G?uze z_B9yim~%Re+8ca9MLBws3rwwOaL@mqz4=Ut<8k=YT&iR~b%wrsLyt+9U&u%H;4FA_ z$lV5hHbDYE4Smv4!OA{jx2iExj&FF-P*TeWRdW6zUEu49ef2ab4321^t`}R+F@)2m zOkbFOA3Z&I+mV4zg=-rV2iQ1T^im@?Bpmsp^s{@!Tpwy@bqT^`f;SpAnx>kem+VY; zMs4Fb-CsFy6@*D|@p{9I+c{I3NkRog4!os0rO0yOoF9FLD5BINP_}&0@jUt6#P_#* z!nHm)3)Vf!-%8>R*-9BsR{i24YGRy2{VtC7V+L$d%*krrw*X5$JBj-RuwuAxWO;vE`H63?lQ2@SFtanxRFTD4d8v`e(JJ6$QH@Y z)Yr|-3Q&-1&akC-fuywS)w#{qCT{G;rbHIYM*4o~&5 z36Mmhc5Fpgg~RNhr~uh4=&oZj-XloXrOjK|WTn#Z7~;QU2zlTKG-d<+o#$fVt=P zbi}9je1mKy&zvsS{iFBn3Qm76OOnHtam(lBvkEPG_AkOM+Z|(r>0g zmJLm*HZX(A@V7i+0e0pGLFlIi#7$xorGZ@3LJ>Z^gY!Acc+thMt9a}~m8YjmzYA!o zPUK8>r%WM707kG3mIat_--hKzAl8$OB=8MdY?NrY`^BO7Z%;j-dBK+CzSv*6D4L~~ zFJ$dpy7IwC;0`mLpfprQ&yak8;9!~(6|~~oTL0w0@1SYx#<;-0=(dV}G_rHgwSqIF zsU?%lh_13X9H^<%v-f-2xP9G2dM_mXvq;u6-WKxk*(fYs}9{& z+av8rx%DsE0(GsWug3P|ZcS9Ylh$4c`;(qjz-y0m(jHSavt_^U+C>-B+__UDWZN=) zwncGDIg9@GH=Q1D5S6kc8Fe2CRqD4ky}t3XYit1cJ*gqW%|cF7tc1IHL$I|TCE=F3 zK~3=2`rGQl9#D7)5fGEpe$QW?^%UDGCB3HAI|O+V_312Nb5h2@8w5Nd5qpg~tZBHq z^;!EOsCnrCo#LT55&d~{2xPxOMN9fmm%wZ1qr#iFQ%^7=I{V7hfhyh1!AMOkBCCXS zEEtMMtj3hPHSUbyo(J?MRH-29S5B#MsA)@vfYakWZj^C6WcCM#-e*Bd8!8c{k8g-j z-RtA$U?sk^*1BTFbH&Yp!8#i~ zJ*`feeOVXqu3Zru2YXck-4>2}6?=C84PPQx>pHViWosn=I(7yG#S*ImSM0n*2oMhH zW`%u5Yh3|8htQA0ycCZoeN=PoYbE!+We6TBGiMXY7-BrYj^4q^WA0<2@eA# z$?1_9xh&$_gU*MV_Vun7DNawrMabd5*R*pV)gY*Z!?zMsjyi?FwJzvd;elKxc?4c6+-|q22cgYu%@56`ohB z!htGJdEKjCO<$?|Zk*4}pS0JN8bz1V3N;7B8wK1ql3copI~tj5M!Xh>+KaC%t-Tn| zFExBp)%6rY@-c8zieG$hBxZK*asKUYdro=u0!;31dJ8wdQD)X!|#wycjy2W-P)JPt}i{V2w=VlKi{m+GZQG5sZ^>dm1`)+6dy ztXv-~3p@d9bV6$Nv%L!C*S-{jIh)1XbSCq~lIVoyz7x*8TK3}ip%3Ko!iVQ5x#HC} zkPurgvj@vEiHDY!f;71+iXBiO{wu{D#@r)8)bEOK%Wr9Bw-%HeIS2lLd&1ja(X=2J zyYpE+f{)We#*M>A9H#aXWZCJxFw@54*$3IrptWHU-49~lMh zGJOVQQyRNPsaf!rOEq~x)$Z7A&B7zNyOYizhdzn8*YL#0fqZ&j2)9$$CU?xR`T(J( z>OTP8b$^y%CzpY)N4sIUfs8)2kmgm+jew4z)ZVzbGm7_&WlPoz-;_$xns!CrA5{No zf`DH@z-Hi+4n4lh27SgeHF+BgGXn$lVOZi6BjVPGhegsco4+uOqaTpd({I8z zw*Pph@%lQ{!TlTh*DQ70R(^NYPL2X~huAsCA(Thx%|7gq3`Zb*k!<+molu`M2|_E=b@QL*1cd5Q#gX5@@GsK z9eoLfAIs9N>h)r_lu#QnTlK+>iR)EwNRqc>tO}~6j}BEtFQ#}CL2@bBkZ!+`#nmb~ z@^_Q!MdR6`nVDkDOWRsw?5}leQ$M$Z>e{q>M z1T{LHa~};Pr-v?!WB@!Zvp|_hIIQK#3s;O^z>N%tnz7Nj1s|A-p_0E3!clJgX3>h( z7AsjQw)j=&Ma5?OI#AYCz?|9KGZdThmZk^C%Q{J|nv2|lWthd(U$mx{ zr@0Q?p{2l~+XVgWqNO)X!Y!&ZcJE-ac~6k&LG9u^sH-o@HeI=&-7m%rZl!ngggDGz?zi`Xl%T)ey}YG!@|t?|XZ8{dsq3yfA=2)q z%jpmY+j1en4jptmL|0E0q|_5fn=m~2M;3%Li=fUx*4rW@oY-c-3#M5+nzJ=;X`*Bk z3$X`!JAKs;thQH71{7w%ZxuRfCm(AnZ3W>!7UXJIH+nue;WtmR643*QOut%~yaUCK zW+ms3r7T!t6&sy05BLvsMAzW5(8e+Cm6l5j2s z6$aZ3J;6VrQgaOUK3e=8I%beSQ&9&O<(38@y$J#NZ!;VzD;#?f3YjxPvLJg z#D7iAGF}_drWFgp-hM1s8rb!#%PKEM;ncDztg?#mpu^uBtfOJ38)rTYvGOv19QXQ4 zg-Qw;&tdLc>8~1eEG{ZL1B_Y7Cg~h~svsFs-U6U$v8t`#fgZp8WT4dXtMBIyck)*% zllkfuBRzn}So~+MtW0I_mv&3JYS~HI+N)dPzR#x)#5xMm|8)Co`o^ytS}-qj+H+QW&~u(uYeps&3B0^^&n{l9k0IIgf?%(9#f4TSRDA?k+>yPS=ffZgkP- zEjxzG9{wJPfL2DSfkGCROBjL=%3H!wFXrMQYDMFH{i}wcuVoG}W%ByXW0vyb7tev0 z^UQpaKXPb@TF;Wm6BxQAI<{(KnH10J&98}0RIuR=QCbJ}2muw%98D#hFT_dFxCzG5 z%`1?s*z@v)dOgFomRV*8vro4Byx*g|oWf(#15u(3M!$^L+M70HjqC^kDhCO)Jk#Hh zFg|;5;1E8MY0$A4U~9pJ_}U4)tqZK#X2HA{_lXwroHSZL90PmhzB`&t8qX_~xjGt= zr-xoNda3Zd8Z@j71(5lkH`Fnb=Vj1YF5H+3;so3TY@3MfT72-IgBHVHI0$QGU(S(KQvC|+?-Qvx@? z*ZM!A&OMOn|Bv_IZd8&|a;K8y5|X=_N|F1$5i>$^zYb%pQk46B?ke}|%Kb8TCUc9$ za=#37zicks+|K%a&-a{vKmUK;@7MeJdOjb|k+KEoty>O8ft!>&&A#4R1=v`Fcv@lE z(6voRFAKG^QsP78|3%ba2okt=T{v}@Ujq6r+*fU)4Wl-OAap!agF-5;Dd=yObURVS zm(Ka$NOS+S8%VmhTii@5ZeTWr#n9-68%m3wGUo7^c8v^|4FP?5g! zChO*d+1Un+yol#}h5bAdYY#%mXNU$1HY~hF$i@%07X1SNdw=D}eiQWa9!3al2)DR%pUeve<^EpFcby3P~>BskV?VkketcET6Z>{weH4;2ZxjOs33tP^K3? zYW>Y^6kPiDetM@=pXJxF-p=-v1&;pOGhn9l2772x{0G_6KWfab+tdiAje6;ai7iyN#F6%M3% zG>ND0l(^$Y)gDPbugV+^c_?CT6HM^zF9jr{mTgt#$_~~$yD_$xk>Zc-4n#B(vnBVm z@Y8+@jX@$HhrnlL4r>bEm-Q5x?&0gi>7rvW^|{s5DamqJ+6QL8i1EC<5gPE}`=5Rff$ zZLrrR|1gP$HD4cO-CVMu>sYAm+0XxC4y~E~J4=2(#(;X-2rG65-=+huFFw=edbxo4 z1=PP^QUL$i3Ce%-(rDsgiJ|-hw>;}fR>hA&ix0-mmSi@ZdyOfUJu(XwVL47$H?bcH zcsgE|ezipSt2%VHJFmou4N)4QdkSq5JL)nwAJEmst82bpGGvDiL*Zr|wE`bT!~1E_ z^&eH}q7nmyHlQBsg8L=*|LzMbdFsVxiho8Ze_y)E2RJv6h;(qj{*9{j}LW zy$D?FpT|>3`_Nv#q239DbwEdr{c(mPN=W9P0}_N@ zMDt2fapp^4;QmZP>yrv_uA*5DL(cFGP7hY=558S^0n;>fkY`}RCbhE1=>jUxMQLI* zx@PFzv@PY1z=2Sv-z)sdF78khlbjk3pewSBH4~mau0~+)!&H`)hKRBfiI}g6bJH+l zM#JXRVdB?B+s~KkZCi4gAugXBgF&F(?rRB=amFEw$y4a+lAYIz3t6j;vSrb2YSPO~ z6MbFh9RL~Bfb3*$>bJx<^Eyew~$ArUC$x1+T`)t&*@VyP*NyPGtPC@z-W%fL78f;=B2=C>VM2zRS#{<5%LybG>5Uz(7b_^NKqlvRJ(U_tNj z)5#4xarXF-hqD@mZNlU)PY5$s&Q~PcK2ziS1!yLfHnfO`ZC}T|SKo$jiJ<0Xx=^y{ zhCTkroi$D#*YtoOK-Pc>pUF`}c?Gygo>%waiHL?8Y&&4?S#X@e%RSYgo=Ovi&%Phk zca^gmDn~9JamK&+$!r|y8qMViM+yhLBL8~o@DT_fvbTYKHX}*5OE>F(E1x1T@sOcfB zY%G44ZU?cU>H~|9Q%R}Iis_1@-I2jz``z{?G`KAPb_#{)#hAVA{aam~{MmrU!>9zb zp%pdXftdK2WFn<>O)Q5oViMG7f_&l$CQvJD62m zjRzS6R( zM>s1nJiF}Bj|b6Y(g4F_^iV2v+gBwZV`jHm8BkZ2!%fbX6Q~JZUOsbn$ZRRV|9yFE z%y=7vX}<*V$d!B1T7s@o=G8jn*y;NR(B=TC()Jm=n5ysNdUh$qHHSW%N*pIknW}S+ z{lIHsBW=de_-g45QZuy&umJx95`p#0Xmg4Cv}|Hp1CtrIv;}aW+L$N@>Dt4~5_zz_ z|Jj1%8~-yp%!SC^cZyy`K07=SBNW?RB@0;o8aha1*Wc0XK%8PPviQZzJDj$8Y}uF} z_c;xm=!qJG7n6FVls>+I&SiPv6OIe-bVoiL67Y~$^k2y1OOzSDUD=keiQLtL*ZbRz zdkjugnI%R!Q16dd5rjpauts;(8TNy)Z_%#etCHAk^7~f53!~K~T2*El-WoJPKC$dJ z7oFDF<+%KZStY(E({y$cAWP^@3St;UX}pNqf|}-YXaYW~2cc-d#0W6N9V|S3w!6Y4 zh0UAf(ornt_Isb%&{M;q)M%57zw(yNxvbSTqxR7x;qiNELp@>d@STHKw5`W#4}OIL zE0sQ@d?5}-kyo?pGd^~eN>|R+cA-5ZtoUCaiRkGIk# z3lESLaCxWHL<}mLU(?p|wFe?EakWL#z(c>*m+kRC+Uiz(6L|`4E2ov}G&2h^?!;w; zXn4G32XdN}5g0QdaPxAIZ)QfU4mMFUQ%ENc6u)1ZAje{Cqbf)oRllY(B$V};5hg>H z@(X_Fl0pG_ig{=Pv3r7$#i|i{brQS6Wm4C*m5F%)304Gwe6)!;sTCia@d%oV*=DP7 zmYaJjpcSehPT*ktwO&fsy&HhFACC0?&ZpzZ?5t-|keE$wfhS(JcS9|)7m z{YQKyP1_Lt&K~&)P~S;)n@0Bi1%H_!Z|e(d2PTt6RI9}NW5fnA$W<$votvioOC?_^m;d4vs4Y3HBfT%i;R<;M4Jg_JC)`M>@OcjxfX8f|4>ELr7( z2(EkeqUNrkM|-!!r}VT%!NncLU99X2+oH`R(f{4i{a_5nAtADeyX&U9A*d=NOkZ86MyNsK*=(A2XrK4c1{R6xAX*A@$Jfl@~G5?xbtcl zkv`%mifY@z%xl`*N8{uaTJ4w)Whrg!vJGY9;uE{(8R;8S*Z!59SI_?^IlKCem&^Na zmY=V)p*BLzKBOyf3$310@5GoNpUq&c9g`kE?Gz>_e%;8RicRg}eUX}n8!!DAf8_Cu zzlY=|KUdAu?jl`7c2tPsr`53yv9F*V*CxIcxf2-p+Uv`uoO8Ud=gb-+5g+l?7A_z? z=)J7y*j}W!77The5MdO^-%6c}gBg1$`9lLA^b{ju?`{zjU6^iyBiE6B zE`7m%&%Y9j?Q@=Hx5ZOEAF3>PCDt@=D@O{Xgf?jm7UK>Kw;TxAuwj`XAYd($R8;GP zHm@=l3{YBnBRwZ1@=6`{0$Muvx?ZeiuDc8{l20IuZ(hxE>rQ+0%tOei=t0w}r~6^UVe6+c}W!#|9Jt z>Y~XRAps`iP^m}XM_zO{J5~0}`&aLuRt~sUx}u&Q>JuZ~A9({~VA-SAO-HlEts?tk z{w{g0$%)l2S(eye);%S*D_?)G(a_+A^5c)xpyzJ3T7c7vnHx0gsO;=RT`psE%)r4S z^1B*8tc+f%CDl8-`2C<6m2b#5wYHmA{@7ajPsySwE%&R5pt;B)ex)`^{n>aJU$!J? zK9(sV;+ylEn*zdt_`I6qs#}MDo1XoyHDa|?I05un3~C3JMH+&?@cs>rOm#a5E5~0n z_H}vgbXmei0+K6O=SFu#b#5;`|Py>$D0PnJq$BKv+u1OCi;i*;?Ast|0>+&zVQB@;*aZlx?7cJfWP895amx4ms_EtUOsvA15Z@uS}RR2#6)9$^UsYHTD zR45fe;KuKj-ahzezc95w?%`P6|i3H(Uj+hfL}@%7X2TW(V# zdu1k`2C@%c*m)y0cGKyGJxV{uZBl<}MY`?5E%q9dqYE#7xzA>%UH_a#sL-jeHwjyf z^#pk28@5gxDX6}r7tbu3)KQg{-$6r|w9SVr+HwiP{@d~a)lFfaHFK`&QFC4`#vTb% zcisfQm!W1s3+5!9KX}c>gvn!;w+gWq!Qv{U+5_WGdu^n2DGAJ^*Qw8DZ>(#=asnbr zkBeL1(Mncn=grfB(bH@znXVh9TiRn%dj3709Es31#{L1U#)#g)*q1nVhDH@SHIa@c z=)g;BW)}O!p!E(fzhBH@qqnwsrmrYA=6I+}5L5DXMZet6xHv4LBN(qC=P$5QW_&Y; zQDV`2INy=qvhVRZ_-VaMN_s;r%lCY{oy=rcT`WuHVehH2ySFX#w4xZh19srX+np~I zHYht{pyAo`VTZ00KJs$V2rYm8Ii7(uO@$WTJ+qGgVRTwB) zyfx2Roo%O}x5wS(l}{KD;|9vzr#AU=IsvQU{?4EGCrFK%37L|nTh}Wxl`CE)hfo?$ zN&^q2AITvL=Aa(;n53qQN;VGe9o~5?C~;xfbS%(@k5l5HarS?#Qq-J`ZW7yjv|1S7 zg9%-!39~eb91DW!V}+qA89TEP=-FX-Sy%Rfn_@_i7h4h-Cb1S_H0zP>%GB zh4OaS8cccydHgOBg^2!%rS! zd>K}ig}=~m9s-n-meJjle9d)%owt%S{5~(-Va`XNCrTLo%Ft?4&(Uda8JLQ{KlHqR zSAco_N5uMaRhYvDtPJ~bT2k*s3Bsl0VcGA2pXyG)SpIrrr4|iBry9!pT^`tF#Gj=b zkMwLlyjj=@Bgo<>So1BlC~{M&{e+?khGOOl}6*Qk!ke+`%Kgj8ww=P-`c?h_lju z1-jh1-@>fv`qIRse&*qCmR$}UHRF}MEx;z1R<$NkK!#&e4dkWjhAem2YDyQWD7 z!iIldbV!g3md1qZy{vl`L1FD>eb3u3l_Wu z@OJ6{tA@6Rlf7*at-CEQ{$)m1pu!3-xDAEWJsMA>E^9bJvKb#K7aE?sbX0Z}+rJ3``?@ zAQ(f5HJW?#Y+1$=70eS^LtpOnNFJjN6LvNtL~)X(D_IkV1AAX0x{XFOrgN?lKc)u@ zMqU#c)t`+omw_R@wJbDPNJ(}q%gcTy;0f1$H)&siKLPJ${VHb(PMwz$hF$HsY$zF2 zFR#ysNWNQ1SPP6E;@La2M@;$bvIJ}MJ89$w; zg;eiMbNajS6skBsoD3NbWKx!jI+eE8DcV7~kU84+hbyA<-btITg6@JKq+{n1^>P7kS*zx*$L`$Sua8;~C5sAei-~N?F;p zhd#CeQH%eui<(Y-igtLj(sWP3=KI$uS|fpO_A?Pa!v-RSVN5LLhFYc^?&wW0pc#Jo zjp1V6O7)OExll`KL`R2Y!)_05V-FXMv~=(O;W$PbGwn45_%$Q7E9dO1Ez)qk#g(D18`P zI_+BkL}DRgXroJ?NP6`0X41LeoF4O=2x6i`Tkg*OD*_mgBLOJCvy1 zpQs|p@XWf`F4XQ-@q*$6vERhD!|p!%cIOo9IfE{oe?ve$iYG0tLWmp9ggV4#9kT=|kU~$s;YL05CKm_Q?Oo+MXysXn zTR-P_VwO3{>igMqLk|g`@}K+9n;80^H__yL7s6+bFi~z*hoCmvP!XjPNkuvdnzM?A zBbN8_jn|+TD`n2<^$zJKzSQjZQ=otv|}*?e`pYBSXnaUY)G8Z!-IS;nxmpv|BQ{!D%e0qvmrN65?KDR3<`yOt8d}vq@w`uW z;?6~2PJzDPt)(o9KPrtxw$Nm&h1iC&akW==Pe&mRt z;uFoumQLAXI600H+LO8OCax~A&?q;qFrQ^bIQ~tY;HG0b->?FaJKJYVDsGQWf)&5o zj@y3LuLJ;_MCwax=&!>bRFEML zr#n_&<7W09Sah3BsBO4x7&Mn3O8M(-%)(E?$$bZa>k!cHY=#ztX&9L~L%q?E`PHW`{dO%Xb`^+`; z&AK4Atvajzo_i8Rhhg+(fz+KFC2k^Vt6IFoowfvjsV-&~^IyWZScEArMNw?m{et{# zJ=^a`grkAFjB@{w(1AhAAv#0}zp^JjbspE$3LLfw(6{^m0C83UQ~SWHKl&kyA9Ju| z)2V($&hAN68ex4qqw5gidoLI;vGj}D8CjwXgqbid^Bh`*5SjfHX~At0v#8 z69(zw5OZ-W(M|(bQy2hpJs)%i#N`b$@~K+l$t}Lo&9_nOJ40Q3ZDtZBVO5cdj^6sS z?uY`h-B$#3_vjH}exc1RdJ@D%yE(J%2#JWJadFvm;9E&9(uP|vDt*v~?-pw*49OD^g<)d2lKVeAB&(x>*g!%9-gWtmW{b{gO|7}7x9U~cTinyW`b5b#YdbOv`~9bbh9aqCY+!qH$p6R? zNMSH1J#lr6L39=uZVgZp9&>Cac6~3&9_X4aoY41LT6vNw5dG@?Uq9c0uWmYs!0(WL z^2bj*I&dlk=+h9Y()JhCjc~qj5)Xm|?gr3fC`UN0?>^V2op(LLtXg6FKLw%-t`4{) z4znRLpK;7K+gVJob`gB^ce`=thb^9ehc*p$)+N&fR29uq$!B(*I3HQB=_W_yZ=lKj zN9p<}2>N4b4K;f3rwdpO8CZP@s9!T$Q3p{HSK61 zZK=t*n;~(v{4VwNQ`BJcgKv>Ia`m{Y60JiB=&|z`$0FaY#b+wmJbyu}S&HkR*B(f| z+g^^t#5cUMoEq%vV(UA45JcXblpi0g=eouk-77)JddAVWf32F-*SWLrOjM7R{eP zfIJl%db;e%S;(T}%m<-+C=|*pdDR2V4M2ot4lNi1WGHug7;il%mt`-u?VhG6GJ z^xUoiKu}9rul1S3TJs>0YI{_q7?8R${ya9_&g6TZ`>ucPE%U`$Zogp$k=fBaOIQ0p zU4(G*gjLD)D$W<%XSd@Z#eNq|0{k+~(am?F3NN8Zd<#eq(OjR8#Wle-&^`J&G@G;l z#gfa)*qZIR7xv3ai>mu0?W6I7;olR^nIIPMc3-*SK8K(|>y82NgiKJGZNAm-fzLz- zgKA9!e|iT~#yuBNMHu8!$|4prpyc5NPj8x!equaTTe+Q2uUlotK8sG1F1y6S6Fnba z1keB4Rr-d01_5;u(edk$?&Ot#kO0m^=Ut!Ygu;vVZWY*vDcngE-!`<{^KK?T#n4_M zSY^DKrCKMQqmEq(Yf9u%7GLB`#jdfe_jCsj39Tc=^>G zrXIE7lRf$q@~CiOyrRKq;~f1+m!1we8DRCcNkc$_4OFxg^dp(U3T(}gixJp*j)HlQ zUBvysMU%ln0+eKInRgu$Xc71_L{BOvZaYC1`xm^DK41921oPsrrWw@Eld_d{j6;m& zpG;04O$KtgpquGw03lCR(9>1NvgV_jlf9s(yQp0MAS&H6@ige?mL_Zk1PN`eq>V2|?)o%!|BCvPAXL55&gJZCZKrw9=%&MXea_I^S zRAbXCF7N1+nmj0C&9Zs=KJ?BdBhSEgHYf*DfGJQ%%K~=B7_fkX$o>At+!8FRybH!W zD{=A4=tS)59lg5Q-ug7+!}(&Yx6MiV38{>-vdY2wK&7)b1j^?1a`6O?uF} zFsO^k++!GZJ#fr6{z;rst@%M@kCfXc_8xXx^o&rh$>`XfIFfFfwc(XTH83bE3RUFW zweSlVyDXZ0JKqfhU3j$@TcvoX-@NOGcwkcey7!yupFzXB;I<+6KofJ9MU`pVeQ?;^=}4d%$7Tv=jaw~ko7Pl8%IyAL1HsZ%HrJwQao;0-D$rZDYpU=Xo3mNde#gpfupZBcT?2J z_gv6U8+Xp|a*i#DJaWNeIT(W-It}2k3fhvoivQe$GXiDwKYCRN#60H`(zn)3l{;A+ zlsIgY;8CV)bO(pKKZ6S&P0JvRj!Dvj7J^B z;_6{5WkpkUg!$L(1@OteYF8 zO|qdc!>2nHv`C&#CmV~#U`r?Rw+qTv>9by7G|%TuziZI9{TtR7+&7JZ`>h3XbmtTBRZ=GWMW9pe3_KPlT3C|qwxxV;ls)z|{b4WUKek!Q08b?^4o1IGfCTus` zjqQp=ZzNWe+Bs&@*0pQLq;}6|X1#sDgR-m?Wq7m0;_hjdeu%79?E4Jj)g+yHRL8g7 zuA!loFSJ8;y0g@XtRo2_#`7fMXp3X)8yDM=YZY}>Mzdsi)F;yi72y!(` zpU63Bx~HS}wCT%SLxcC!w<|r@sCD02DTTricrGYOGj@sUZ!z7wkFy+p<<=AOJog{3 z^dh%Rgg8e7b4ZDe$%tzW_Z)$#S43hA&=@Sw9JdI2RhHeojlG*zQ`|CLVQCp{@d*?& z+aJ*NF%HKjL^tVHw5PJtox`~ri?h=Wk@%fgvAoBI zP+08c1yD%oKR-3UtYsyZ0lAaA}>p4)GZ%Ngp~_C4$nHSEVSy-)Djr*ogX zYXI+-rG#M}C;8|B*~07Y9nEyW$R4-vSTBwtR+e#+=>^ex`AVvZ&5KSiHi@rSbS2cN znIzfep>4{&UXSf-MdA?f*GW z1O<4JE5<;)*LirhlAPR66!wf_9AxhlivN%$;u2qDDSEPjsw0yLk{$?J^?ZA>0lQdF znV?rB!mf|CX3fk_ZSGKBUtuU6`+yHY2JxQou>_t{5#9m1LKBzlxfD6e$9KKZYw^dxu(Vlr zr4e5$ShL#-Y75#YW z$5!T7A{|laACKgm6|fQGd|NvB<=f;-(?oSaq+vh3OILZr!0MD4L~r2E zBs3icPHUTA*4s|Vx4p}k09U>#0W2}F^)nuhrOl3NO>La*&3{m9K&1`vnAkWMnhikZm+$p%Ubepq4y7zPInXv#BvdndcI*!M)&ny;R@jL}uC?zYx zutRbf?XeP4Oeca8+U~Gn7hd&YUXjx7Wx=_OUVtYDVjBZnS%#~EySm)=ta@cW(>ovQ z?#3T60Bl=*69Ha81Msq&CIKH+gb;;9jHgdWo%C{#3`<=4w_u|%*x{|r-^&(smFHws zIC}qnGe7u-brvKDWqm7wuT;DPfqNC@*YKKL_TD0fetDLJHHgaIF7B%`?xijojnI+S zRA_C))*b*ZaOvX*;_@zuSt=hS;$OTsYd(a@DoVfqT{K~bZ^I5o87rKg&|lW&er?YB z!o{1_a@Nb4`>Q2Gr7m0%Ztx9C$&1VXHvK7I1nzll;mSFmJPqK$VHCHWg8Y09*6%Il zk!!ze=YX7V{Ed4yQaVE1aUlXPy#s&DT_vg{XmB>K)aW8}GE_U|cqLp~13EU%dD{kh~0@LcOTEZQ&PRZ^|LEGMDD`~zLent!#QZCa3DKNJ5^QttA4#2)}k zgkMD`{YZR!Z9as%yLM=NHK~&IL)^a3&TUje6>p|xlv|PFK;Bw!wa>ZQ9`L}xtURVy z8eWPCq?yPB$zOi7r}b{Ecfom>kyYr@MI(%2MtrDfrf25brNTELq@YPtW(_%se1)O- za9@5Dzth9;(vD*p_EvB1bm=_-s#K)CAo1MTO;6yqlRg@yz}v`Y)|`MWktrEiyD=Js zXWh)_4_NyFc`4g^jN8uQv~C=YBVBBNKd{}-q5`*wgs|nT)xf8A8oA7MMRN|ZiV^c> zK|K@&%NI6UbDp_hi*TJelP|k?PUwg#-KHO$y^FPF=MSqO2UXeTu61@NVD4n8--DRE zMKh_eq1VzOYNt8v93D2EM#JU#b7I|OGWkyntJk~HN!d0k(_X-ZkncMImxU;7FOk=t zsw+D(<|EN9MUm2*CQ1(14*s&1rp6O9S5eJD{OT_I9oO{M2ydE7BwKGc?D6&OKo~Ac zjs41&ceL*WP4Wls3^vw0K8#mdc_pv?d*Oo z$${O$f$PdE5R2WA$MFzIKKzbcw`$;B{3njGe6-ONhu{Mi%oc;$duyic7WS>G zPkip}$?DKJfPRzfqr2!>9jUTcO=}^EagbiZm+*mw2mQAsPJz0Xl^CRFG`qAvc>+^ zSe`B2xp^+qv}@_AN=}U^X`m{bgfTtOxrE2mBZct7lv9_=bb70z$q1R~FW|{9QKG(V z7`EgR)k*hW*zeV|?$1z*+?CN&U(cwS&1b3EOd-4ii2yBl71QolH%uzguN5)^%16Yc z{4YZU68z5;Sx+ZK_)4rsM2khsKJ@81ZQJar@v$^?p<>|8{vtD?4Nw}&`wdWheaC$0 zZct`fk$G+b@a*M6J-b??S(tFxciq`)ldGWCP7!4Z6EpueW11dyCf1`1_}1~S=jp<% zmP30lF(X8E`D3|VUrcl@n@jzch_bxDDQVyap#QYDi^n}TSo2&C>iTQLBD;o2Syq6` z2{6u19H;Dd{SWCwu2F}Dj{dCWwie?g2PhErrM(qLtjT#ir=M#UEZ+ZetPH@?)0g9% zcK=t^W7i>8xt@}y=rLF^x^!wFBVe`arWs~z;vT^`23jz*xL<~_KOwp6;W!!Msvj2h z!L$X<@i&(Z`o=|WMsok4ekK*Aizsh?KDhxb!(5R)E0r~$cBo^a9(aFslGEHjX!&zd z7-;rW{#g{x;{l%Cc{{I;VW*0TTLmw%>;}Q4GScgBHczHVR2eoe?~B&1bK3GwEw48= z+VW6FpF+PUL@#$&r)I}S(fr^ML1+C0PTw1E#QHbytul~j&Q#8%ai>akdD#f5e7GnM zx1ZclG*o#D>gy83x9DM>i8E=a^KE=)<1#?35G~VU2^^xwDD|g+l8id{X?DrD*6}+IW4kC#*kW@=e(IXd zXVuPCu<|uf7xPy6;qPx*cJ8^FX!ti%A1Pk zCskK>H;*Tqm6i{Fmm1CqX4M)_zHQ|o(m#J3a)H&2lV59{kDS-T}}-MM0zZMdqM_;ED=Y$ z=EwmFm4mg46X=B#(#Ca8rTdgMdaYcnuY`AP9ydfCo(^ah>~lDS92agEEx=4WqBn*;Ri;$Il{KG>UVDIFSl>(uB`jq+ZbkfHFbM!juP&XxoPA8| zeK@d2Y(Nk<4>PWz1S}>azY2*NVtEHm^>&&1x$XraGda?lyqf%5Op4r z*iHMv62!G+H)LXKE zOzLYiAy4lFLe=fhFFG9l9xCWhVc7)NYsS79#5cQqb;{!% z3_mgXQ&4Ku3K`CdY%;C|)!M@nJ=5VL&)h~j8{>tnDfo~U?OjRw(S`_W5@)*1&94@GQ#?>WI$uI;*3&#YS5s_2 zN#KR`1;x@h1~6ouQW%CTclxa^S|_wLhG`%AB}FdTf~MTt1v2(ZDIM~L_H*1QzzFA?CCND+6s;F2nn<-%pRwR8Yi}hIEOJq_FT@nD zC$eU7sHDCU-}~i9XTr5lQs`~Ri_uAuZCxibEXOm^Dks!|lkP#`5Z$D^5o3prAFF6D zJS*bZhfj(lGbht2F%_2IT=I+Z@ zcNnQnceOr-UgB)p$(6|95CzaZzz4ptKse+vuVQt3iJMdNWX~lZe7E?{j66xm7 zPl+BsNFRWL2whe7x%0<6Si??Kc`-7Ft zB$x1NLuda|+yM?}7#XM-d=pxh2OpB-)enP;%| zOZ(PTsf1nu9mBZYI|VW34t@#fbFM(3ty#xAhTnb7f>FBHD12k{WBto--=!mb0rfIB z4)Xz$(mTLp7sn$+%`cLW6G{2sv<=&TgJqbNSp?eG%mxlO`!rE5_I}Fze%sI=EW2^y zlaWMrUcXe$Q*wq3(6oKA5fOme#Uf*O6YRY%xyF(^$Avqnl^-ES>hZ3zW>u{tK80Ig zqm_W;D4d6LNX}5T;ZrCDx*+7Lp#@^~-hGRlRC+!KG~@~Z=xr|0gi9}`vlO{YxP_mx zBK^3@%&it!-u|FR{!Vn5+6PoFnS%C})&usC02>7Z3pGW7MHKLfd3)hp{^e+~Gze0i z*H*dcB*k}c`LOSJ16KDc&Zu$B{kG*oRp)_r)WZ*T?|V@dFUgA8-t^3gp$UVjMfRLD z%1S56enOL>uC0nLXdL&~)Olchj~gBs4Bu5(Z#<X>Da?|H7RtQ+f+>>T00GP zhaXyNPn)Ra8kX_!Jl^d~GT@th4c#;7-0eFzAO!nEypz4%<6tqI*q0|ZKroS_w@wZJ zG2Dgdwp17(r$mZ_EE17N(Z?YrzGK^Bc8v#rUHlC(dCUrZ%Q z3#8m56gM9tPe@Z*iDf$n(I?v~8>?G?ZNA@NtSmsO7Q;+G18FMd#-`H7sASht2|si~ zv)HkJc)_diFhJ(9oH+lJebt@@4lYaPa@;A^8xb!^jsUqF%}F6OA-_bVuq^G|p|8zt6gNgxYVNcOUZe0*rvcbcy-X1}lVy2j@>ghW**Fd% z_u5dNL1{*J@_7mx%wQru>4d1H))#b*aeK)ZxVV50InIUb%P+%Pxu-%JnB4zOpx?E)_5W_I zmcI~X7CMB?JgIX}LYyhFA?b@(-4<(3T-5HTtnyJdZY2TLTt{;E36tp+CF6@Wj35yx zcc0noxkS61Zz61ioGNnfGx97$B^R}6ZgWzh=FvhGpw4Fa&=aZ(!^7_c*{E`9r&+!D4PMxM*+zD*TDH z!$ErgMuXg?YnH;{<-klv>ka169T+cUPs_cGA{(h#9+YXnmz85O!vAwysJ;BCoVVQd zZ5NbKjBOb?@W4lxPt6mh^#D8w5C>81Enya>#7EnWN1M;rX8G^Kk17M^kh@>{a`pF| zJ`@8L+(dEfqGHH_wAe(xH8g3jcm zO+4X|GAWEHpA&Wf{n%f@)=XmvcH=SjELlNtoH69v47xqVY#fODH7)`ZBlboi_WBaq z!w%@39P4tOl4sq4UxF$bNpU)o`O!F3TlA)L?ft;lHO?Y|uRbF-esu92q%mD?Zt8%& z`dksDKC1Ljn-f)mc=UC}>q27sSlou@<2_iYc)GXAm@6>eLo_wQw%y^qW|`&1J6X2J zY+%KguWJVsihsN)e;M6V;sz&h2b?MD)!Q7ql(?UNvc-SgK8Vv(X>1-_QJSXqAJ>ul zmGrOyD~0)cYT7Jxp3HG`Q_nw6;fy6=c?z3lD=!;;t?5a1{2(2j@4LftGOGfJbt#I* zBnE8M5p8+cj!B;cRi!!&Qk%EfkJ|<}5BoPO?MmOd1qlcQdMS79I|s}B{1GEL0O512 z6)Da3U7TI;mG@bu_`LXC?939 zqTFAD#~wGgrL69GGYdk!M_XRLE#_!!oK?p9M8BdfIvHo-<9*9qB(Lnq3YC%1oa8c| z2913EmbUV&VPP!RcZonoxOZ`LtTJJ*xO9VDN~FGOMJdfZM}UXclN2+|g9ap^Xv)F6 z|684`_2EBh_rl?Cy`$fumVvv&X~>V5(jIcF-K}!+v!oWbGT4*5Cn(`=#ZKMCvM}{O z&kbZWH^Y~VEh4X5boJ$#u&cC-C@5)BQYs=TrSt$5X#vTRLj*)bx;9coK)OM4 zbjnadYA`}-lNKj6VvG?|8?jM)=6!$f<9Pmn{rK5&y|3$ao-gM!fzj9XjGrAEgjsmr zeMc3ih7;h}1SNfkIv9W2`7kcEdnUw)sx#qKmP@V&G51?7lLAmP=^>_q%NZRmJ)HKJ z$9~G8BxtP5OlD958SpNo`d}D&;~-d2+;kt%a)-4Uo<8s4ghc_rB`f{gc<|TyO?m2!>d3{EWp~Mjq zzfh}HPhX}5_K5s83Y5?O&#LqW?CSqUTKbn3FaNSRuIZtkE@RXeJ!a}iU>1h#N8gc$ z>vr)e`RrA_FIwsK9iO-{;)F@oEG;P?A9cLocKsSwkKM#wTbUP?5Ys?=(KL2T$t4ZU z5HDC~B_|<&Glpw?^oP7Ng_|NDv!LL=Z$|OtDJPnIy4Keg7=AmExYE_rWzbfNzeLbG z``K#7D+6!^_Q%L#G?|^F5-`Q2%3prD4_Okeo)E~FMe+xCVDRJ*3KQ`p>7MGkITx)6 zV-e9)_FI0AugO_u(_d69E1^VxprAzJP8v;AgPl5**?O?_M$&Z9I2LkYa?)bJ3uDO0 zuQb?mY%dr%V9XU9Q*NA0C`kf24NM$Ih$eRp_5;cdK8R{{8NRRyUElSxz6hV|EXH=d zoxRJF)~@nBwJha;*`X8~E0fw(Y{jgjc} z6Ejzg&*ld1=)OAgLV0>1qmjkC`zCdw$Jh6UTy784wu;x&;0+ROckk|_z7t)<0In;> z@x{#IH?%Ti$Z@GTObw6#?wvC%gj_qJdaORKvey0jqF01Z2y6V|&_(=VTI|VD(4XC( zObWdy4-1LL(6Qn+4VWHC;;p}8>a*ngEhPuKaW*Ha3KO6czW;yWGV zYi}qCboB4qS<~tM(33bqvEb+Vs4Fus?>ZVE=rZ5BUHoX!omKDq0PFz-VJun1Ghgj* zux)=PWHS!S;Wx9JhNmSD{VSN@`%l85<&PYKJk%b={Ovoy@ShzbklJ?vtlZv!tYkSQ zxOI?Mim64!wjrr_cF0}RTbx}~cy{hsUfL|BNlclAS`4SH`VW#n@O1Pkty?zTNY>jK5_KLpWY%ctKNmaXz4(PPV7^qz9HLy^$#hYiO7%Ct7JSBQ6bZt;ojd5gkJkyn1sb=Y^TGyOKVqj zt*9@C@O43z44@)2gVf=5cl%|2NIB)FbI?$a|2X-m3t!R!>KxE=)Qzm-KD_Yp86EP z{ltMrVQE)}~?BZ>AHa zrUtr7YTT3Vu(s75Bd+?p*AVJ~#{z{Td6 z9JD;WjSP4WQGI;utvZQ~C&u=I5&0tr#T z9M=5u{>rr4^c0mlGpt9;8qVcEhFh0kJA4q;JyB+j%KI>iIDDIc<$1S<;1&X0+1#1e#v+U6THJS-+_K}5yl zCunh2K1beS>C;fts4DA`+G1_Opq6;~bFD1nvEd1Y&FiZ`MeUJBDFXAk=BLxdgSt=n za%trR+b$f4ErBbmdZ>6LXyu_G8at4xHr^BeMFga!qML=oCA`TZ->+4pqB~%~QgiNB z+&xi1U9I0dKy0QmMGwQQUtGdumr#$Y{esf^?HBnox-B2BSQj%hC&RFPATvq_L*$?SA-(_U>#tc@A)HHn*JEngRQ}oc!pz z4mopv%3%irBi2pu@;^AVTyWj?-Pe;YkHY3hE@8|*9NI1 zzm)#)7Nf(h(FkBcNV%RHr%2GcF?70o@|YT(sGk=?`$IIxY3l)|W11~7+I^-fptr`B zUMBgloradU~cvH@($1-vXCGd~+c zScd)c5G^y?ZVy4eG3~maOje&IuF*kOTOV@N-fU>7Jh)N{;fEMKoThXnJj% zEEl?OamGj|8(16C=?4hbF#61{YTAjYwtGkGb6g9n4G{=Uql;AG*u3lxwZ|&36h9=C zJ&^QB`9hFk(s*_uE^~JD)3;vq^#&Sg%lRZ=faJop+c{ZH51V}XZ%+@#4;G}`?!xL! z+=Gpk)iuX%(J09I^o+8E--X*irk2j{m;~YPfXDg+pn|FFL5my6Uu~U-MG}CIpgHuF z!Ke;Uvn2aGQ38Gac$%qLltB1iJVY7};MjI|ZYY-=QZ<(_W&uwy)#S1)Xd?$@Mk97q zZI;f!a`CnQMbue8{BQQAqpramtPx_b-E1)<&hg3RmDU#7b{`%f-J+7~g3=@jx+ifD-7K4Vk1vtF01>fiEzy{p2q!_Wcf(n6CdzFELVHMwd`wUn^_ zy%ZYQcKP=TU%s2(nQKj`h-Y<3YLH1V-;+r{Q?lvFdgy))mv@`HDH$WEfo<{8sHuI&E-7R{zA~Em-A#OxvUDQs0g{qA+ z$1e7c^TU%@_(B`=Na*YAgoRfd9&cvuRk%AB6R8BO@-7>{{iSvn@m`I}xEqgZpZ3*V zscjh0FI5*`*!{4ZsuyrpPev+v6|^liP_dq^)q2@TGUb7nuJpA4q1-IQ0Hz8-K4LGqbBBMI{>F6ou{_?zqY0G%RK&H$J;71oq^cJ+|UG{(3oR$BvIa5(C8NH|Rs8^fRXX)NmE}F^is0fo* z>WRfQz570U(!2MLxz_i5ad92TOQP*hNUz?Nm|sw3bIg0yIK$|bYeY7&X~K$EPc#o~ zq&qIe-)`3^A>2tX=9e(2yj<~SqDu>sNA};_Yc07e(EfV)H584)7K(XJ->*@G*9D&< z&_f0Zu(4qxQc=iXf_5R!HQiI}}1M>sgg%Gw6L~t)=XOM9&6I-f$E?H9-UR zaj#V&j-XZXW@fO(gf{@($Mu9TV>!R>VA&*PgfkuV&Ya|*64zo8Hw6{NGUkB|Z zt~D2_&IrtO_Fv14m~8$U+oC0cYkwdl$~2H_n{rquArFI;dMy1J{G9e+IbG*4E(b7) zn~$#+x3`7~@+Ip7&M{4ybZ(fabB!Ovh2+$^53#TGQvg^W&)R?=yB@ejZwI_xt-XN6 zsR*b3sFHGlv0Q@VXY7?_)<2l2RA{?9t}$cFISDWxcnjxJZ_D*yy0gEa8$~=Kb9Z5> zXjezq=hLGPnptz#@mm5X(|l(;QHZ+HJ;Vbj$SQv`gE^Cv&Dw9y`fv9kA+!T(HgM3I zw#RCauoU>YV1vf=$dI%ATB}q;3MKvT=Iu3GTun$2HFL;Kt=2gmj|M7n;zqXx+8i3f z@iz!PIsF+eotF`D8@%7Xci#z`9{e499w%TSlxR#ii#ea+P!d<5(MpSq9FB`pxleya zR;AzrN9+i<@4E|wi;|l}IbT%1<9t=A{EMmz+}*Ruulc7{gj(|m)H?7{>7awngB%1o zC(!*{cKrqdw)vZAdxi>ypx_@{KY0J{LO6jn2%e~D)yl|i9q zk59YW4X&KfKZX#Dn~%~0zjWKb7ay_(kg;o-iAyO#82Jw?bA#%xPi`+cFr0@(;S-QTW721gWT2d4M}nvF)776JK$ z?uwY*5#{7Uy8A3(WPD=q+$!z!kWB$cr<@99hnG}M{(i*L-NW;}i$|LMRz8ldE1nkB zVJr<)oh)X0ufWBQyPqL96TkmTSpeY7@>>TP+rxXrT(c^e2IZZpt69}`6RTKu0m=T~ zo~r4_|KU8jcIIsN+wjzu&^bO*C!Npf!W`-qRznrHoHJ*YCRo{Qw~N=|0y6L9QY&raS z!Sq5ca^G(#s7iT!JdR_UoZDtWo9NZSoO z?1XDqKSL%4OR+gHlcw^c)Uc{+YM%@I&SRuz7PoZn<-_)TfR`Yp+z90_I>5oav}y&pwdtR7!8a5YjhxB%h__0@q4Aaf#r4mRkp_{clrweqd zfB4?L0N{vIBO!i?EV~Xn0$6%E?k-(6bS}Ag`zT%TVHbPHPDFe11zG_@K-sqT_HsN- zFXj6jCB~pNXjrl2`4_P359s8f+FClX8G7?7!n?HcTsZ&Od2Ay5x?U%Iv^LNCXi-Xc z_jFxu#gXIwS|R0CQmNNR7LBy^evWU=UGz8+3Bc=bD@3w@-51BxTY$$DDWl})*O*hd zI8Z)yX0-ah^7bF@-OxwPZs;|ziLYkw+aQo?yK}}I&1O+nlE1q-F1KzV2(MJ)#;$sM zPKUeL28%~0v-nShQwUQT}<_U*AVhe7V}5zZs0+q8@**04iX z#Ks`KG4EwdOhdrBJ&%o&PA)P%iu6h^9d8}G=Ze$#*h1TJ6+fGDCMml8Uo+~W^#Af* z^-OI_+i;>yYqq^bkad%o3I-edL#C%X)^wOu6r^Wi+dJ6cqSGM*5RJ&B81%ZjN%Ix$ z)h?N=dG9uv=`TTZhtxO-OLuCVhX~@|K zy!xP~pj%Y#oQ5lKvV2|6ly@*NUxkQ*i#WPZGFxCixmN*hh$uR8x{!g6Ca%`K)k{9j zz!OPis7a>bpIbhUHVC&GjSrHq$@A&n5pslbJ^33G-xTA{B3xdrgfOz!9jnok&Rfr{ z8^%IF{JbOnXFweOP)4P;FT$|Hs&g%gmK~JPBw?3j5apc-%sjgq5J&h4rYhz_eZ1OJ z-HW}@qyo|HtIanR9ZvQ@X`W37-lR%odF;0D?QP`yVf;B$KJMMjLtGUo3r{6hL4%(R zkExVly3)Fm)e-hi@Cdg21O?_)C4U@JhQGvh#le`V3kGldCK!)ab$qI0F)mm)J21oD zzx`mEDxf%`?yhd2j&}*|2qm2Bhti*Op4Lw;!%WTP%1k^p?8;exFAwx0dvwI(mU3VJ z`QS3?K7ZxUw2GAj3k4EXe@kTy9>-+oy7#u&lnXVtA8g7uEh52kzTbcgJ)&~_H~L)w zHP~+;dm2%@0&l(k;`XdIzdao!*XUMn=C^d&mfh>s4OMLbqkmO_#}w&5qr`t8!tszN zj-Q{2^NljK#z2s3i$1k0ZDsmh!-gGkuHCsMIn0)(GW>eTrIPU#`Jl_H;MVmV%6vD) zsZ`bfYXsXzp1Ulq@U~`les4_(R6s$rQ|roz!iPskBmNYq_Y+>k%E)mn7snkz$tus{ z8>NQxy?-LgrOy$L?j%|Zp4mdy+8UOH$O{?4sgT_>i)bW zHLy#54Re|ZhfOfU9|G{-z@9!MaQ&utXg8SE8ami*BPe~ zG?Qa-uzkarsXtw*__M)}gR!`3{c%oHET2c%{f4NfbgtWG!2>KOHl2o-oQFe#sH{i+ z=K23NN9H>JZ~ydtQTZR*$b>4|LuaV>+o0~Q%yqo?@dy{QwFd6C8Si&oweP~_7X&@Y z0110N$!B;6^tud)>$M6f@o;DTNN$wqkgsO@b3!-%kj^f_;8Jw`1hS_|q*oeYa)0?L zFJMFt)C+ANdAC9Rj&46fxKm2T@lla;Z>B`}zjt;r@~e{rfwgm(k{XTF}yQJT=}hEkdJMz)dMV)o|TjJ8e43*v^NdxMY7fIG4n83(NZ6Ql%=)tzR<|Qd844 zxtHprGf9%NSD`mfp~tiM0}zb~%tN=OSc>8B(D{)@i)rZ2uBh`*lF1k>rCgW~4i^*M z^$bX%11tbPIi94c!FIloB7*jE(3#17?ROz(4G+Te!cnc{RE|%}YN#nmZPFZCM?4`ub^<>y-7?(EtV8u~aw@A8cyp#%?}FITXiDpN(&}imzVdi4C|~n^I^xn=7}%jdZkK z!ahRjagi$5H-w`ehVB@DX1r8UtzXLU85*bzu61C^5e7f>2=NVqAYQ)Mfw6>=dYVrE zX}?2v*UF(Co7C_ikn)l&#xSF*5`Zs+fA|^?S8CHRPY;^8UYjDt2@0+~3#9I%#>_az zz8(2}^RddAxk9+rB~GEQ)yY5hHE{D0z}`_NoV#?=#dp#bl1~~{W8rD1<~B6{oq@(O z5hu9zZ$@;Jv-Ur7tia!kYvT@md*|mV$Dx!GZq7X9?R9j>Ci(#QY0xE&u{z|yDb&yX zxj@$aZD7Dzmnw-)5OO+9J^W%;*Z%qARroj!2bHQ}^f#Gity&nXPY~0W?a!YARZjdp zMk?Z*^S;b?JF)V`AH6x~`iUL=E?>RlH&_@ugzo>XTe@wLTn|1^@V$ZwKgm`N$+B-b zUwm7++bHx9gmbyed^}2N{-8&jrGv$k?~pFSz?>=14dr=bKHs=wyw7K#v*#|iH6~Zn z)5T*i39yhdU`?XKH9zkyPFwO2$Q^;^u{58(kOu9xSibNSc(@;X$WKi|yt^pROt?2- ziWa$1Yz<|QcJe8H*zP@v{TIbZJrYtaJrrdtyoT1Ua^2&}ZebT*EZY`l84FD1BkATd zgzjFLH=$$PS$K%>y4q?IoF+9H|3fIJI?RH<+B%&-yZZSdpwu7Y{R^x<*QL35&Zl#O zy}=jzv^!`kK~7})R=C5?zVzh5o*u;Uqd_49P~mCd^t0xk(1m5pbgtm;BW+TIl&SXt zp9E!uZ+pb`uRcOD=fA0cp8vaK$@hE}^Kvt1lWh`xq-2oCPBh%J(!PHTJN3r+FOx-Qhp!B(Z z2NB#h2YZf%|H(U9M^^3lpKUV!gzH@&`B~jPxREU%PuLg_XoCd$?|BV`JXmE!DS{TP z_7N_JG5yMJ{et|ww?hcVlOfUWnwgI-RnJ<*z&BM6;%mQmcgnBXmcCCpL;bCt96^y*IJN(W@V^X*fflT8LU;D?m zLYlj0osAj|2#!n1k@BV#Zz_ww^r)y}x~RK+iR{L`w)17_-J0%W#}h2!oAhU04|49l zfwd?WF0u_v^p%H9xph)=-N8jEgZga=>>^Y=m42R7a}++&If2tKLt5d#$*4*8*RDHF zA*@482vfVd{5ngH?KfJhZ}8N{(6WXG+@hjNWpR6ZbNgX~u?tw^fn-B5`zJ)|UjaJ^yjUr)CFi&OmHkU8T-9br zo_CPxNyzpRaM6W&uNocvT{F*1dnO~_oQZ(_ZIR*{RyoE`B$fbax!!7U6 zP*)$*Ui?=YqRoq-93v1=>>!6W+Rzzm)2BmktTKI0lR6>h5k`woB*l*onh@>V^U@CE za6|7$I2;$z!eHmHHEw-vjbNpDxU74aPpmWuUSI7v-cmaHPZbybbBceqQ^*OHPqmf2 zl5^@Wj zSIKv;#MP%(1*GC`lJ>)V5I8LeHH-0nze2~TeigB6v1j=szxwmU!{anIhGCBLa<;x!{k^UUvYsp_U%7~w2 zf1s5}EpE429<2d=(!-JySz`Flw2OsDbbWlnAFOX_XpfH1{6Km1D5=gagYK&{z&407 z@Rd!DV&R%M(ceBd74ucWb_!HF`a7owH{#CU)`(o_Ep7>~jnLAyqE}@cxQWK!=TLZR zJeIFW>Plj0=8@P<%-lnZQARe)b|?R%k86JVKYbiyPu*8A6vk`Kc3bWNL+qij7`ySA zNx8a++fmrAIGe*V4ZMTur+j8-S&@J^7I&98Ohz5u6*!TuyD`X$~;R~8@5oyR`%72m5lp< z?5YQ-+Fg*V%4agtAYGj4>-V&Y2;ZRGg`CT#tuodk@&<&s4z}Rej_OU)BKgxJ|#a=*wbx;E6%(kb`5tWTJB2dE0xwrqvGR5_wehK6^~x zaSZNo;T|h114JYL(1VZG$`3U(2=at+U5U+FRNzvy;6c8o6pWf8J~ai^?7g93rMZkl z$*a#!T<*vUopEjAnWG+e1Koi~iR`KW2)fYC#>ZU!0sh61F(gx<`VG!%XBt2|jgeWm zk`yr8W53&ANgj8k|Clltc=c4L?)iJWmQH+6fd94yN7pjzVcK~x!j~rNBXNbPLGk?^ zi?BPa@99M0rfW8J>3}p4>FonCtT^C`fS!m)aVT8m&UQ+Eu`g{i)=;GO^FE}bNpD!- zl$~FGwbvY%Ps5|?;ZtnhcUKPF%V7MWcA~H*4kKc3$5LF=6}ES_GsHBdSn->OV_(sR zHENgc?4l$`cxXGzy?6Py>@=uX{dQuNL>ekDt?HE|d%o?jHG65N0Wwt#mH)O9tEHM{ z3~Am8Se_Pde*$jR=S+Q^yB_dNV#0Z2-*+{RKOskNx(Y55B2ukED!Cix5A^dV{e5LD zfsKc&ngT2rvm8yM*$+5lzATFFq$qst+jXX z^9;MVU}J+@!af0ANSZuxdTmf4h=>2zfF}U!pXt_T!u$*TXAa<-xP)le8X-WO1xL<5J%kT zuy|(J`dDq8M1ul8|Eq}Nm07EE`@@jtiLz`uYe`G+;qg4>%wLr%F{F5qPtkH1FqUGz z1o$2l>V4jwUkqpCy>+2b!~)%DK*uwmOS`&aW`R!YYO_%t8B|$+fg4*K8`9HfIIWV> z9^HM;j?k?y{VNWOD+t+W3US$P*YOr`^`L4GQ{4%-isA$JXAoy-%8|Az<#$s@V`A~f zPD7;#4ZqF)Ue-v^>ut!>J~L^_ZkO0IRNLhIX9dn)Ji!gSGnbXUUqhkB2J6Fea&PYB$~dpHvTB0s4uF94O;E?V)#rIF z!^~K2xX=?P#@e0t&jPDe8Wi3G?A7_gpe|_ZJ$hyVV{|nY(Qg~UZ$0>RP_vR>ha1IDH9>hYkyjDuGQAyRe@sdiJrO0xhg5 zT7ggbwr}jn0ClT^0BKV5f)B`fa@*$1y`j@a#7j6mP>2k`_iB4(b)vU^)2j|LR-ksm zdGo*ULCD?z84x)?IzI8-qIQpi=j#eu0xf)IYbosA^A0a3h5wRjIv9+!&0Mcu{mtoS zk`pI(pC?i5p#g*AQI$BaDxy~SV%uRO;Je8CQ)TvuGlXtnOL~&k#&|k9A`yJA$GB@C z5REw-au%*&e4SF(amQ?|t$IYrP2>;HNQ^;~h>E5s`VG8n7S^58k=6gn%x1o7x*FyF z3||#81;a#X1kDcCCofTfpCOI#a;);PKeAqT4OJZQI>!u5Y!BEbIWfVlg)i@3?A*T` z!W!Om2WuLkrfw{u>md#(1J6&$32RYTVZ-g+*Glb8HB9l3?t59odDE?L?dp8jMdyEP zS=1R9!kR%Gd6al7-;6Id&d5jl>}?!{C7wES3ZfvSK*diwbQ>|+h=dI?!93)<2h;J_%r_7WmB~Xy~;($*jo2Sb6!ZF zQ%R&Bm!B9sYVP)K0xau9=i6=^vJR zT7fiT^Q3ut)*A2UTOICKRCQ0uUgfpRuVmc($nh)Z72Fjb*bh@bTxgpexF||=X0O>Z zdPH=!C*VX;^&IxL>f^@{o!G_XPBc5b+>@Qis|pXZ1FU@%^{%n`qMB5H0l*Yi%+>DE z&IgK+JSfC)KijFkE)`^GDaX+**@rJ5sQz({<^dltXlUU*yX)#bj}eU&JB}23$q?US zyXjw{?SRHa+t|yS&qT+4P8nL)EHT!{j+O>2wT5gbnZ$F<8;_j`d*Q4c-D{aNB5oD9 z;LhEh?_TaN6;$=69%pfs+nrlIrAusf^I3JpL%R5PA~VxTB=E+D%qnB(x=oN?(9uf{ z*Ub$4Y=*+|f9B24JAVJ`ey+cQXTwbevPY~bOLw+@ZT=%6W|WLpe%!dajuE}|MqDvE zHAilFF~`reIWtpmSy`gLa7OG<(S+g5my8e4Z+Bg3BbcO;#4g?dzQ-jJ5{Y zEJu(>Jija^6XIs*p`-$bx&Zo3wyu8p-L)`h4bZoVu(L`<~191$%~$74gb;Av6khb4^cGZQZw4oE*z8*b$h?Kf0$b4f(w|ZwY{0es}Yjhntnb5 z@Y30vUhcqx67!mMyHw0~3g@c@s1AbvHOUVE95&}J?yi~IR2onsz2*@Q zSHRS~5iLD6G~@oR&*6-BBs6u{)Ve&>@njtVLLiM}WiRbs?lP6f=!0H6e(pS6c9Nsj z8j*Z=`N0NsBQw5$E)#E%xf6i&j%qg87BL4DSX~CoMk8%=k$I-Rq|jl9WVH$`+N2LcYXEA2BGPUSHZS@=R|82 zTTOO6Uo-HaS7k(KIwkFx6hS|wYToLq%J;7{a7jvrvf51gxls#U#IKSng@v3<6$8#u2cI%jeyo>r)%FwE5n<-<5rh@ zoePP$P8!Z1w=VGC+f{}q3f_S_HIFg4XqEOKU)#M$vp;ZK-P0U@m*4u#4vzDFvRD8J zRtd)omikJVBcVYP6GCe{u!!>+XV^h{?7bBeaEJG{Sz7dL7l-ct5@K221;Y8%uH;ht z$=6R@gtp}PrkWADtm9TXQMugW2PUwk<}oG^>T>ztTqt?-DmNoh-t9!)>g9Vp_@%ty z$@qj1zL7I%@kTqA=_i>5)2+p#rc4?^TkG^sCaJKsGWR=PrS%<+4*;LG?te(cT|gvU zFMhPX*4%9OIgw7EOX8v9{Ya-hnto1D3DX=nr9-`g{Xlas&@I}ZeE;tMm1l(g??o8b zRrmGJgP0~3F$5IECIq!)yT^yV5FQ~N`^?(rxO*(ro7gKyp1u0Pe;$BjVk?-wcM##` z#$guwb++N|EPGW4CpLCdoS8wEaH0GWvnRj{+rPUbT`9-#)W3X_{z}17KEue{hvOS* zks|p~QA!xGPsZBgV>QNX{#+lNb5nGbYoVgcrvdkcHOyCaJ-^VEHo0q z)S1+vJ=^|3DZr8MNtf|{?J`qsAgjJbh_d<9GStu-3?5VqZt1Rh3;kH)+*{0=2(gY6 z_j&MPfodFi=4}29dRYA(4nSDGKhaM0T~W1%Cf+f65wcgzH;1|gc}*J6>@fK~LKUoP zTNg-o7mBlvbW;?5gWGuokrhXw{l&}akMsf6ipNdEZ<4mfH`?720>_8tWa{!kk=?V# zmbctY_je9n0}Lu040==b!{Hfsjtv?u)<`>BWcpUmu6|}dsM1t-AjrErH<9AzkV?1_ z5lSuH6Fr`SC?#)kDS-r+AlZ!NL1FIi{OclpoGa3Tk@ctn zauUfDp4Kp=kcXKPD^?cammi50Rk&`Oxb1o#+SZi*sEj`!B}JH|jb@bp6*9f!uQEue zmP+i%h%CZ@rVgXq1`fP+TcGA=^Gypop@5T}9*XM~N)gp(J-;=#Ja_4hqs7x0a+HV-PsPSvcPbrn zdStF)oK~ntOL%pEMC=GwJ$AE<^j475lA5GeJ0^d9O!R_Cwow&g2FSB=${sYoVRA+| z_50qKAy=M8#j5G9kz8WUIIih!!Z>cOcMYjj+*HW`|gL$*%bn3=6k8JEQ04PE_vBzcDI(jk$K z)a{UJrx>O(6X2lV(A-5#WH%kg&W$$Y2lnXco9Jt|nuXop6!|v2DWh}$RP@dERPbuY z(H5<}if#Yp=*IkRp9-CYM~5wlji_L5qxM1;OiEB3QAQM0_ROkd(EB#vPJoo$ilUZs zRq?rSRa~iLTq_*2s^BaEFNo%gW*An%v*(S)f8FYdWwUSC5M59op=mt|xC#UH_k(9Y>*^lnVOv4(U$7$izdnUjk zrX4mXGQ51d!9dwXmxhY88LOMkR1O8#_B#@GwGuhd8jtL-CJDN^IDgL=o3wK|yht95 zBz`{fK=hJ_PkJ1>Z9}Oo-E-U%25w%DngrMXRv}Zaa#F=Wi@zp|vEP1{r$%U3%cxM( zv(2Pb=cdO5!zDxptjKOZ-?@7G*8?Uu4fuk0YeIgO=5Qmysuybt!J9#rT zJN*EQYRm9kv1eee{nuTU2%tV<>&|TaO}&%9rUjlf)&}b-$@gosgwBskNZTBqj!Kd8 zKFX-f-<@yUwsLrqK5r4BHhq*=wVmNRDP)7z#E5gm8z_i7wTf^jePiVx6#F9(09oBc(g-anx@3JHV@x-Ow!>gHEF2$c>6x(0cheqX7QK9_ta z-DBc49L5UYfVCy4kh)lS=X@sgj(zJKU>Jq3C3QCqoLLQ;R}pb_4xjEMzLp*^0+gC| zNE5v5W5AisP8b)7o8)aeA z(gd}@yg(kaX)Jx}4XHGMCAyp3d-I+L(sK&~&QEPjGHjLB9Ix{Q7374--1o@4iWTZSirq3qVrg&jU zQ2^%R+N{C9EtgykJ;zgYTbwh06Ex^-P~IWx z_+2*bS7;-d>dLG`he=)OtsFOt`3v}#jj`Z12%ex#C;WPyx_! zVQ*_)6(`~>O5U`8qUntZ&fO0%;mtT{U*hKz3=TrJzR>Jf=x?i%Q1GdfYZnLSH~>_q zazQahW~JTm?tahm#KawelUZ68(_umK17*!IL2EmM_BshOM=%1(6eXhfoAoH4B~f=P zeH68$5DV3(1@^h(O$i==0r!uhk9@4#M}V8lK}#glO^b9rE@}>!8(|D<mGe&eJI*pAt?+`Zs}>z8=nsx=Tb0*3zVV%G zy9)#cS&U#0agL^7)%z%C)KOY{Q>ERN*8KeD0u+lvugrP(H=d!`Dsf+N*4b{o5L{I%0B?ypv8cDClV?ll}=> zu*HY|EG18p#^O5a7Z>){_(G%RY0`$-?zA|TjZ+#qs*d;>ee(T$Tzwk#BhKc!iF3A(MOI+T$j6>S~3VZ$^ezULlOfI%;F5HU-%zYqj;j|Zb*y_0JIV|_|^dfs~*P~X#rH7-gFG`a$3XB$ZbX#EXed+5) z->h6!AhSAGMqPbOV$fg8(Iax5b$?B~1oh!SN3y%yO{IL^Es}|6Js=8s_0F!xEuWJY zlY_+P5h~;|&-eH|>h+37_<7027oS5KJ@Ah*xfoybvYv`?M6`7e5chm6^m}ut?aV5b z4b!i_q*H@fe$L#QNZ){#Coj@%3Esc!v2)0Q>LT?r1Kvsx-BMuL#+&6w72}TWgD8lv zuIjzu-pst&ijG9WU>!WZf`1;c&B!&VPEA+N4O-YV6`fVb7sdFwU521QQ5mkevm(Wov1W~bIPHRdUmVQQ=35@mSw60iPrN(dAC z(S;YBh4)ln&-g{=rE?P%@w9GBx%O$;W%w$5F(^mgA*lTPB8K7((9Y)=1f1c`bM|z@ z)u5V!o4ITliLm4_*GX|u2J~I+vK!jA(n`+#d2a4}-hF+liTvSH{^vRBV8rmYY{ARPnjt}_`)CR!<7+wl>=|j*^<4VDyySL}%G-I& z^-x#01$7+#kCnPr>?BJJPE}&63=U#7>0^%?t=QO}11HZ{k$^Nl1h<=lJx!wy_nMjpsM6st z=}K>BM6Yz8FJ_T5@v^@k=YL|z*J)MHwMw!!+}05d*FuCORuhBrOJ!1z$}m!I4fCZx z7H*f>ML*t^ELcLSMc7d@fWC)5xJZ=_W?a>?xOb957c^n^KVD9tv}}Yn9ZfR0c) zP3Mz;^-`dPVa_D-j6rZwBBUVL*?TA|xV^xivD<_#zwzRL`>E4APtfc5ORm52MGP8t z4!V+n@563xI4yor?7|L)HfX{QCCwfF5~QM9!E?e?^_zEBF3lbPXWs1$nm!$F&wFLE zIa2MOuboCUhk#c<6lSe#;C+}D-2xE*MU#P7{}-Evxp z%0PxKa4Jg`x%S0fz32Ic?^@ha)sb74s>ys1EV~aqNt)f)rmWQ6EliDwB2YX0rh5$( zmUb)EZoLT1F(aEgnz`CcR;F(2yUTWZsok6DbCz406QkN*%~w86%e1=*AD=lASBn3o zqPS3$ZSHnGk6EdtMftbe3=r;<)4cbMyY?=vYJ|ZKYn);H70zv)v3CqUfL*^Qn$>EL zz3+CC25O}eRBP`w(zJ1x8Zi7AiV!r~^?WAHo zL}7Ymlsq`eXoZimS{QBlQQFyytUwta;4UtP^HvgCmx-l+<(L)FzBDZ7Bc(Y`lW6T> zKccr!4tq4thK@@{PNk|Y0)1YWc+Zk-2QMv!Bi=l-nG+IZDGxZ)W|KxF z5sU0fN8K$C9}(W)0FILjX;cT2`dlFc1y&NxQX-Ltx8^(3CF8QZc>m&#;BvJueQ5aK z(unj&vYw!5_N6=OaQFbPiPNW*IK^(_ zJwCdAbq#Zd#7Ujf|H}*Wy#GJq&gn8W(zLZtErs#0a9C?mqcz{!U4NP@cWOD^1Xj@6 zz6odn@10aJWm&&$amq5e7;yBqFpsPC5)+1ycL@;NNDtH}ELR>U6M9j*>Vaj4M?jMA z{!YW%P``7kqf^_?gFEc?c}s;=#S$J$YL|g4%TEF9_{qqcQ2aAapM_spY2!xb-q*#+ z=1DQJC5glwA|lGM?Op;oe^=U;?r3_T;A22@(NCfu$6}yQLr1h}FzTcl@X%F2P>aQ+ zkH!K@uL@l71+S!Mxkwj_j!d*%C|^ghBF^zJR}MV)u=E2gdDdG?1lGhEc9FUHJ_`*=_2vG1a)S^?n~~ zsD&!*owjxRga60Vxd$@c|L;FZ$}vd}W2;nhmXy;_xeCwF9faNr^GZa|B-JS879Cygc&$u^Efx-9tN|v_sYoc^{d?T;x3>m~6n!=YDFf$nI{j#E=(>=X9BO zt#f#bI!6Awoz+x}wixj2f@Ehl#Meh7e{L4I3SCr^342YErZ~f0E70QG)zaXiQ=sb1 zS1aT1d8z%nd#}Kx_}u}A5IyzRj})g?ijhEAYkZ7wb+6pl{^8NQeT`QkJo#$*A(b4l zlko#E0+B{W(;;2e$J@u~>g#d$V(>k2(D1)_95HR(P)YL|%STwb4O2v~ez138{_$wq zK0@bjPQQn;?;GH94EOY7d|yYdR&9?TdIo+?ovZM%wPZp6o3-cVmP0C`{+gWVMt3$) zqncq+bcf#scdFZVwfM6E^E$5Lg-Z(C9c`Rr2b1Rn*SvajW0@+)wwP`BQr>Ub!LpRk z&@XVHi5iQQdj&u^{kx&Ob0s>SIna46vuI(!&*{zO7+DPxOd(g-^R&jkV0_c-D&v;Uu53`M zY|7o@;H52oyv(MG=i`_Pd_8C$%9MV^o<=)q`irIPgO{vTCK`vK*M;a4A{(7~oEsBv z94dj?zE`Ft?lOV1i;xB6Vl}$s_S&rDMQ~}kpEt=17$nBWb?iEF0=1t6^=DDXg&)ar z4R~_|t$&*ZPue6BL=X22;axkPA3%HEAqH!1E<}cX3;pT+)6j~U@>6NmbE8Rbo&L9U zLIVCv5ef#{T~6m4tNg?=+$9?p(Is)1 z)^eX$dr$ z%MX!+Bn=Iu7OF>pp7ZQ~+siU;<*ybT=&xPGX{m<_$inpi#iUJ6QYyyFkl~ zdA!!@7uy6}oqh}W?5UvJLb@jynMQvD_zc-3gx3qZG%MRFPmqnX6aFHdV{d*`b(5@D z=skgt?%YFJ6|STxrq1!noJc-lKB(|3r|Fd91qAW?ys|3ic&l!68Yf8c>4pao7BMdX zSxg2@Lfrbw@?&ofHSNs`U0ci2(6pKQ;V_YWc097R4U^*Tqw=VhG9s~irD|7%pPre? zO2tU6Hl2=|KmDNliebNM=TJgngs^=V_k$p5s=c{=@6^g;rwlmBu9_j%+31Vun4DhP zFC0R3F#a0HCT-uQ2n@vt0IK-=0bfJ;f84Jhv%6FGlr{o)D4eOX_y{d=W65yI=5hCP zT|g?=6A5OtpBcJy8lk?!UzP^PejD`@gc5j5GIJRWPWgh^d;JtVkFX!17;YF_45ye+8f*mvYFtuGcD5zdwwGmnc9u?2xzyWiawvQ6%85(QG5 zW;7@DN(~#u&=JXZ{m;qz`xI@NsDJ_17aEAt^ADYs{z;TCcn%D`_qfw!=TXMFaL>=) z)(um13#RwamvRN5yVktbU&jcn@uc?oy@`)K5d5T^d)*f;kJ_3Kj+-@c%K(h5!sE~3 zrC+l8IHD(wmvS&N+}%4#sX>;Z>?eS23|YuTa=P90s6ZSLDA5FFB7w!F8K797QkZG^gaeVByGo%>O6l&dtJK&|Z` z5l~v-qi2!3R(>IxsMhs1YR1uo z+aP&V$o`!T3m*kPJ2H!C*$(wKwk|%Mv6tU3Vpniy@mGl5oBr0!8Bs;QH3bau&&=0= z=5EB$cgl3STaBTReUeO+1dOcgvTS<8%q}|M6VxA+wO%l~Ga_#gR4Ez%69(+Et9gLk z^VJD?mA6$WPmzGJI3B)w1XHf|R5Cg?LUSd^lWc+NtAx#5z0*<1%guaUgtyYfVnBQ9 z=oy?3ST?{gh!6@Ci5%O(Q97TIm??e>dybKbd=!t3$>Z4YO_q0w;vjvr zWz8>N#$qbX?z`<~I(^b;+&qeo^xQ5rfajHAMelp`GuFtuXH86t+Dx(R6}KRNaal z(1B4=&uN*kg@&6S=yv9h4(Vh<+@`yZ~v^JBsvB+fQnR<{2&jo_zxJ1gA>qR-UL z>u0W)^J*(+)`l6A*+|yN+3`$T_vMK}q35S&i)wzK9X;!fnreD{qAasn`qE%%Bw)6Z z3DR3Pjq+V@^H#j-`C$6C;xJ{!E7$RMZ@p;wTn*s!^3^W{kZDWMm5-916HnE${X46z zveUqelMuo2>&}_bo-+Ag4MBW6c8QU>ePNDB5ykBdFBvXpWzdUcWPm3y@N^D{R)noS zR{M`Qb?Lu%U9{jvE8gm&R;di2Nux?iZ(-syW zJpr65vmG~FE*Z8trz7efY?&5T=xN~UAKY;=wXC`(Rqb7M^K~TGKq#*nzgK!jy~giOF2(s@IWphqc)qQ=781BK({X{(_g~ z;XCQ|bbyoP=6r+n;@f?Ku9*h>}oF)e6%5g=k^ zDO<02v+6b-&p8`^;U|F>oH4;?Q~dQWT-% z1;`{CkvLEdomQgwMYfj7s`x6mBRs#~qdSOPDq{fUw#LaDH%R!l3P#0JBzjsAZ4;1% zp~ZsD)cXwyDP!{>-O~)ql%FN4gb@5o`s~)bRGI0LA3YG&u{~Am@j#;6OJ*i7S-oWGC zd%chZ9Wo=Zw8w`@1QJO8zv|eG9R9KRsbXXMN(>$}(Z@-)KVcn)P<*|h$ zuJnTNWpai=&O+$ZE`o}YsrXO#Tkqx7zR@n5S1ATCL$pN>fm!4|fuZ{2X z;7_(m)bYf%FGGv{??b4jNC;bjbDtvJ;E1dxw_90A#&BEOPwFMka28(%_!z%^po{@f z98OFeBmvG?S+(REpRpx&D!s^!9dIMm;no`58WONNjTR!noJ-?%sy8%=+H)36;ODGiX@4hMDduwz_5_Ij-*m@nj+rVhmQk zs7po{T0qOcYp6P-t3J(htB+IYI0aJW^T;1PR?EDG)up5EZLoA{8z!f_*B(_IL5i*H zh_iMoM??I$n>EX+u$M?eoh0nE1__lWu&$tRb=Ay<`JPbvH5mS7ryouw{3X_1j5FrL zbm3PajaD%`y?#*di*ldnbN4(r2dQ+m6NsC3vym z33q;B#A-$xkjA;k9D6TfcYUD?? z0nWR}zXz+2HbK%12*An6!&5IsZ$$ldI0RJ8>`qUI-emVNecVd9=aqeOz;$ItZ&L$R zxvw5upDj2rTpb$cxwRb%JRtOXu9#$vuw@4xnd^XVJo*54$)mKbWbU z?-$vK3HE`eWrwGZ7UJmzz=)f6))3(@fuA&d0f0nsrQ`rQWenU4Cx-ZV@Hxcsu1GjoZIzDy%Q&-?&bTHtL^}@V1 zr1Mrc&VrdiTdm7w)+Swq2oUdTyo>TXO5W#QKoIeHqH-@xz!5QPJZ^nTDF^RpJ^yn^ zy0ZLtVI6vdXses8unSzTDg3=tL)#zkISHSbY;JDOk1a87@M2Rqo^zAPdYCPTr>T0c zj=oCLyZ6~MkG68*og;ZEFHO?E0z5$LctnzB`_6W(Iqk`YW7B3^Fv4cIE-eACwj@iQ z?i;J5W75VESr4*=yL`gq(}6C(E<(o5ql(?ngPlk&9T|E*2Pi5@5Vo1(jSP<=@5+b_ z#(pTjl^I4WXt00Rd_!tkq0X%#h_NdP(R}6@@Mte`$0zJykvtR|wQUohroqtm4Z_6- z8Qso=J5!bG;+(#PE(_Zg%lHxB>DcTOPR8lKa+fUo2>@1Nc<4Oupu}j~7BXYqJ}kw6 z#bbxB**VJS0 zIr=NP&6VC#&qMa3WKadTzKgpGb<*^urdV7%&Z%+>Kisz~=jJvHLHuNt0+bPoO~@Gy z{d8~T%WK==gFOZSX{7xF<>6UK&*j0>u<9AL%3iJIjQvkv80c}(@sB*mYMRSYM|BUr z-C}IZ@|2WPss_yAJ3h@RIFw?*Yx!`jBpiC=f0Y0>AbGnPsOC*3ZRF1RSS%({?RjKQ zAHNzen5~?{3$QH2{E1U?eMw(*gN=L{%Q?YpXL74Zb$w zA`fdsF~px_L`$moIBH`Q(X|p$cmc1RON*<$2$-tVp=^#aTK@LsoF1~nCwCas#ww>3 z%k`0gql(*dG_5SBQIm8V`z1k-aj>n>JaNDu@sWoh7GVWuew59vKkoO1i7$_@^-C3aH z+1(kxhpBQf+?rR0bl_Chw$$3@GLv}yU1r!)09L%sGEi&Z0-%59foN8Ht0r0Di6A%`IH`21wep3DO}y%5#&Nxq7Ln8 zF;-r9J5d@XOqHp>7yf@c-RJ+`2=RttPvrEL4t)nVzsL)+yeLV1et9-bKEOWk&oLrU z)!2RZO6kbXnwF`AygY%i)G;cLrZ+kybXsSosHo#P-M)vpY?Xaw9zA$x`6)r^en_7F zy#FOSop!L)_-dM%fs)A-$<||fx~_!@;L})MRl4rvXKiRM-xOU~M($e939h>EE9LiQ z9EzmNO4+}!zCJg0=TD@{_Y1zT?kpZ8VfA2{meOFEszzUs z9TJpBL%bPp)Ja@Og-E?q!COF?8g+E;D$caxg=dzYz z2ZKjkQPp!z0GETBZAQHo+`@K$jIuwzjh=To%&*=g({@925|}>8hd|G%I0NXC^@B4l z4#App>5zk0#MK&yUp>oGJwI}NwW&BlC7U^afgXcWLxtzVrPa&*@+_+~aF zfWFJ6UYdD%)=?gSYVQE^k>3 zH#YWjvixA3CNFHe3}`grk*<#PdG6eZ`EYWw$&X`ClO4l?72vg2$^e%M8LnTzZz@7_ zBtX4J{Ax($lZtbL@{b|qxUlIEBYwBd8{8ZnHG+l~$RT5u$;+Z~aqK`VCRE>}963wGb zpPggnAHhHSPMfkQK3m3@(Bq5YdgA!=HaeF^b?qV<`FEi)yAZZji9G%4+kVmpkSL?% z{KlL+3AnN&>BauW{DlgZL7D2+k;WP2w=oallDUrcW2$E#Fm8Eb{I`Ay3?Pkbkzrxc0MBJ<9tltgE7vP0D>fH)#Lk|1Rp;BV+^BQGI1IQ;I&7a1J@4$ z9<3@@H9WN^AW8B5e%_Y7(P6|}PEbOg&D<=N#5Cg+>;G#+Vnp9<=wV!*chYqRxpgyT zTluiBMYiefSYeLmSnO73GbrF7!2Hhg(Mar8;_OHou&U$n-==yo-#144sV@ZjbHb|c z@av+WRo<=_7nFoT2KLr3`alb}q%?0E>Z@deD=tLyOSBdS?8+X`!hjAL2Y&&`aO(V^ zg9BQU0ErJV`jxG|nR8glQ98r7%%}z)13ZZ_=(5+?AF6U=0rVs#lOOAA^Rgv8G!yEu zuzS}Cd9sHI3?$nk#ubMVnyQP48y<_en^+2N^p!K}3>Q^_+a*;jvW`1qS`J5j3bPuP zrqAS~L{3_axafn^0_0>TaBBIt6E$2vyhU;BiES$4bxkyESA%YTgtO?N1*C6oe~A(Y zg;&=|s`2d---8dLS+te+uGb6F>V9HL*234z|&xbG_yGB|>*FMQi3 z^9sDj3XISra!+Cs7PLMueT7fHQIv0$4(})vdW@=sio-{c0_&-#*TTDQ#rz-!RWG;n zV+BI2H{Pd5m5SPBZ_ASF`@DenO*D%kAq!RIS}E7N?kR`k#e)-rCP4p0Y$GtSt{@Uu*{a(Z&z@ZaA}{K;S+cNWdkRC$ zpE5;8P1yyE)k%Id+|;O-t9hOw;pSEzdPQ~wXm|sn>Z_iTlF5b78?kz9tZyX6EG546 zw=T?>1Vwq%+^#wjvAg3D5gF>SWo3Du%2Q->S=s&1Z6Mj~TTi!?GVXNki5Y^=xi}QQJ(HRjGX1+1 z6Zwg&IY{}gP$hKb?q@)e9b9|MgE;Al58rE{DE`As&|8Inwt!_9*fB3NCi6Ge3YKPp z)t9e%N*+<8wTP-VSH0CEtz$PG$;v8@k6RP+yCbssC|>e8^^19Tb*gVC;akTfR)tJG zG@Rsc`u$zFA5kujmoz0&E*LQ>q~U4Eo0$j(bC^LkKO~whKNS>inOI_YhtwGlXp^w2 zxa;|75=x?BG7JOu`gHy>Ce-tZSqr<2zWBXQ9iFq(?@uDLVwf%>9sih^3)|LJMz+=E zgB$igXe(zg&WT$c^>54My$!?MOkn4VK`@{c6{U_+PxL99n>{I$#uMFJBUi#KPfvY( zKv&t+$Y1{~DnBR+WIe$L2L{V=xCdQVlQ%H(%eOK&nd&#Wo0h?`ee`ZSzk%OHUEog&6>VXCC9e_|Oi1KK$6 zKh~m)5^v`$_<{o7@UpBOoUZH~o`2iWT>ojXmJshrFbU1|QLgHNoNRYQtVYE|1M<=- z8@I*$KHz~sPiDy@x`@raY-VCmprF!OKNuDp-jy68b%I%H``avW2|T5ARkobx;?8_h z?MR75>8?tP%YiHR>&*PQ58Z|@t&m>qhxk7eH~*DO&|m+%V~W4GGfL-cDgPUzI4&m! z_?Wvg5Nb-DlTWuPn5Efr%%a>Dnfp~hCj0h zAMJlLD`vs~)L>rD7t;@(O*U^^zP>JPd3I(~-353{ZR5Bq2!$^7DDNeH&M4sHucPR%|WW}zv&xY{6ns3 zP+QN5zZ)5sokOGFVFXUFL}=?GK5|Iod~;shU_HiH-Ry+JFHu*!OcKJ1%q~kTNMQ15 zsW)UsoPYA>{)pS!%_hZpBVkZTEFf{lU3YCFh|Q>PEGy^-@1u3{yTQEha*#BsrL zT&d%yp^DXw$|-R}!wRD`1Jb3cX$(!7Fu$^=P9DwF#eVPv4=FrI`qHvleiwr6Q)z3z zL-XEgrs(*sG%3EG@<3p5gk4WJ^fjAK6QVk%uo@RYGqjJ^3TQ!vr4?=EK2+H9L9c!6 zt4u;Dsc$?|R404k_wL<(QSs0;ZL_3R#lA`{Ai)9lzKt!x@J&LRf76H<=h3?S<8|eY zw*+}=L!jg>e_ow+T??y`dAo&F-hGslBr>yBP^Y<& z#xHA-nYx03mDdh5|C${rR!yIe*MFH9T2*Hrdbe%s4{O0_O4Z=zk0x7zp>tOLU|2%4 zLr6oF5Ib+-*e%(p(yaF4wLUhHd>qOu;YB_kBh@ZnGUu62b~cc{+q4J% zHNBLK2Oc!S4;nM7cleK|T1)>{0X1l1W`3gWG8^AlG@U?I^m;xOh$x#+5^lzoKe}B~ zd0^XN*{|3)yMH53C|SqpM^=>cVktC9QRfi<3Xlf(T$De&Tr?aitModZa+$XA*xdKQ zzQ~n6KYRmG^DyG5!BW?)Xn?+fylV`H2n>q#*_-pWB&U)bNIAEq-YcU$v0W=SKR5i= zsTPoNlLjH*2DvtWX<8;oKD3H#tmb0(k@K+P zW(;|6EkuLZ1s|005ou*7Kz(40`ZRwv&&IT+D=O&y5z6>{y6cSON=?7dufZzBVr^UE zlpGa7wITCPn+m?2wbWc(`<12iwS4LFWAxWBnhn+L7}J>#T1b_Sd)@nVPoe0@Vp znD@q&nN)<0$5r%ay$ZJCpL6|WcAwgM9~`6R`jy9yjwgS_moU1B---{v3n)Rn=WVFvF>!mv1s^j}&K@*s*$})hAa+R`4 zG;Ww3R8k$4AUjYuZMHrsQOYf6lJ}0sB3CQ)8IVn{(H6tcmSK7|YUz`lu@qFVx98i3 zW)bn#LE6%V`HYQLeL+~27|HSADaL9&Sn{)uwFRwfL&Ws(t6tx_Z6m@;h?{`S&kYEs ze^0qx?t7EGV(=cu=1~Umvs_OcG$G#+=gPAD(+d=-f^b0()gr)ERfSH(L!&=>A5nb_ zjw)v9#zi$Wl!AkubtDe8@~|pScnA*++bjzVPMWuBO_@<0-3Ep;+6b}mkBDphgH7*a zQl2jVguM`&LG2ls`R?&}Al|d_ALlpGdn{l6b4#&(-A~dIcl5N_1oQ1H3QCpHSV%=s zB7qkBY<8Y*s-tm0QBj*NN88a9|8KWOSJpuOpkl{s?DGC4#We(^uA!M|g{omCcw3CK z{X;-{%2;6xeOwDmq1Um?`cVT}fjg80@R9BAQ2@~Dq%i#VFI})s!L`o*6BuD&quSN3 zch0NjS$}?>uxJWNyRb0qq0j_(9*&^J5o^y3)c*#r&T)&FA~FuJh;W(l%ai=f37SWc z!yPGx)vv7Q$$?i3J`(FVO}&Wn86FNT2c5p5E_OlArKaGtC|7W$o8svhb$-$OE=J1# zc;A{YjeW7w*S_f)D{4~P82$Kqn>*tOtby0e0!CJXD%R>nx`X8p9)~8ZI7RRz_=2wx z6yljcc+m?jJ0CXhcrwa-a>v<*mfkxEb9DQ9FI*pNKba=U%NleA!_+mw8KKFG?syJ7 zqQk-IF#%f$?CK{rnj7_paIEVWj!8)(3mPdkZGWVm)^tL`Es!)6g45L0i(BL3%%C_9b`r4jwl$+H!6txK(=T&i*50jU44s5|M}!5K%G|JEkSO zUs|sGbSxw-tWrJ!G_2@w>dIJR7x6e9kVrCVQN||9@V$);pg{*Nw^3*Eo2fg#r$k)5 z+z=^?wz*5Y4270zsJvwQqp!x$(g&F7EvPwCDJF1d*TnfAD|A%+VfNj>I#k9!wK^a` zkH1ke8u{2+LQo`)jaYTdYI97DXSZxl!GLfZ)`hPUFQwzA{gV!&`(!kXb1JS=3ZodO zP@l5eri(ye>k?NA4CDRd)k8z@7xqa^^VzQYsyb!33U}roF#`;|BrPgPTwmg-)lvO> zc9+_D`{oG0z|k*P@|elrr=k-Q*j<#cSg23Art^#dMhTgyD+wC>jr{t^UERF(xIuKJ zVIOQaqnNEoZTY#OuJzP#IvLnN_e&knW^KNhz2pm zl&;q0Ynm;rqe?ul4R%+aG~Tn)>Ps=f-Y&Z^^Pd5dU9 zVv6F;s2DCiIuB9N`VAw(PkX2T*%z{{`X}dMU*|i=<-CO z%SE?E8SHjgQA31r3;FEN3sL6jt4!f?$gtdN3lfH#+5TV| zN5IandPK*Ar=VqF)`faiWG1O`@cP<`Ccl$a)1E3LBEYWOeZdEv($*>sq+{j(vo?%d z|2Lv~_rl&$8RN;QS;p>vn$KvPnp7))g5W2S*5}#paP#H~Y9ohZdZYYu*9>;sPTt~E zMKP?tzd+(yyxDr`OXL<@_^X};)Xr%W=c`v4G65tcW=g6LHDvBwybJ4Ztxq}K|Lu(D z*3LK@GS>UZbD;4aSyT=EwCpRZ1Ew^d8GYWZfg4jNI(+zsg@$(GNx0kF{5pTy>Id)O{$IGxaZf6c~kt)C-h@n15oE_~f258v(Ch_<`*6M{9X`OJ(4t{(orjEaXZ zBr08f)EY!-uNG45;uFjMd0=BQ>@%E47;NKwDIxkiO|r~*P*JOpGW&bJ%r!~HVPXd* zQh78QA$_(pUwkEI~M--pR=sxH|T zRq*VaU$Q+9Y7^c0K4tff$!Rppk=G(b=9@$94+3t7w0YC0!7JJAEmbS``CWy z&HmK+tmcKsc05 z@%W71426nMdaP{d{nCK_g&u|u({@@B6}1zp#3fpRLaQI^2|0-`=dFoGds@Z$J06zn zjm&D0vzGxD>5d`!g@=!o{T>`h$RM~99F%qH>n}h{a$Mx7bk7jb!n$U_hD&2@w2s|G zyY2J8AZYSVj;K6VvSVb@So4+bp6Xt#*?PBoi-%bhl4k3eu%UyTQIl(4>|biKhb6} z7{M6pCcE{un!=YzD$R15T_66y{&Nk#TgZ(fOY>Tn>@&k(FKv0GeqH~5LshZs4BVu| zi!yM*FK2>E%Q6ZD_mlh8jIjHt^((9C* zgJc&Hicl1H`J%Sfs$kRlHatLE-sc}EfzbD?0UjAL-*fLa);T?=nNU|rQ$;;#WT`fS z)4`Gzk>T1^T%yY0Bx?9x+re}K7^E7{%WDviY5b@#0_0Np^iS`vlG(2^V+fq)SI>qqJSaNUo4+ zsf@j97Mzz1`{)fg{=(}V-`ifVTQg#r9Kpz>#p3IIr)A1R0S&fCZLMQ67A*pt&yaBKqT4vx$6TysRGaf$r= zbm}ou!5v1c=ls<*cn+vI|K=!l&(kky`8rZ`WMujcbo`$;mfnUPMQW_tW4U(kS!#=`&C5B09^|6jdiiH_zEMoCh6XfM=w6@%Az_39U`)7cMtML)?7(=#ix zw_Pa;>yI*D-Rj^ktgJmPG>a70coZ)a^mjWm?&8Ij#ELU$h>cve)~ zJ$o;;QtSFe*y6^C$s+dylbgnZOCB(gyEQSZ^Jo>2b|Ysayq7uUZi5xFF#$%M($859&*O|Eoh$Yc$NLQLG;vv@!8# zyi{UbcX)4`hZ1YQ<=r(n@|&;!gwq+T^X>*_lZz;3b;1($+S5X^&n1 zx1a7!O2E*##}x2E5$Zv^WbiJolHI+pR7z!eh|Nd!?#af?MSLV-%yenQ~Mao*(UP znct-C(@V%$&Z@as;VeEawRYK6d;|P$&QboEG$CeEhc)A%q^PU0X!5dywtE`-i~4oZ z>rC3WHw@Dh&q`#7g3Wspx-AMXZj?vODg0Hg4LQP#zBPW=b<{mUHS{T(gZNF!mp+#f z6MYm&9w2@!EF4$ohoa>>8zkeqDsTEh%V=$GH4%h(Eb6l70Kt~)y#hMx_M3aLZMCl@ z!S|Hq>=9A6Lw6>kS@TA7`JAR4J=5UlL$=<1+cQj_*=yN6FMKg5QZJ+yu(-B`b7>%W zjF7yt)Fr}}1=4Rquac()z!*pSKtMx|^Asr9`job%t0)M~2OS@N7vLFur5Z`0l>~2} zLU*Lo&N*GU?(%vjP|T8Ot_-So5e~1nNrfM-uHfM7xulPT!;(|acD;!4IXU~Wem=GT zJMdD$|0yL|YkSKCN}<#n^%5xq_38t)1OQLYxsBit$0svP^o~~9cc&j8&7B@_d#$~z zT_npTIeQKu55p!*CO;(oh|hMHn8gKj1=}=r$@^da6YYubjSJw1iT5Gyp^0DRwmZJX zTp6QCT2{vC<=kjdz@P9Q&qa#vp4q0B$-zwq*fQTmy9aUp&I=o)D8A7FPf=8-^Ip5q zaN%oUFlOu{tKIoIy{od7!?r6({B*UHEL~Um@w&j|5loQ7js&TyLUTFnBsdMM7f3qd z&=d0FC`r@^o#x)_db#a8jjWU^jGHp^uSuU;eIdDzA8ucucGnr23voP{d1pzjMo z_k5~zY~35TVf>Sy-Wx;GE+5Bxw|GEZgDTqynf3#OSV=B*gUpn?HLu3X`LyYP-rs!? zT7$zMYG;^%=(uW7rk*wm4S9O!#?ESXvcJ?L?t55hKdXphwmB^V@EIlKk}M2G{CSXZ z#a4?EZC!u371EFe2>8vho_k(ZRIGV$*{Ibu&B9lBe&p4kTyjtS`?Q2vfRKaK=gsX$ z7fI!R-eLvuJ7^(_!y@z$Re^J=>hQzH9wbid-X;~eU72{r-w#LB;*Q2;WU_Nn_ikS| zYeG#W0G!JvE3&N6s~^R%NJ@ty<)Gtl1J3TXKl?hYHLE90{Y)Fw#H-`NAQZKgXiweI zTsO(-d4XAC*RjMODa~sXoXcH^3)Kc96rwp5x#z~eWpF>FwEn~U3~+@K1Vp7p_Z+z# z4!EpD>|CQ3@f>8y`a4wLl&TkZQg7?S%wdvjp8x*Q@}+9BA9OSc!Xj&8CqLO{-08l} z+As8^%fwKvST-%U_-bD~;Z9$G(dY|xX;G~X^Rnlh!lT`zYIkqiPd)o$1@(HqcK@h7;d8*$;e$g% zfBp=yy=?L}3JW-QGr^AZAZ?cI_GFj$+(T49&|Q%E3hfm2Rp$)d=VgZLc8L~PP2Ik2 zGYXylqfbzXY2o-lLTf>^=B3VEHOO^O%T(;AqnBAAE@YdZv8co=Cw5wi&%Ik1wumh zkGxm;$c63)fiu*vS;mVw%_?l~jAwrby?=QEdZu>(n?}cs-#lYlzQk*wLDuG<(tgQ5 zY<31HJ2}5eN^XMw>*1Yb`;UNV!q!$dGiP_xeVI0T|A~aLNMsmiW*FqNS7B+6lK?4oc_TZdApkm1K??9|@5%_8?9R+8hudWSlR` zxmFR?VaMk7GeQka2V$&RnP;S3_EorMw$JAuV6?QD#b}PFd7p z+gQsQ-cOQ5RlyXbZJ7op(6OI2>&&mF-}$BE72E&Rhz~W4jHt{SH0lG*A~GBci`kdQ zfBumY-K9iiR~}T{tYT{`zX#ox0L^1wZ@&%+i}4qvwB>NTt2oBqp?fh>2YmQcYX~&q zHg<7`&{mz)#zV?_IOUTv<5s64EHb!MC5hOOo@J%mc4<_DL?RRua!Ho=>})^pM((|B z-hRYlNCi9)RnOfs8o;c)`CEK;! zX_vsU>a#nW5I}6$tzCWdC@~9PX?3ZfDcfRi(>z3a`mH9pl|$p*i~fU&qPmOYW3kN+ z`00_ejy54}sS+y#@?2;6Th1*p>NV8&XbIJRQ%v)@@WUmvx;WL82D?JNnFJ-)%EeEMZQFRe|^rBo+#s-aP)lL zd^v>AQV(_4?z4K53w;$9%~Y+zEqtC^V=ZusM(vt;VSpRD+i9J za%Mf=AX$-s>N(~4>T;mh=qMrvU~Z(dlo~a7mKkUp*Y}t*`b;w1Zj0K#`73@hKztvI(sbV6w^puGow^5wm90m?NHO7+Gl!Skv{8mlj8{Z8$fNELV2pdE%Tve4+T z$SQj9_&oqb8`~G#$xb(IJa#^}aM)lcNbMxZSgh4RItC9lHYO%yHXagM95`N}avzUf zDzqRI_r#|DHxIx5D{?Y9)ArSRn=DE2^V+SlHW+EBZI-HOztz#5rEG;FSFO7;3zhOa zk;d2DM0(nmlYxSTD=Li;JEveR+wR3#u>t>*WR`9BF8z5e=*H(20T^RKMPtv z&z}ZWf<+pZM3wsY78~o?Tixj5YsN4=nGft3X-9GT9jNdrBE4X1dp?J9K3hJ%$(gml zMFcw9y&v^$d7AHd?sJ?xSBr8wT=3S^p|D}DlCI*s{{jY^ja#=Z&7CLit|sd_bBuMQ z){GGD8SFwM2#Ih-tnwJD>rpBjH}DQ{(+YsFj5&!_=6@Uc(RXUjAG25C&A#+56<0kpigZx?gEq$WKkds1P#WP~Dth+aljSaaO2g~L;Pi^BV&E3Cj#{>bX za6WGB;nMb(t%e?|Oj}BERxpll>2>KzKTYY;VbV5|vaOXE>|fJ*Lv&rA3TR@e=^m`$ zJnqq48%zIaW~gXcJn2vLfv@rZV$DX8M^0`i=MQy9 zO$COOm(-P`xw}l%ySg?lfG66EBfFq$T$#tco|70d2%p;*GUwDDwxqp7+sNGUnQ4up{t7GH?ed1t zxBNa$2v7&Ha&wfqtEW`RfvtM5C&TN%gOnyk+6L8;FK3hP%`+dmdt&KaJB4%S)h>i+ zzW9~q9#8N!pLRX@Md_6$Tv39=;hU;mbQXxIt*uVKb(z}(P!u>myV5q2T*7-q!oO8~ zsXy@aSCE&H@b(l7C*SoG#|oy13S9NnW_YgeST3FxB=!WPs% zN6TTu#bthmU;5sV+oMveclcDapjsJ` z>JS(vwuoFmB5N4FK87)Ssx)2b%Q>;QahJKuFMYMl!;@SPUO8~o%Bq`y8$agv4H(R| za34iI_jNJ)x??PLF?YxKd9Hcp0`Q)h& zF$2S8p7s`q-_a^;@tJP(;Oi7WoESPIti#Go&189#qNzR^q5 zFD;MksEmGOPIL$8C8-MI3Hba+?kRptwsLkq^#`+tf*O`f`jtx`6;-yIsCuDGgRGTN zpOsWc#WQ%1AF(dJo>;N{no(V!Op&jiq5pCbcCg8%j{Vjg?;miq#^LR2-!v)0hrAH< zAxSZj7aG#tlWO1oUeEZS2VuV4bIwvr>(}Q%=@Y_~Wre#*ut^1%ft5+rMk>SVbD+nn-1o;`i2WzXYqV96f>IUn z51GX+|Kv4PLG!$rmtF7zw4v2TnnhRESPNxzll@cr;y@MO=^F>nm%6O*mTQFw0k<2; zeRb?}Qhcy5l`Q_L&l>&zkEbh-XTtygMUse5sU%mYRjxvg&5=|RwuC0P5OOnS&g4p% z+}DP3B{KIpTaMhfklPG1bI%;Z_Vf9Ef4|@3u|4+K|L^zX^?p6izCVGrIxwUU2ZX+p zF40GkSZDfh(lZ0L;xiA2cNi`%JU~mQO<@Bp#bRXo%1YHhW&8nmyd!L;7!FIIJYz1+ z35OoEPc+DRo~kRQw0oE5=PQfh%`dHNy5G}ii;;Aee>Sh6vYF%xQY(TbL(eHnvc@B0 z?E(HRdvSpsGX=uP{-b_+|4n~uHTgh=k1mNW`Q}~-8$-T~Bk$J05uenp`ctkYa|z!E z-z@teP)V+r39_P{A2STR?#+EA9@ITTc@=ei2zCh@bSZ*duF1Uft2AfBZ9&9?)lST) z(=vC%Qm_1GjJ!ue^9%p{D21M1=8F{yk9FlxajpvY4v%%Gi$rs<#y!TLMA$-+IsP#=29~k0IYM)P$u72=b{Gq<2DR5h9Td-|G4xO{`{^_!^{2Pl% zSLHu}E-xG1#7M$_#1M%q*Ys%mZ6TpO$mHq&@dwi7pMD4j*TbXyYC!HJe-Vp`!KYVYsg9D^If{^@fNw>)oCVN?D*CdZYZf1|6|uRK%W z_Jc4))n|2yxs>?}H#cK_Qs%(0wP7e!KDF4P`7m?Kc%gi*PgmjXAJw?xY^SFB_rx`x z-OjSP(Sd-i=f{nbqh=HClMNf1UdZ;{mQgLc<)*BHabNz7t`CuJ@v>|2_lt6GCT>nm zZUcB@r-}Ak{8k4OF8HIp2Cp>t3o~b5V>=J)WqsW%epJIAo6t@Q^@0~)A2kdCop;W2 zcjaf(p4S4Z459q_nwAW=Ad19@Y7*E`cP-i3$X!EbdJvc0i!(^Xann zCPUtD$4Yr~iH5}~)%tiNy!gemFeGHZp)22kBI&DW?iA@dI`OubrwXEaFdq+LjKOhK zw1~@kuh$zyC#D!N-)FC**BZhP+=8^F|*4`rxaJlb;E4%!=drT&G=4- zr^y6F#w*$ni+h2in6=+-f8V3P-q9Y(ak=_@x9SzE!bghnb{q`(frV>^1Zhmt>=B@ zVY0i*IbAv@uoJPrE%GHgd7Qj1Y=ynpdseHU*@@KeH&htQu?omT3$#byS}fl;R!Gf` zXD9Q{1_{-D*K?h3JtbFcXr`?-qDc0?>fRZA-P1oD5g)usPkTOh6$624rLEe%o{fGq z>v{AA4{6wflgRFW)y|Px-bX4ddb)q|OXb6zmbQnFtz2BB;{r_CqyIhFA-uv|C~m{! zgWbfj%ca8DBf2lDR%>DmJItZehe=@q;q^jh z;g)0TdSk$B%jD4(EoxvQ`=&?Rg6>u5kzp8r=0w`LHVtdovcQR`ben|2Lgst;>c38k ze7ACD=xZ-;V8+64+H8DCo!Feo2%Rxv?4rDeVXX8qR+e3uJ1&^%K;}{3EZH@sRdB*R z+%Z`alXLCo{s{lL{fyj5-pQF~)7){QgL~tjin;6EEnFAS(y)A%^ZBf<^LHOz*^Tde z^Sasd%4cOSZQ>P6bnn|YCFf_hh8HwUE_3HG@WDC5TTfK-_<D_Za(~flsrSuI!ixK{ zl^=U_Ms&@)EYZl<5~1N&+#PT9B}A|NXfBR%KQa(3KKph+%Dzvf^+?1bZ@jpW}`}~BrbJpV4H8pm7wtvEO+mu;+-FD~K&bWFC0-hyuzZS4R zt5Ey-T+l-#^pMUtrd5`c3A5se9OC$m><%5sDasAda-+W#?R*3 z=<*xUem8<%hG>$2_+)^B{n>nJsx0~(hm?w*^K@yCVa$$FljpKD=~?WYgi~BC24W|( zAvE1M(d+z1;Y($lax#e{W1=o>gYIci2l@9-gT4Q81zMnw?=)cY=ACSYTqCSNrn#RGa;whTc*%84&+r(%oPBLzXoR}Wd1BbtM5*NSUG!tq0_sCRLh1>L+Emtd=X6~Ia4 z>keYa*uAcGY+W4~2&{9jE_JgtD^y8!spS;N!ulc<(cW0c%iZaP(zdqnU)5TJMX(Q1zNdCzz2SfRbgbwX*NbhGjQC7ZHxciYtp(Dy ze`R}n2=49U#i{;D)wpPkCZO8e1JB0b<_kP=#O2TXZ4SJZ|+9YG@6R?bx*sp z{AK(wS@Kn6|Gt%|{)QYhpD2Jn`$8k+86|Ui(%N5usF)qVpoZAVdAh;Ou%B0$^Hr%%L>C|XFnhZ2;$DUY;kmn)FYS*fKrB#3Y$FN&eTrWA5Ks*A+H&lJcLIT|i@x zT*TgvobFz{(_>w3L;2d^TaEG6lVfWgrtrE5Kq2?8O9t0aW2c?H&kol;v~KG*>6R*A zFpxEo3VM6T!w>S;;gw1J3rGv7**VGcTN@!l3~_(JXG;9NjS#q1LR~V)v!AeP{r+1I zw;^v$uiLM!k8hHOzktT;6#R_&0ia-YcD*!7a1{m|uxn?s5bs*yr?I6qE)!F%GxpWu zMY2;7@gT(NtQJu#**wga-r)Dz{~3I%{k-CFd1QyHMpvxY^g<=PQzto@iD^xWs7feo zF%26(E5=?V{p9TvEp?l#b0i-$PjYI8TG=D#;>OYir@S>#2+U@p07%d>B27Kfepk9=Xh4kvG(tx_l;k`q>uij|nRf|O;$Yqa$CyYt|kbSy161~@91M&z-h6U{NfJ0mBjD@lZG~qv z{<;#g9&*>{nGZ*YYFISw-uOx+M7BJj6@HlLGWFiOH#@k68Sjb=1Gk!mPU^Tmad}YW zjc=PM7G5hyDRXKc{po5aA+{gvvN`irg=)eTKJVHEoTgldCr%ltf)YJH$I}tv#4~FR zWrpTk&rS&XdKYP3a(#G}ek$L3xZt^h%U8a~td4uVGeQab*A2J&;$>P@VE>4?%^a(>)d(kfgPh$M|Fp z=`dIRE#>-)XRsMc41rgrUcOk|nW@*HMEVI+Y3zc*v49yAr3R&td|iDE>1I~WJ7&!~ zo7VK%WgqSvL`pJmB2;c3NA~rp9scLCgs`8?XC3*^4N?wrYH}@?*a+}X|K|ug@nnu! zqH_cHlK1So>(-N$2tUb}I{ALut-PZ8Aqy<$_f}@#mIS8&-rMih;utHHG9e(H>b<5@ zky~RW^Vm31YO~TthyvuweV43S}9G!1X7A|zy=uuA9Y(hkq=@)(|3 zRm?Y$e@0A51~a1j4q-;snczHNTH|P9Zg9g6I_z=sR9Gu_=D|w=p((s47SjCH{yMie z**0*eJX0C>>O=NIBk?ywdT{JS8&Rlq4SLi-G#HV8Hlw;9uUhMKjC~d}hVgVLB)W3Q zFoCE6Y$}NyvU1vLEMxUP&R&*T2Uo?DO!4P3QOP18{8&vYv@3UoI!)7wI!|t~^r^$O zIdyK^3Ta!}$&b7fIc3ds#WV1u!Z_kuw~HrS);H9Ev{W7Dy;3Vk?gWV2EOSF;4oZJNksg#ee&}^^}%im+}|$Z1U+e zOyJQK9w5KRtIpq*AD3R3XxW*T4<=@`CWbxb%vU=OSLji75@?R?q;gLDJqz9ZR(vN% z$D{KOPp8xboF`sPB2dcEm-V@oM0{*(K(!$i2e?%sSZ%eH>zqW=CL zJ){;5O)r(0q>}02Hyy0NJ(scX%-^F;Z>av@uRnC4p{#9{K7PN^o_lpHaXyvmUm&LU z6p4IO=|hFHYQITmpTaCrB}y@OYO}OGpWag15iGMFq8eHM5isG{os6y(TsSQtS15@mNFODXGT{h3OqZF^vaC# z>n)7px$?XWc{Y!2KgZt2E|V*ZznU0Kxn|@4JDeP-k=c9!id*Mz0{P_m<(JW?oTe9g z-ETwk1znIdL}-&84%NUpRr( zV7qdNp2=Mu-m*8D-DJ@NaGnOCwGqciAa;p9MfN3G81*YU=gQ0{R1;4WGDh7OWX(>z zNF{elcX;iDGBTuXpW7;ai6h9WNxHFrwkie z?$&t$SG~4;{ik9uW>Fsd@^-VncAoq6=fu+<6`EcO0DcIfdyu{77Qngn2V+ z6`$Q_qnV~Ro##crXL*l!5kA+miVP^*J))jU;t5}E9N62{?d6)f^0K5Ycvt~0yJk9z zqf*aI=0@vSS+}Or@uMeq_PqFT)1mUFDq>2$!0GeeNh-=juRV7q^2Qqy^&R(|yYf}H zRO2l5{rTGzj>OY#qI3FJkh)6-ikMp%*tlBY4N0V&W7TinsdTn`!ucwR!T;nx8MX4i z0DQj|l??)zsEK{Z2&Ec~qgK6}J6@XDCqplMjOpPS*(D?r({^$0U+Nmqi$kWH2u1ZQ z|FrpmOmh8P<4-P#kpSD!J&v`6M6e5O@?skZq?y|@0VuB3=FS$+VD6(QPPzX2*h;aK zTv32RGpAvsp)MtPnHjwqctAqwhQ0uSuD#`@e68>|)u)CLTbCuI8$NCKSkUf;|MaT! zgB`puYtMg%BL~lAFniH|@D<+^6WFYG56%CI3eSv*URm&?{ha)o8L2$Py27tKxU?>- zIEE61Yy1LPyEm!u>(<>LiY2rz+)r+U+%zCX7W$_n-5bH0)|x~ zvNouQJW4R<^+KG_@BFChWOLk*3shu6(IRLRDU=%62@Z;`dX#b1DqIAl=z4bUUm)@C z_fM>^N5Z31(8QNj(Zy1(2UL#xayuA7rMjIK-%kIXOf&EHstg;&K?c-6!mU>LN@ipE zXqXeWPvK4Rq?%R=rN|>g+FV3A4bmek;_i4~3i+s0etREesTcTV8|Ktfv3O;$@s_!! zFX_=xu2w4baS}Oybuy!hOG{CfXx9h`tKH0oDrvK!OHk_UIi zX*)k=<5a#o#Eao1U!OOxu50*2R#VF?ISin0M>$ zfg|^PNN#sI!=p)0G1`^xPiQSTV^RR0e$NP^>W_*Tq+s4PUk|Spf%08O0#E)BEO~Dh z)f|iQphm1Dpxx6|D31+9GiTq|`Mtd`N<;*#Nxv1700=fck7VWZ?(s#HoNdRzehsp7 zCR6&k4Hf(v9Y9Dj|X)65cJBc{3K|XrdkI(z)GFZ?Q0BOb0T25 zUyQaxwea|}UosK`OhYwd(YQ;VM0_vsHF;5)^^yIE)9wt(6c)vQ_iEt(FJx7#O z`Xb{ODp^x0s$J$7fpgW&EBf-E%mV{1w*MD}={&2s#T+S`yznHo&M9|~Q=cJ&ZalMi; z;Jh9Bk}`k#)*3wusln*kZ2{57j%S(u)#+DN%k+?|ZOcYs(yf*?t6ct?7@J=pWJ9_P z#jz=vm3-_GH8(k;nKNltL|aA6TEQzP^BEKSC#J4YRQiYj*$Ki8k+z_KTISnoyH#aU5*e?b~aLVnwfR#Uywt51%90jgIuUg{%2%(^(t<`AXx zxtx zyl5$&8MG%pT{fc{>CRgo>6-gJg_S~WP}apJ!#oXK+`BD#h)@!z^b|JOyX7bDKEjz^ zFPF61c&tSWNJKN1q7{p+@kon=;We z>o;M?Wk8#)M=v_3PYrp;Z3}Wx231ZOcD!L1Q~phMF9L`YR|wt)u1^AXEMlO&0OA@g z+PCDrhK60LtEXqp59-bP9Ua2aORP$4-F#xg`G#(x!bl+MqyEe?j7XONNyN_N}7 zx@2YmD$}9xD8bS#(ezNfQtNFO+&{U z{qz{6mS-NV$WUV{JV+fTOOwClQ4`Cm((J4KA=%fqv{O^8{+^WFKP_2pzPADk0lbuN zk3-jeM#fctu^X6O22*F7i$T5WTtqMlcX`KGq6%Pbyrn34W9sS4)pg0 zn*RrHL~WcUEH3|dTRb@N@aEyNTFp|d;Vy%$x7Ry&#!b_doqYzi!FZmqk*5kH$=yC*AP zq)faOjh+z=`487`P-mxn0XzXxUytm3Q|5}7zc+hSh!|}a%BVo>;~2}Fog4edMi}LW zolDtnSLFeMV{1TG`+&@GSN`lSJ7eg1Ixt9b^#yK+9^67I^%xcfP1hBPrMB-P-;o9e zKpirkt#CYvi5w}OQMp0UI4A_mNpsJDmiGDw8rSES9t)cqYbvG)#zyD+Lg+xD9x%dG zQQGf^)b@uJCe$CySf9U%hu`m*Z=oa>Sx>frDzA5GTL@aqtFD4Q?$Y(|;SO%e0Sf-yb>VR+JTmQsF zzLaRR@uY?r`=A#6uOr0QlUes@v}$J#A|1bpoCOgG&9_&Jf;Ic7yY*oW+$C+Q7P+=2 z9~~}{sDCo@%ht#semDfjJ33GmZ#8_jE%rg+(;?w=ynh2iZpwpIm!!SMH#?rPDcA?y z6moHAJg&jqXo(PHzn`DYr2rs^>&+`(=ops=)9R_{XpKdnU%8AKdz{st8Iwv()@|a$dgStKVC9aGwlpp zHU!?hp;2+tWw{KcFSz`7e@0yHmM?eurkr2f>B|33C$RTP*Np$AeR*c#_=72EHAlz9 z#4Tc973t@Afi7X{v0%Is1iP1!e|r9LG{Eq%`0}2hJVa*c@`Jh#{EYGg;9KqG%SAg` z#@m`{@sLM@iLGB)MEfg;!XxsBQo@Jkw6CfSo*R9KWn__QX7^hps$Z<$ z4fIav#-|;8KUQOq_ew@3&2DQG;cBBu$=_28G7GV*4~UcUDqdFY<&TyP_>%~{${1GI zLi+ZX`dRlqUDI9MqtP}chcxoRdq2O7qh<=rkYP!_EsTDwv;RDLtPhDP+JIXYZvO0Y z`DlQ;Y5$Wmkz2Rf6YYIU2X#aL1M+3Bm`!0*X$QCXLw1ST7GX-YLbU#5nuvRx-tWfR zPM=Tcl$1XD*%qKv0l2a0ywK67q1@%WLIpU3)MeNb{n-`7nEhGYR}JI9x$Rt*;!3ga z6&qhWLvOxDzdnT-JlUmG$V|+$n|lI)x%C;lY|% zQkUa&nSZ70CFa>5!YiNNk*Yr4lUbk%wpJk2CH=l{XYlUV+gHRVlf%PD9AY``>W58Y z9i+eZ$nxb(JC?-jJIS(Y01*hr*^4?R#3en4uN**hap%jKWlQ9eS46Yv7Tcp8N6a;z zYTrR;ygUT8U5x3|EBOz34fg(jOalA%d&jSEk$}BvIs3gKr*E5Ua+Z59LJxApL>;Hr zoHN4`Bd^KbhqZbz&CGW>@h#-F&k&7}j*X;NA*nk$trw*fbdW+ZVWvxB!80w9vU`7W zz7P|JVt-~KizJu4ylyKmVkqlghEdBnc>DpX2>xuZWpp4xi9D^D4#G;~n8~^!9khxo zwz$O2a7{mW6l`#2z&2&>){LHHyhba*YmTj}h^Tzi>v8p!+++vTE+t3jD#BLF2E{UQp_GV^!=n;Lu+u;$|0%CcfOuqqjlQz#ba+(bE5B>kLu z93kZ6Ck-|2v)F$@{Bd9y*tdfM+uY?9+dm=Vp6;(V5^B>xX>-S}qbzka1~a#>;=g)C zm7{!42GwAjy9Ar{B=d3g4ww!rYBL?0bhpcqzS2!{r%p+eRX_+X7c{p|nTk#%!k+zo zTPn)<(BD1aHWv}GgU7M-D#;w7Z|3sVayiTAlw<2M+Pm`kZ>^%8t=Jo#bwj)tok$;S zrWO51-ay;Lz0bGNtjx;p{_?rbsf*U;gMsGC{p(POaj|V1eC%OrD=4sQN1uoDok=+P zsmj(W{ld_i+Z0fDOLf7~*pEJ*cfcGlKN>baGM77|F)Jlp8F1r`A>SZ5K|DV9pkbos z<9&+szJh(|>{T1AA9MZ@k!1&pe6N|GTG(v@O°Zuy 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%0DR|z2Ba}w}GG~JN1hdi3H>YPwGIDZC#1$Ie8l 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

Vl2{N{mbQu}a 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�d3L`_~zQW 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�=_9KBD6 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�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�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

    domQ^IXZ3!p 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

    4{44@~JnOOqf7iQ^5 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�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 \ No newline at end of file diff --git a/apps/sample/public/vercel.svg b/apps/sample/public/vercel.svg deleted file mode 100644 index d2f842227..000000000 --- a/apps/sample/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/sample/src/components/Device/index.tsx b/apps/sample/src/components/Device/index.tsx new file mode 100644 index 000000000..db7d1cb4f --- /dev/null +++ b/apps/sample/src/components/Device/index.tsx @@ -0,0 +1,12 @@ +import React from "react"; +import { Box } from "@ledgerhq/react-ui"; +import styled, { DefaultTheme } from "styled-components"; + +const Root = styled(Box).attrs({ p: 6, mb: 8, borderRadius: 2 })` + background: ${({ theme }: { theme: DefaultTheme }) => + theme.colors.neutral.c30}; +`; + +export const Device: React.FC = () => { + return No device connected; +}; diff --git a/apps/sample/src/components/MainView/index.tsx b/apps/sample/src/components/MainView/index.tsx new file mode 100644 index 000000000..b216764a4 --- /dev/null +++ b/apps/sample/src/components/MainView/index.tsx @@ -0,0 +1,81 @@ +import React from "react"; +import { Button, Flex, Icons, Text } from "@ledgerhq/react-ui"; +import styled, { DefaultTheme } from "styled-components"; +import Image from "next/image"; + +const Root = styled(Flex)` + flex-direction: column; + flex: 1; +`; + +const Header = styled(Flex).attrs({ py: 3, px: 10, gridGap: 8 })` + justify-content: flex-end; + align-items: center; +`; + +const Actions = styled(Flex)` + justify-content: flex-end; + align-items: center; + flex: 1 0 0; +`; + +const IconBox = styled(Flex).attrs({ p: 3 })` + cursor: pointer; + align-items: center; + opacity: 0.7; +`; + +const Container = styled(Flex)` + flex: 1; + justify-content: center; + align-items: center; + flex-direction: column; +`; + +const Description = styled(Text).attrs({ my: 6 })` + color: ${({ theme }: { theme: DefaultTheme }) => theme.colors.neutral.c70}; +`; + +const NanoLogo = styled(Image).attrs({ mb: 8 })` + transform: rotate(23deg); +`; + +export const MainView: React.FC = () => { + return ( + +

    + + + + + + + + +
    + + + + + Ledger Device SDK + + + Use this application to test Ledger hardware device features. + + + + + + ); +}; diff --git a/apps/sample/src/components/Menu/index.tsx b/apps/sample/src/components/Menu/index.tsx new file mode 100644 index 000000000..bb8ba0a30 --- /dev/null +++ b/apps/sample/src/components/Menu/index.tsx @@ -0,0 +1,35 @@ +import { Flex, Icons, Text } from "@ledgerhq/react-ui"; +import styled from "styled-components"; + +const MenuItem = styled(Flex).attrs({ p: 3, pl: 5 })` + align-items: center; +`; + +const MenuTitle = styled(Text).attrs({ + variant: "paragraph", + fontWeight: "semiBold", + ml: 5, +})``; + +export const Menu: React.FC = () => { + return ( + <> + + + App session + + + + Device action + + + + APDU + + + + Install app + + + ); +}; diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx new file mode 100644 index 000000000..9ed6c7cff --- /dev/null +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -0,0 +1,67 @@ +import React from "react"; +import { Box, Flex, Icons, Text } from "@ledgerhq/react-ui"; +import styled, { DefaultTheme } from "styled-components"; +import { Menu } from "../Menu"; +import { Device } from "../Device"; + +const Root = styled(Flex).attrs({ py: 8, px: 6 })` + flex-direction: column; + width: 280px; + background-color: ${({ theme }: { theme: DefaultTheme }) => + theme.colors.background.main}; +`; + +const Title = styled(Text).attrs({ mb: 8 })` + opacity: 0.5; +`; + +const Subtitle = styled(Text).attrs({ mb: 5 })``; + +const MenuContainer = styled(Box)` + flex: 1; + opacity: 0.2; +`; + +const BottomContainer = styled(Flex)` + opacity: 0.2; + flex-direction: column; + align-items: center; +`; + +const LogsContainer = styled(Flex).attrs({ mb: 6 })` + flex-direction: row; + align-items: center; +`; + +const LogsText = styled(Text).attrs({ ml: 3 })``; + +const VersionText = styled(Text)` + color: ${({ theme }: { theme: DefaultTheme }) => theme.colors.neutral.c50}; +`; + +export const Sidebar: React.FC = () => { + return ( + + Ledger Device SDK + + Device + + + + Menu +
    + + + + + + Share logs + + + Ledger device SDK version 0.0.1 + + App version 0.1 + + + ); +}; diff --git a/apps/sample/src/pages/index.tsx b/apps/sample/src/pages/index.tsx index 5107f4428..d96fba33c 100644 --- a/apps/sample/src/pages/index.tsx +++ b/apps/sample/src/pages/index.tsx @@ -1,18 +1,23 @@ "use client"; import React from "react"; -import { Box } from "@ledgerhq/react-ui/index"; +import { Flex } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; +import { Sidebar } from "@/components/Sidebar"; +import { MainView } from "@/components/MainView"; -const MainContainer = styled(Box)` - width: 100%; - height: 100%; - background-color: ${({ theme }: { theme: DefaultTheme }) => - theme.colors.background.main}; +const Root = styled(Flex)` color: ${({ theme }: { theme: DefaultTheme }) => theme.colors.neutral.c90}; + flex-direction: row; + height: 100%; `; const Home: React.FC = () => { - return Test; + return ( + + + + + ); }; export default Home; diff --git a/apps/sample/src/providers/theme.tsx b/apps/sample/src/providers/theme.tsx index 325d8e737..3b18345e5 100644 --- a/apps/sample/src/providers/theme.tsx +++ b/apps/sample/src/providers/theme.tsx @@ -1,6 +1,6 @@ import React, { useMemo } from "react"; import { defaultTheme, palettes } from "@ledgerhq/react-ui/styles/index"; -import { ThemeProvider } from "styled-components"; +import { DefaultTheme, ThemeProvider } from "styled-components"; interface CustomThemeProviderProps { children: React.ReactNode; @@ -11,7 +11,7 @@ export const CustomThemeProvider: React.FC = ({ }) => { const selectedPalettes: "dark" | "light" = "dark"; - const theme = useMemo( + const theme = useMemo( () => ({ ...defaultTheme, theme: selectedPalettes, From e53867500f3f0394828a4bc8d404a33b1ce934e0 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 30 Jan 2024 16:40:19 +0100 Subject: [PATCH 052/253] feature(sample): add Ledger fonts --- .../public/fonts/HMAlphaMono-Medium.woff2 | Bin 0 -> 29312 bytes apps/sample/public/fonts/Inter-Bold.woff2 | Bin 0 -> 95992 bytes apps/sample/public/fonts/Inter-ExtraBold.woff2 | Bin 0 -> 96572 bytes .../public/fonts/Inter-ExtraLight-BETA.woff2 | Bin 0 -> 99144 bytes apps/sample/public/fonts/Inter-Light-BETA.woff2 | Bin 0 -> 97580 bytes apps/sample/public/fonts/Inter-Medium.woff2 | Bin 0 -> 95224 bytes apps/sample/public/fonts/Inter-Regular.woff2 | Bin 0 -> 89212 bytes apps/sample/public/fonts/Inter-SemiBold.woff2 | Bin 0 -> 95652 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/sample/public/fonts/HMAlphaMono-Medium.woff2 create mode 100644 apps/sample/public/fonts/Inter-Bold.woff2 create mode 100644 apps/sample/public/fonts/Inter-ExtraBold.woff2 create mode 100644 apps/sample/public/fonts/Inter-ExtraLight-BETA.woff2 create mode 100644 apps/sample/public/fonts/Inter-Light-BETA.woff2 create mode 100644 apps/sample/public/fonts/Inter-Medium.woff2 create mode 100644 apps/sample/public/fonts/Inter-Regular.woff2 create mode 100644 apps/sample/public/fonts/Inter-SemiBold.woff2 diff --git a/apps/sample/public/fonts/HMAlphaMono-Medium.woff2 b/apps/sample/public/fonts/HMAlphaMono-Medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c0a07df8bb145ec65d26b0edb161bfd5a304e1e8 GIT binary patch literal 29312 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

    AXdly9c(2)rs-+$RXr&vtP5%hnLKI8tWK=s zvC4r%w^jHn=8+zp!vWZ>jDY$bBZQhzTY^PN+-3)|i0#hlXl)4?KN%WfRn4Sjod%%r z>)AN}Qj}lS;ptbj@?+(3sC&G5tj3zdaTacorL{-@5uo(si^lJb;l?+OLj4#j8iUD} zbzl?>L}Y=d{7C$PL%kGlm+Z&x^kQiFfxI3c9qu)ute9AYXpEB)R)I6(9u&!pFoXolsG%fGFstB$f zfjq;`0ZZY^_x-Yw@4U0~r~BpjGPQrvMev5zXYHx#kZv}8SFpBMkT^Zp?*uhe4ijPY zd5fw*qJ4T8rH-b{ z;*l@TlQ;s?wNN4TBn${cnMHo9G{0&7msKFPsk9?E?}~zmGRBc34s~(U>kdqS9l==; z-{=y?EXPUDmh=V&1ifp@Bf>WYmkbUB$RmyD-Es;eMt%fiSR{hr`dGcyST{?4IXVCZ z$sOBhRU(8ofblMy5v( z{n|HFpbq;FKsI3|rjb0i|KXf4^Ay-hyuYd4*Bc(cUY)cX&2bKveYyw?b0k%Nymt;^ zyuTVqF)5`cHim{W97RkK-6&=p#YkCODm zomgB&;~l)5k|Zt3r0B>|O-hQ6rwNXwSTcihF!RFjgc7nz1-AV3RAM7MCN_Bc#%bg~ z>*I6h1s9a&y4ud@wpFo3Q>h)jonZy9XDwX*8?QgIv7%TjDteJE!t%0~HP)JW@TwJ8 zN(~M`yDh@LwV|a+wv9^DN~%mMep1DR1ZQCcrBgubMqd7AD-cASXpd=W8`3Z-%*U|` zPm?85;mR~i@HCYg6c7QUSuDx&h(rUDXpL%0)tpX=aWaM}bb=+){UQZ4*6R6`CX0eJ z*kvux_VxZ+yw}}Y94nislu&WKx0AtG5?S(aCz}|!XNeP635_r!OV+P^yl6v9U+<+G zoF_I*q`A{D&>BkAgcVGX^9)MF1X#=H2W+1wlBQE4VXy{gr_yqAa!8AZfX_T}(sxC?R(uGLh@&YsCz(WAXnuMO`6Fc{gJ?<4S_5+5N5#>PZ&B_} zL)ORyx)I)+uA?SZASH@VwIOs&PAJQqm7`0Yfn2l@o&r9~OI2E@bIf#NpEwg&Ih8Ho z&lkRmot~YusrpoM3q#(sc8vl_{rsTHx9!_Jfb z&FgZ35z=jvEXs;VO1MTE9F-Vlb%1G-VVE1s)Q9eYi>NsJf34MF2olBe6gGt)e* z@H$YH9rDOMXQmeQk!SKVUOfu8Qwy^@%{h7Za$`=Htjl+<28#O&)_rZP_TS^x>h5Ew1{ohYygVDTL2@vAHsgrWQS zYbQY`5K&V{@+MqJXZ6dSf1T4roe}6an}oOwAG-WABr_IQ5mKSQr7wW)jxB7=hM#DQ z`ZJ#W#>7z{liTzP>P@d%k_qDI8XAn1mu$)6+tj?vwBKO5hnR}q&`xBDu|khM$rur* zqS4hUX2t;z@ebl`8k!iL^QQ<&}*S)YsY}J>q>7~c%mxSgZ zx)__eE=j^9W-s!N*i2oG?u)sGl_}Mj!xp_t>3>Fy2t-dx)#%L(uY_Pt@k6d zYGOqOy3gpLuJM2D@{Di>PCC|G!PyTR`qs>?^`f17nt#GQoUZS zRch_!YNcsbf3lSg*IX5gPH|U148I~kVSw)ssGjUB8~XRYZ6-pn!``-P@mfr?AtTr^ zaYN9Nd<9I{K)rGMQB0eRBEZ8J^FQHVZ=q`La|->qugye0uCeD<0rrP4@NYOJUOKN; z1Oi>#sjW-@I&~{SBG{4_vCpc2`^K;}R6o2-7gbkYN�OuvCb0T}4_WgI=;vu7!`# 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 z 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

    k6j|yR_l3q2^r$PEP30sSBbP8AZ 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 literal 0 HcmV?d00001 diff --git a/apps/sample/public/fonts/Inter-ExtraBold.woff2 b/apps/sample/public/fonts/Inter-ExtraBold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..fc1e3e2ab9927ade8bfda53355e77b2dc9503cc0 GIT binary patch literal 96572 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 ZFZtxNMz)hmhb%D1_!NfAgbW$r{{Rlg%2faW literal 0 HcmV?d00001 diff --git a/apps/sample/public/fonts/Inter-ExtraLight-BETA.woff2 b/apps/sample/public/fonts/Inter-ExtraLight-BETA.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e080a70ea98a8afa892cfe9c43a7fe2f2932a678 GIT binary patch literal 99144 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%0A|YOB5E1$YrLHj-{9QxT9M# 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

    >G;EU>UE25vRPdX|zHn+O5T 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

    fZ!utm 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 ehSp;jjC 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%0AdhCA&^2ag@6h{6#^@6@O8+E zr$BWHrQ@2s?q=oYb?68x@X{GITCs^3iEUz8-zgw9Id`50&CK22

    - + - +
    ); } diff --git a/apps/sample/src/providers/theme.tsx b/apps/sample/src/providers/theme.tsx deleted file mode 100644 index 3b18345e5..000000000 --- a/apps/sample/src/providers/theme.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React, { useMemo } from "react"; -import { defaultTheme, palettes } from "@ledgerhq/react-ui/styles/index"; -import { DefaultTheme, ThemeProvider } from "styled-components"; - -interface CustomThemeProviderProps { - children: React.ReactNode; -} - -export const CustomThemeProvider: React.FC = ({ - children, -}) => { - const selectedPalettes: "dark" | "light" = "dark"; - - const theme = useMemo( - () => ({ - ...defaultTheme, - theme: selectedPalettes, - colors: { - ...defaultTheme.colors, - ...palettes[selectedPalettes], - }, - }), - [] - ); - - return {children}; -}; From d1011296c10c86271b2e8b4281d509a9eda54961 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 30 Jan 2024 16:48:58 +0100 Subject: [PATCH 054/253] feature(sample): use local font instead of nextjs font --- apps/sample/src/pages/_app.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/sample/src/pages/_app.tsx b/apps/sample/src/pages/_app.tsx index b5cacbd44..f86d41961 100644 --- a/apps/sample/src/pages/_app.tsx +++ b/apps/sample/src/pages/_app.tsx @@ -14,14 +14,11 @@ import { GlobalStyle } from "@/styles/globalstyles"; import { StyleProvider } from "@ledgerhq/react-ui"; import type { AppProps } from "next/app"; -import { Inter } from "next/font/google"; - -const inter = Inter({ subsets: ["latin"] }); export default function App({ Component, pageProps }: AppProps) { return ( -
    - +
    + From 25b42394eecfe48b69c5fa6927ec0a34ce5b53fe Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 31 Jan 2024 15:36:56 +0100 Subject: [PATCH 055/253] chore(doc): add documentation around hygen --- README.md | 45 +++++++++++++++++++ .../core-module/with-prompt/prompt.js | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0b79cfa43..9b670fe87 100644 --- a/README.md +++ b/README.md @@ -85,4 +85,49 @@ This project uses Github CI. In order to avoid task repetition, we can add some scripts the corresponding package's script folder, on in a root script folder if it concerns multiple packages. A script is a `.mjs` file interpreted by [zx](https://github.com/google/zx). +# Templates + +To kickly scaffold part of our code, we use `hygen` to help us kickstart our development process faster. +Each project can have it's own `_templates` folder, so **generators** are scoped. +The `_templates` folder contains the basic generators to create new ones. + +[Hygen documentation](https://www.hygen.io/docs/quick-start/) + +## Process for adding a new generator + +The easiest way would be to use `hygen` from the root folder as so: + +**Options**: + - `new`: creates a generator that take no input during creation (but can still access metadata) + - `with-prompt`: creates a generator that can take some input during creation (with access to metadata) + +``` +pnpm hygen generator with-prompt|new name +``` + +This command will create a new generator folder in the root `_templates` with the given `name`. +It's there so that we can modify this new generator. +When done, move the new generator to it's correct project `_templates` folder (again, so we can keep scope). +Finally, we should add a script in the correct `package.json` as a shortcut to trigger the new generator. +eg: + +``` +pnpm core module:create +``` + +Under the hood, the script looks like this: + +``` +pnpm hygen with-prompt +``` + +- `name` is the name given during the creation of the generator. +- `with-prompt` to call the prompted version of the generator (there can be multiple targets, like `new`) + + +## Available templates + +| workspace | script | description | +| - | - | - | +| 📦 core | `module:create` | scaffolds a new _src/internal_ module | diff --git a/packages/core/_templates/core-module/with-prompt/prompt.js b/packages/core/_templates/core-module/with-prompt/prompt.js index 1e82eaa02..a5057680e 100644 --- a/packages/core/_templates/core-module/with-prompt/prompt.js +++ b/packages/core/_templates/core-module/with-prompt/prompt.js @@ -5,6 +5,6 @@ module.exports = [ { type: "input", name: "moduleName", - message: "What's the name of the module?", + message: "What's the name of the module (camelCase)?", }, ]; From 16c5844019bc39eb208c3ddd750cb2cf4a79185d Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 31 Jan 2024 15:49:51 +0100 Subject: [PATCH 056/253] feat(sample): create device component --- .../src/components/Device/StatusText.tsx | 31 ++++++++ apps/sample/src/components/Device/index.tsx | 77 ++++++++++++++++++- apps/sample/src/components/Sidebar/index.tsx | 16 +++- 3 files changed, 117 insertions(+), 7 deletions(-) create mode 100644 apps/sample/src/components/Device/StatusText.tsx diff --git a/apps/sample/src/components/Device/StatusText.tsx b/apps/sample/src/components/Device/StatusText.tsx new file mode 100644 index 000000000..e3e4e0d3f --- /dev/null +++ b/apps/sample/src/components/Device/StatusText.tsx @@ -0,0 +1,31 @@ +import { Text } from "@ledgerhq/react-ui"; +import styled, { DefaultTheme } from "styled-components"; +import { DeviceStatus } from "."; + +const getColorFromState = ({ + status, + theme, +}: { + status: DeviceStatus; + theme: DefaultTheme; +}) => { + switch (status) { + case DeviceStatus.CONNNECTED: + return theme.colors.success.c50; + case DeviceStatus.AVAILABLE: + return theme.colors.primary.c80; + case DeviceStatus.BUSY: + case DeviceStatus.LOCKED: + return theme.colors.warning.c60; + case DeviceStatus.NOT_CONNECTED: + return theme.colors.neutral.c80; + } +}; + +type StatusTextProps = { + readonly status: DeviceStatus; +}; + +export const StatusText = styled(Text)` + color: ${(props) => getColorFromState(props)}; +`; diff --git a/apps/sample/src/components/Device/index.tsx b/apps/sample/src/components/Device/index.tsx index db7d1cb4f..caeade32a 100644 --- a/apps/sample/src/components/Device/index.tsx +++ b/apps/sample/src/components/Device/index.tsx @@ -1,12 +1,81 @@ import React from "react"; -import { Box } from "@ledgerhq/react-ui"; +import { Box, Flex, Icons, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; +import { StatusText } from "./StatusText"; -const Root = styled(Box).attrs({ p: 6, mb: 8, borderRadius: 2 })` +const Root = styled(Flex).attrs({ p: 5, mb: 8, borderRadius: 2 })` background: ${({ theme }: { theme: DefaultTheme }) => theme.colors.neutral.c30}; + align-items: center; `; -export const Device: React.FC = () => { - return No device connected; +const IconContainer = styled(Flex).attrs({ p: 4, mr: 3, borderRadius: 100 })` + background: ${({ theme }: { theme: DefaultTheme }) => + theme.colors.neutral.c40}; + justify-content: center; + align-items: center; +`; + +export enum DeviceStatus { + AVAILABLE = "Available", + CONNNECTED = "Connected", + BUSY = "Busy", + LOCKED = "Locked", + NOT_CONNECTED = "Not Connected", +} + +export enum DeviceType { + USB = "USB", + BLE = "BLE", +} + +export enum DeviceModel { + STAX = "Stax", + LNX = "LNX", +} + +// These props are subject to change. +type DeviceProps = { + name: string; + type: DeviceType; + model: DeviceModel; + status?: DeviceStatus; +}; + +export const Device: React.FC = ({ + name, + status, + type, + model, +}) => { + return ( + + + {model === DeviceModel.STAX ? ( + + ) : ( + + )} + + + {name} + + {status && ( + <> + + {status} + + + • + + + )} + + {type} + + + + {!status ? : } + + ); }; diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx index 9ed6c7cff..9ccb6523a 100644 --- a/apps/sample/src/components/Sidebar/index.tsx +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -1,8 +1,13 @@ import React from "react"; import { Box, Flex, Icons, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; -import { Menu } from "../Menu"; -import { Device } from "../Device"; +import { Menu } from "@/components/Menu"; +import { + Device, + DeviceModel, + DeviceStatus, + DeviceType, +} from "@/components/Device"; const Root = styled(Flex).attrs({ py: 8, px: 6 })` flex-direction: column; @@ -45,7 +50,12 @@ export const Sidebar: React.FC = () => { Ledger Device SDK Device - + Menu From e1424b411b8cebd658592530880312d3c5abef9d Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 6 Feb 2024 10:22:53 +0100 Subject: [PATCH 057/253] feat(sample): migrate from pages to app nextjs router --- .gitignore | 1 + apps/sample/src/app/client-layout.tsx | 30 +++++++++++++ apps/sample/src/app/layout.tsx | 29 ++++++++++++ .../src/{pages/index.tsx => app/page.tsx} | 0 apps/sample/src/lib/registry.tsx | 44 +++++++++++++++++++ apps/sample/src/pages/_app.tsx | 27 ------------ apps/sample/src/pages/_document.tsx | 41 ----------------- 7 files changed, 104 insertions(+), 68 deletions(-) create mode 100644 apps/sample/src/app/client-layout.tsx create mode 100644 apps/sample/src/app/layout.tsx rename apps/sample/src/{pages/index.tsx => app/page.tsx} (100%) create mode 100644 apps/sample/src/lib/registry.tsx delete mode 100644 apps/sample/src/pages/_app.tsx delete mode 100644 apps/sample/src/pages/_document.tsx diff --git a/.gitignore b/.gitignore index 0c5819f92..8bc46bdc3 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ Thumbs.db # build lib +!apps/sample/src/lib/ # turbo .turbo diff --git a/apps/sample/src/app/client-layout.tsx b/apps/sample/src/app/client-layout.tsx new file mode 100644 index 000000000..f147c97cc --- /dev/null +++ b/apps/sample/src/app/client-layout.tsx @@ -0,0 +1,30 @@ +/** + * src/app/client-layout.tsx + * + * Root layout component for client-side rendering. + * + * Utilizes StyleProvider from @ledgerhq/react-ui, + * GlobalStyle from "@/styles/globalstyles" and local fonts + * for styling the client-side application. + */ +"use client"; + +import { StyleProvider } from "@ledgerhq/react-ui"; +import { GlobalStyle } from "@/styles/globalstyles"; + +type ClientRootLayoutProps = { + children: React.ReactNode; +}; + +const ClientRootLayout: React.FC = ({ children }) => { + return ( + + + + {children} + + + ); +}; + +export default ClientRootLayout; diff --git a/apps/sample/src/app/layout.tsx b/apps/sample/src/app/layout.tsx new file mode 100644 index 000000000..44009aafe --- /dev/null +++ b/apps/sample/src/app/layout.tsx @@ -0,0 +1,29 @@ +/** + * src/app/RootLayout.tsx + * + * Main layout component for server-side rendering. + * + * Combines Styled Components Registry with the ClientRootLayout + * for rendering the application. + */ +import { StyledComponentsRegistry } from "@/lib/registry"; +import ClientRootLayout from "./client-layout"; + +export const metadata = { + title: "Ledger Device SDK", + description: "Ledger Device SDK Sample App", +}; + +type RootLayoutProps = { + children: React.ReactNode; +}; + +const RootLayout: React.FC = ({ children }) => { + return ( + + {children} + + ); +}; + +export default RootLayout; diff --git a/apps/sample/src/pages/index.tsx b/apps/sample/src/app/page.tsx similarity index 100% rename from apps/sample/src/pages/index.tsx rename to apps/sample/src/app/page.tsx diff --git a/apps/sample/src/lib/registry.tsx b/apps/sample/src/lib/registry.tsx new file mode 100644 index 000000000..5552a7a8a --- /dev/null +++ b/apps/sample/src/lib/registry.tsx @@ -0,0 +1,44 @@ +/** + * src/lib/registry.tsx + * Styled Component Registry + * + * use the styled-components API to create a global registry component + * to collect all CSS style rules generated during a render, + * and a function to return those rules. + * Then use the useServerInsertedHTML hook to inject the styles collected + * in the registry into the HTML tag in the root layout. + * + * https://nextjs.org/docs/app/building-your-application/styling/css-in-js#styled-components + * + */ +"use client"; + +import React, { useState } from "react"; +import { useServerInsertedHTML } from "next/navigation"; +import { ServerStyleSheet, StyleSheetManager } from "styled-components"; + +type StyledComponentsRegistryProps = { + children: React.ReactNode; +}; + +export const StyledComponentsRegistry: React.FC< + StyledComponentsRegistryProps +> = ({ children }) => { + // Only create stylesheet once with lazy initial state + // x-ref: https://reactjs.org/docs/hooks-reference.html#lazy-initial-state + const [styledComponentsStyleSheet] = useState(() => new ServerStyleSheet()); + + useServerInsertedHTML(() => { + const styles = styledComponentsStyleSheet.getStyleElement(); + styledComponentsStyleSheet.instance.clearTag(); + return <>{styles}; + }); + + if (typeof window !== "undefined") return <>{children}; + + return ( + + {children} + + ); +}; diff --git a/apps/sample/src/pages/_app.tsx b/apps/sample/src/pages/_app.tsx deleted file mode 100644 index f86d41961..000000000 --- a/apps/sample/src/pages/_app.tsx +++ /dev/null @@ -1,27 +0,0 @@ -/** - * _app.tsx - * - * This is a special Next.js file used to wrap the entire application and provide a common - * layout or functionality across all pages. It allows you to maintain state, apply global - * styles, and handle other aspects that should persist across different pages. - * - * The `App` component in this file is initialized once for the entire application and is - * used to customize the rendering of pages. For more information, refer to the Next.js - * documentation on customizing the App component: - * https://nextjs.org/docs/advanced-features/custom-app - */ - -import { GlobalStyle } from "@/styles/globalstyles"; -import { StyleProvider } from "@ledgerhq/react-ui"; -import type { AppProps } from "next/app"; - -export default function App({ Component, pageProps }: AppProps) { - return ( -
    - - - - -
    - ); -} diff --git a/apps/sample/src/pages/_document.tsx b/apps/sample/src/pages/_document.tsx deleted file mode 100644 index 849bc11e9..000000000 --- a/apps/sample/src/pages/_document.tsx +++ /dev/null @@ -1,41 +0,0 @@ -/** - * _document.tsx - * - * This is a special Next.js file used to create a custom document layout. It allows you - * to enhance and optimize the server-side rendering of your application by customizing - * the HTML document structure. This file is crucial for implementing global styles, meta - * tags, and other layout-related configurations that should be applied on the server side. - * - * Keep in mind that changes made in this file affect the entire application's HTML structure, - * so use it judiciously. For more information, refer to the Next.js documentation on customizing - * the document: https://nextjs.org/docs/advanced-features/custom-document - */ - -import type { DocumentContext, DocumentInitialProps } from "next/document"; -import Document from "next/document"; -import { ServerStyleSheet } from "styled-components"; - -export default class MyDocument extends Document { - static async getInitialProps( - ctx: DocumentContext - ): Promise { - const sheet = new ServerStyleSheet(); - const originalRenderPage = ctx.renderPage; - - try { - ctx.renderPage = () => - originalRenderPage({ - enhanceApp: (App) => (props) => - sheet.collectStyles(), - }); - - const initialProps = await Document.getInitialProps(ctx); - return { - ...initialProps, - styles: [initialProps.styles, sheet.getStyleElement()], - }; - } finally { - sheet.seal(); - } - } -} From f172962d7978bcd9c7891d0e22800a2c099fa43d Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 1 Feb 2024 11:46:42 +0100 Subject: [PATCH 058/253] feat(sample): disable turbo for build script turbo generates errors with react components using context. https://github.com/vercel/next.js/discussions/43577#discussioncomment-8294975 --- apps/sample/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sample/package.json b/apps/sample/package.json index 03583a602..ed45000e5 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev --turbo", + "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" From 070f328b5d139d960d03f3a71b88fe0e4ec11732 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 7 Feb 2024 12:06:38 +0100 Subject: [PATCH 059/253] [DSDK-191][FEAT][CORE] Core exports + sample app integration (#16) - feat(core): setup builder and exports - feat(core): return the name and version of package.json - feat(sample): display sdk version in sample app Co-authored-by: Alexandre Magaud --- apps/sample/package.json | 1 + apps/sample/src/app/client-layout.tsx | 11 ++++++---- apps/sample/src/components/Sidebar/index.tsx | 20 ++++++++++++++++++- .../src/providers/DeviceSdkProvider/index.tsx | 18 +++++++++++++++++ apps/sample/tsconfig.json | 14 ++++++++++--- packages/core/index.ts | 1 + packages/core/jest.config.ts | 1 + packages/core/package.json | 2 +- packages/core/src/api/DeviceSdk.ts | 19 ++++++++++++++++-- packages/core/src/api/DeviceSdkBuilder.ts | 8 +++++++- packages/core/src/di.ts | 10 +++++----- packages/core/src/index.ts | 20 ------------------- .../config/data/LocalConfigDataSource.test.ts | 5 ++++- .../config/data/LocalConfigDataSource.ts | 5 +++-- .../internal/config/di/configModule.test.ts | 4 ++-- .../src/internal/config/di/configModule.ts | 10 +++++----- packages/core/tsconfig.json | 5 +++-- pnpm-lock.yaml | 3 +++ 18 files changed, 108 insertions(+), 49 deletions(-) create mode 100644 apps/sample/src/providers/DeviceSdkProvider/index.tsx create mode 100644 packages/core/index.ts diff --git a/apps/sample/package.json b/apps/sample/package.json index ed45000e5..efd8afe97 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "@ledgerhq/device-sdk-core": "workspace:*", "@ledgerhq/react-ui": "^0.14.13", "next": "14.0.4", "react": "^18", diff --git a/apps/sample/src/app/client-layout.tsx b/apps/sample/src/app/client-layout.tsx index f147c97cc..4bfe889e1 100644 --- a/apps/sample/src/app/client-layout.tsx +++ b/apps/sample/src/app/client-layout.tsx @@ -11,6 +11,7 @@ import { StyleProvider } from "@ledgerhq/react-ui"; import { GlobalStyle } from "@/styles/globalstyles"; +import { SdkProvider } from "@/providers/DeviceSdkProvider"; type ClientRootLayoutProps = { children: React.ReactNode; @@ -19,10 +20,12 @@ type ClientRootLayoutProps = { const ClientRootLayout: React.FC = ({ children }) => { return ( - - - {children} - + + + + {children} + + ); }; diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx index 9ccb6523a..54b67faba 100644 --- a/apps/sample/src/components/Sidebar/index.tsx +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -1,6 +1,7 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import { Box, Flex, Icons, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; +import { useSdk } from "@/providers/DeviceSdkProvider"; import { Menu } from "@/components/Menu"; import { Device, @@ -45,10 +46,27 @@ const VersionText = styled(Text)` `; export const Sidebar: React.FC = () => { + const [version, setVersion] = useState(""); + const sdk = useSdk(); + + useEffect(() => { + sdk + .getVersion() + .then((v) => setVersion(v)) + .catch((error: unknown) => { + console.error(error as Error); + setVersion(""); + }); + }, [sdk]); + return ( Ledger Device SDK + {version ? ( + SDK Version: {version} + ) : null} + Device (sdk); + +type Props = { + children: React.ReactNode; +}; + +export const SdkProvider: React.FC = ({ children }) => { + return {children}; +}; + +export const useSdk = () => { + return useContext(SdkContext); +}; diff --git a/apps/sample/tsconfig.json b/apps/sample/tsconfig.json index f9c79624a..2533e1dd9 100644 --- a/apps/sample/tsconfig.json +++ b/apps/sample/tsconfig.json @@ -7,10 +7,18 @@ } ], "paths": { - "@/*": ["./src/*"] + "@/*": [ + "./src/*" + ] }, "strictNullChecks": true }, - "include": ["**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "include": [ + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] } diff --git a/packages/core/index.ts b/packages/core/index.ts new file mode 100644 index 000000000..3bd16e178 --- /dev/null +++ b/packages/core/index.ts @@ -0,0 +1 @@ +export * from "./src"; diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index 4ca93d482..cc4e81b66 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -11,6 +11,7 @@ const config: JestConfigWithTsJest = { ], moduleNameMapper: { "^@internal/(.*)$": "/src/internal/$1", + "^@root/(.*)$": "/$1", }, }; diff --git a/packages/core/package.json b/packages/core/package.json index 7387010a3..b9f036656 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@ledgerhq/device-sdk-core", - "version": "1.0.0", + "version": "0.0.1", "license": "MIT", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 48b35004a..aedb2fdf1 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -1,7 +1,16 @@ +import { Container } from "inversify"; +import { types as ConfigTypes } from "@internal/config/di/configTypes"; +import { MakeContainerProps, makeContainer } from "../di"; +import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; + export class DeviceSdk { + container: Container; /** @internal */ - constructor() { - console.log("Hello world"); + constructor({ stub }: MakeContainerProps) { + // NOTE: MakeContainerProps might not be the exact type here + // For the init of the project this is sufficient, but we might need to + // update the constructor arguments as we go (we might have more than just the container config) + this.container = makeContainer({ stub }); } startScan() { @@ -11,4 +20,10 @@ export class DeviceSdk { stopScan() { return; } + + getVersion(): Promise { + return this.container + .get(ConfigTypes.GetSdkVersionUseCase) + .getSdkVersion(); + } } diff --git a/packages/core/src/api/DeviceSdkBuilder.ts b/packages/core/src/api/DeviceSdkBuilder.ts index 96e058aa1..5f82d59f6 100644 --- a/packages/core/src/api/DeviceSdkBuilder.ts +++ b/packages/core/src/api/DeviceSdkBuilder.ts @@ -1,11 +1,17 @@ import { DeviceSdk } from "./DeviceSdk"; export class LedgerDeviceSdkBuilder { + stub = false; constructor() { console.log("New build"); } build(): DeviceSdk { - return new DeviceSdk(); + return new DeviceSdk({ stub: this.stub }); + } + + setStub(stubbed = true): LedgerDeviceSdkBuilder { + this.stub = stubbed; + return this; } } diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 6fd46ab40..9001059d6 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -1,19 +1,19 @@ import { Container } from "inversify"; import { makeLoggerMiddleware } from "inversify-logger-middleware"; -import configModuleFactory from "./internal/config/di/configModule"; +import { configModuleFactory } from "@internal/config/di/configModule"; const logger = makeLoggerMiddleware(); -type MakeContainerProps = { - mock: boolean; +export type MakeContainerProps = { + stub: boolean; }; export const makeContainer = ({ - mock = false, + stub = false, }: Partial = {}) => { const container = new Container(); container.applyMiddleware(logger); container.load( - configModuleFactory({ mock }) + configModuleFactory({ stub }) // modules go here ); diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index c0bb10b1a..72b13356e 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,24 +1,4 @@ import "reflect-metadata"; -import { types } from "@internal/config/di/configTypes"; -import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; -import { makeContainer } from "./di"; export * from "./api"; export * from "./transport"; - -async function main(): Promise { - const container = makeContainer(); - const mockContainer = makeContainer({ mock: true }); - - const mod = container.get(types.GetSdkVersionUseCase); - console.log("module.getSdkVersion", await mod.getSdkVersion()); - - const mockModule = mockContainer.get( - types.GetSdkVersionUseCase - ); - console.log("mockModule.getSdkVersion", await mockModule.getSdkVersion()); -} - -main().catch((err) => { - console.error(err); -}); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts index 779befa29..5dc692806 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts @@ -66,7 +66,10 @@ describe("LocalConfigDataSource", () => { describe("stubFsReadFile", () => { it("should return a stringified version of the version object", () => { expect(LocalConfig.stubFsReadFile()).toEqual( - JSON.stringify({ name: "DeviceSDK", version: "0.0.0-local.1" }) + JSON.stringify({ + name: "@ledgerhq/device-sdk-core", + version: "0.0.1", + }) ); }); }); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index 05b91bca1..30788caad 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -7,10 +7,11 @@ import { } from "@internal/config/di/configTypes"; import { Config } from "@internal/config/model/Config"; import { LocalConfigDataSource } from "./ConfigDataSource"; +import pkg from "@root/package.json"; const version = { - name: "DeviceSDK", - version: "0.0.0-local.1", + name: pkg.name, + version: pkg.version, }; export const stubFsReadFile = () => JSON.stringify(version); diff --git a/packages/core/src/internal/config/di/configModule.test.ts b/packages/core/src/internal/config/di/configModule.test.ts index 5150f0403..d9d8633ea 100644 --- a/packages/core/src/internal/config/di/configModule.test.ts +++ b/packages/core/src/internal/config/di/configModule.test.ts @@ -3,7 +3,7 @@ import { FileLocalConfigDataSource } from "@internal/config/data/LocalConfigData import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; import { RestRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource"; import { StubRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource.stub"; -import configModuleFactory from "./configModule"; +import { configModuleFactory } from "./configModule"; import { types } from "./configTypes"; describe("configModuleFactory", () => { @@ -32,7 +32,7 @@ describe("configModuleFactory", () => { let container: Container; let mod: ReturnType; beforeEach(() => { - mod = configModuleFactory({ mock: true }); + mod = configModuleFactory({ stub: true }); container = new Container(); container.load(mod); }); diff --git a/packages/core/src/internal/config/di/configModule.ts b/packages/core/src/internal/config/di/configModule.ts index bc0b11d7c..23facbcdd 100644 --- a/packages/core/src/internal/config/di/configModule.ts +++ b/packages/core/src/internal/config/di/configModule.ts @@ -10,21 +10,21 @@ import { types } from "./configTypes"; // This module is used to configure the dependency injection container // This is where we will bind our interfaces to their implementations (or mocks...) type FactoryProps = { - mock: boolean; + stub: boolean; }; -const configModuleFactory = ({ mock = false }: Partial = {}) => +export const configModuleFactory = ({ + stub = false, +}: Partial = {}) => new ContainerModule((bind, _unbind, _isBound, rebind) => { bind(types.LocalConfigDataSource).to(FileLocalConfigDataSource); bind(types.RemoteConfigDataSource).to(RestRemoteConfigDataSource); bind(types.GetSdkVersionUseCase).to(GetSdkVersionUseCase); bind(types.ConfigService).to(DefaultConfigService); - if (mock) { + if (stub) { // We can rebind our interfaces to their mock implementations rebind(types.LocalConfigDataSource).to(StubLocalConfigDataSource); rebind(types.RemoteConfigDataSource).to(StubRemoteConfigDataSource); } }); - -export default configModuleFactory; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 8ffe96945..9eba77295 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -4,8 +4,9 @@ "outDir": "./lib", "baseUrl": ".", "paths": { - "@internal/*": ["src/internal/*"] + "@internal/*": ["src/internal/*"], + "@root/*": ["./*"], } }, - "include": ["src", "jest.*.ts"] + "include": ["src", "index.ts", "jest.*.ts"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94bedead3..8cdff99f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,9 @@ importers: apps/sample: dependencies: + '@ledgerhq/device-sdk-core': + specifier: workspace:* + version: link:../../packages/core '@ledgerhq/react-ui': specifier: ^0.14.13 version: 0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11) From 5fb17ab7b83703a87618dbf6a8294260f68872f0 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 7 Feb 2024 14:30:46 +0100 Subject: [PATCH 060/253] feat(eslint): add simple-import-sort plugin to check imports order --- packages/config/eslint/index.js | 22 +++++++++++- packages/config/eslint/package.json | 3 +- pnpm-lock.yaml | 55 ++++++++++------------------- 3 files changed, 41 insertions(+), 39 deletions(-) diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index 31ed47591..993d700d8 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -5,7 +5,7 @@ const project = resolve(process.cwd(), "tsconfig.json"); /** @type {import("eslint").Linter.Config} */ module.exports = { extends: ["eslint:recommended", "prettier", "turbo"], - plugins: ["only-warn"], + plugins: ["only-warn", "simple-import-sort"], globals: { React: true, JSX: true, @@ -34,6 +34,26 @@ module.exports = { rules: { "import/prefer-default-export": "off", "no-void": "off", + "simple-import-sort/imports": [ + "error", + { + groups: [ + // Side effect imports. + ["^\\u0000"], + // Node.js builtins prefixed with `node:`. + ["^node:"], + // Packages. `react` related packages come first. + ["^react", "^@?\\w"], + // Internal packages. + ["^(@|@internal|@root)(/.*|$)"], + // Other relative imports. Put same-folder imports and `.` last. + ["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"], + // Style imports. + ["^.+\\.s?css$"], + ], + }, + ], + "simple-import-sort/exports": "error", "@typescript-eslint/consistent-type-definitions": "off", "@typescript-eslint/ban-ts-comment": "warn", "@typescript-eslint/no-unsafe-member-access": "warn", diff --git a/packages/config/eslint/package.json b/packages/config/eslint/package.json index 498150738..626c965d4 100644 --- a/packages/config/eslint/package.json +++ b/packages/config/eslint/package.json @@ -12,6 +12,7 @@ "@vercel/style-guide": "^5.1.0", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^1.10.12", - "eslint-plugin-only-warn": "^1.1.0" + "eslint-plugin-only-warn": "^1.1.0", + "eslint-plugin-simple-import-sort": "^10.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8cdff99f5..d6dfe8997 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,6 +105,9 @@ importers: eslint-plugin-only-warn: specifier: ^1.1.0 version: 1.1.0 + eslint-plugin-simple-import-sort: + specifier: ^10.0.0 + version: 10.0.0(eslint@8.56.0) packages/config/jest: devDependencies: @@ -1816,7 +1819,7 @@ packages: eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) @@ -2956,7 +2959,7 @@ packages: eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) @@ -2990,7 +2993,7 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -3014,7 +3017,7 @@ packages: enhanced-resolve: 5.15.0 eslint: 8.56.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -3036,8 +3039,8 @@ packages: debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -3074,35 +3077,6 @@ packages: debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7 - eslint: 8.56.0 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color @@ -3154,7 +3128,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -3164,7 +3138,6 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3288,6 +3261,14 @@ packages: string.prototype.matchall: 4.0.10 dev: true + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.56.0): + resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + peerDependencies: + eslint: '>=5.0.0' + dependencies: + eslint: 8.56.0 + dev: true + /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} From e41bf2a6ab213e40030774d86f9a45c710000e1b Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 6 Feb 2024 11:39:44 +0100 Subject: [PATCH 061/253] chore: return an error on eslint warning --- apps/sample/package.json | 2 +- packages/core/package.json | 2 +- packages/signer/package.json | 2 +- packages/trusted-apps/package.json | 2 +- packages/ui/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/sample/package.json b/apps/sample/package.json index efd8afe97..31d629b90 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -6,7 +6,7 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint --max-warnings=0" }, "dependencies": { "@ledgerhq/device-sdk-core": "workspace:*", diff --git a/packages/core/package.json b/packages/core/package.json index b9f036656..18024d2fd 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "rimraf lib && tsc -p tsconfig.prod.json && tsc-alias -p tsconfig.prod.json", "dev": "tsc && (concurrently \"tsc -w -p tsconfig.prod.json\" \"tsc-alias -w -p tsconfig.prod.json\")", - "lint": "eslint --cache --ext .ts \"src\"", + "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "test": "jest src", "test:watch": "pnpm test -- --watch", diff --git a/packages/signer/package.json b/packages/signer/package.json index 5d22ed8b9..17a553008 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "rimraf lib && tsc", "dev": "tsc --watch", - "lint": "eslint --cache --ext .ts \"src\"", + "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "test": "jest --passWithNoTests" }, diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index af535ef61..90d20c862 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -9,7 +9,7 @@ ], "scripts": { "build": "rimraf lib && tsc", - "lint": "eslint --cache --ext .ts \"src\"", + "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "dev": "tsc --watch", "test": "jest --passWithNoTests" diff --git a/packages/ui/package.json b/packages/ui/package.json index df50fed1c..41114ae19 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "rimraf lib && tsc", "dev": "tsc --watch", - "lint": "eslint --cache --ext .ts \"src\"", + "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "test": "jest --passWithNoTests" }, From f844f0ebfe54322806589b9b6fd79ef014bad6e5 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 7 Feb 2024 14:20:19 +0100 Subject: [PATCH 062/253] chore: fix lint:fix script for all packages/apps --- apps/sample/package.json | 3 ++- turbo.json | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/sample/package.json b/apps/sample/package.json index 31d629b90..e1687eff5 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -6,7 +6,8 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint --max-warnings=0" + "lint": "next lint --max-warnings=0", + "lint:fix": "next lint --fix" }, "dependencies": { "@ledgerhq/device-sdk-core": "workspace:*", diff --git a/turbo.json b/turbo.json index a896532ea..14fd58d9f 100644 --- a/turbo.json +++ b/turbo.json @@ -9,6 +9,9 @@ "lint": { "dependsOn": ["^lint"] }, + "lint:fix": { + "dependsOn": ["^lint:fix"] + }, "dev": { "dependsOn": ["build"], "cache": false, From e56cb0c1160bf0e845452b06d6b440556d2388f1 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 6 Feb 2024 11:49:58 +0100 Subject: [PATCH 063/253] chore: block relative import from parents folder --- packages/config/eslint/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index 993d700d8..3c62c7e83 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -34,6 +34,12 @@ module.exports = { rules: { "import/prefer-default-export": "off", "no-void": "off", + "no-restricted-imports": [ + "error", + { + patterns: ["../*"], + }, + ], "simple-import-sort/imports": [ "error", { From c1d338949e6ccebfccedc872ef05fcd9ea35efc5 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 7 Feb 2024 14:15:23 +0100 Subject: [PATCH 064/253] chore: disable default export --- packages/config/eslint/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index 3c62c7e83..5032fc334 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -33,6 +33,13 @@ module.exports = { ], rules: { "import/prefer-default-export": "off", + "no-restricted-syntax": [ + "error", + { + selector: "ExportDefaultDeclaration", + message: "Prefer named exports", + }, + ], "no-void": "off", "no-restricted-imports": [ "error", From 624e3a1fbf69ab2ac31bfede7c12383995468985 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 7 Feb 2024 14:59:05 +0100 Subject: [PATCH 065/253] chore: fix eslint warnings --- apps/sample/src/app/client-layout.tsx | 4 +++- apps/sample/src/app/layout.tsx | 2 ++ apps/sample/src/app/page.tsx | 4 +++- apps/sample/src/components/Device/StatusText.tsx | 1 + apps/sample/src/components/Device/index.tsx | 1 + apps/sample/src/components/MainView/index.tsx | 2 +- apps/sample/src/components/Sidebar/index.tsx | 5 +++-- apps/sample/src/providers/DeviceSdkProvider/index.tsx | 2 +- packages/core/src/api/DeviceSdk.ts | 3 ++- packages/core/src/api/index.ts | 2 +- packages/core/src/di.ts | 1 + packages/core/src/internal/config/data/ConfigDataSource.ts | 1 + .../src/internal/config/data/LocalConfigDataSource.stub.ts | 2 ++ .../src/internal/config/data/LocalConfigDataSource.test.ts | 2 ++ .../core/src/internal/config/data/LocalConfigDataSource.ts | 6 ++++-- .../src/internal/config/data/RemoteConfigDataSource.stub.ts | 2 ++ .../src/internal/config/data/RemoteConfigDataSource.test.ts | 2 ++ .../core/src/internal/config/data/RemoteConfigDataSource.ts | 4 +++- packages/core/src/internal/config/di/configModule.test.ts | 2 ++ packages/core/src/internal/config/di/configModule.ts | 2 ++ .../internal/config/service/DefaultConfigService.test.ts | 4 +++- .../src/internal/config/service/DefaultConfigService.ts | 4 +++- .../src/internal/config/usecase/GetSdkVersionUseCase.ts | 3 ++- packages/core/src/transport/ble/BleTransport.ts | 4 ++-- packages/core/src/transport/index.ts | 3 +-- 25 files changed, 50 insertions(+), 18 deletions(-) diff --git a/apps/sample/src/app/client-layout.tsx b/apps/sample/src/app/client-layout.tsx index 4bfe889e1..2371c4d75 100644 --- a/apps/sample/src/app/client-layout.tsx +++ b/apps/sample/src/app/client-layout.tsx @@ -10,8 +10,9 @@ "use client"; import { StyleProvider } from "@ledgerhq/react-ui"; -import { GlobalStyle } from "@/styles/globalstyles"; + import { SdkProvider } from "@/providers/DeviceSdkProvider"; +import { GlobalStyle } from "@/styles/globalstyles"; type ClientRootLayoutProps = { children: React.ReactNode; @@ -30,4 +31,5 @@ const ClientRootLayout: React.FC = ({ children }) => { ); }; +// eslint-disable-next-line no-restricted-syntax export default ClientRootLayout; diff --git a/apps/sample/src/app/layout.tsx b/apps/sample/src/app/layout.tsx index 44009aafe..6b353fa9b 100644 --- a/apps/sample/src/app/layout.tsx +++ b/apps/sample/src/app/layout.tsx @@ -7,6 +7,7 @@ * for rendering the application. */ import { StyledComponentsRegistry } from "@/lib/registry"; + import ClientRootLayout from "./client-layout"; export const metadata = { @@ -26,4 +27,5 @@ const RootLayout: React.FC = ({ children }) => { ); }; +// eslint-disable-next-line no-restricted-syntax export default RootLayout; diff --git a/apps/sample/src/app/page.tsx b/apps/sample/src/app/page.tsx index d96fba33c..08b6316d2 100644 --- a/apps/sample/src/app/page.tsx +++ b/apps/sample/src/app/page.tsx @@ -2,8 +2,9 @@ import React from "react"; import { Flex } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; -import { Sidebar } from "@/components/Sidebar"; + import { MainView } from "@/components/MainView"; +import { Sidebar } from "@/components/Sidebar"; const Root = styled(Flex)` color: ${({ theme }: { theme: DefaultTheme }) => theme.colors.neutral.c90}; @@ -20,4 +21,5 @@ const Home: React.FC = () => { ); }; +// eslint-disable-next-line no-restricted-syntax export default Home; diff --git a/apps/sample/src/components/Device/StatusText.tsx b/apps/sample/src/components/Device/StatusText.tsx index e3e4e0d3f..e5edd75fb 100644 --- a/apps/sample/src/components/Device/StatusText.tsx +++ b/apps/sample/src/components/Device/StatusText.tsx @@ -1,5 +1,6 @@ import { Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; + import { DeviceStatus } from "."; const getColorFromState = ({ diff --git a/apps/sample/src/components/Device/index.tsx b/apps/sample/src/components/Device/index.tsx index caeade32a..300e65e43 100644 --- a/apps/sample/src/components/Device/index.tsx +++ b/apps/sample/src/components/Device/index.tsx @@ -1,6 +1,7 @@ import React from "react"; import { Box, Flex, Icons, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; + import { StatusText } from "./StatusText"; const Root = styled(Flex).attrs({ p: 5, mb: 8, borderRadius: 2 })` diff --git a/apps/sample/src/components/MainView/index.tsx b/apps/sample/src/components/MainView/index.tsx index b216764a4..d99223db5 100644 --- a/apps/sample/src/components/MainView/index.tsx +++ b/apps/sample/src/components/MainView/index.tsx @@ -1,7 +1,7 @@ import React from "react"; import { Button, Flex, Icons, Text } from "@ledgerhq/react-ui"; -import styled, { DefaultTheme } from "styled-components"; import Image from "next/image"; +import styled, { DefaultTheme } from "styled-components"; const Root = styled(Flex)` flex-direction: column; diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx index 54b67faba..a12c50773 100644 --- a/apps/sample/src/components/Sidebar/index.tsx +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -1,14 +1,15 @@ import React, { useEffect, useState } from "react"; import { Box, Flex, Icons, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; -import { useSdk } from "@/providers/DeviceSdkProvider"; -import { Menu } from "@/components/Menu"; + import { Device, DeviceModel, DeviceStatus, DeviceType, } from "@/components/Device"; +import { Menu } from "@/components/Menu"; +import { useSdk } from "@/providers/DeviceSdkProvider"; const Root = styled(Flex).attrs({ py: 8, px: 6 })` flex-direction: column; diff --git a/apps/sample/src/providers/DeviceSdkProvider/index.tsx b/apps/sample/src/providers/DeviceSdkProvider/index.tsx index 1e4ed022e..976645d59 100644 --- a/apps/sample/src/providers/DeviceSdkProvider/index.tsx +++ b/apps/sample/src/providers/DeviceSdkProvider/index.tsx @@ -1,5 +1,5 @@ import { createContext, useContext } from "react"; -import { DeviceSdkBuilder, DeviceSdk } from "@ledgerhq/device-sdk-core"; +import { DeviceSdk,DeviceSdkBuilder } from "@ledgerhq/device-sdk-core"; export const sdk = new DeviceSdkBuilder().build(); diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index aedb2fdf1..ef01b9fb2 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -1,7 +1,8 @@ import { Container } from "inversify"; + import { types as ConfigTypes } from "@internal/config/di/configTypes"; -import { MakeContainerProps, makeContainer } from "../di"; import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; +import { makeContainer, MakeContainerProps } from "@root/src/di"; export class DeviceSdk { container: Container; diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 76b5ef838..2d852fa69 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -1,4 +1,4 @@ "use strict"; -export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; export { DeviceSdk } from "./DeviceSdk"; +export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 9001059d6..e3d4074dd 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -1,5 +1,6 @@ import { Container } from "inversify"; import { makeLoggerMiddleware } from "inversify-logger-middleware"; + import { configModuleFactory } from "@internal/config/di/configModule"; const logger = makeLoggerMiddleware(); diff --git a/packages/core/src/internal/config/data/ConfigDataSource.ts b/packages/core/src/internal/config/data/ConfigDataSource.ts index 7e63f66fc..8215efafa 100644 --- a/packages/core/src/internal/config/data/ConfigDataSource.ts +++ b/packages/core/src/internal/config/data/ConfigDataSource.ts @@ -1,4 +1,5 @@ import { Either } from "purify-ts"; + import { LocalConfigFailure, RemoteConfigFailure, diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts index a8e888b98..2b6ab90b4 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts @@ -1,6 +1,8 @@ import { injectable } from "inversify"; import { Either } from "purify-ts"; + import { Config } from "@internal/config/model/Config"; + import { LocalConfigDataSource } from "./ConfigDataSource"; /** diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts index 5dc692806..6573d33f2 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts @@ -1,5 +1,7 @@ import { Either, Left } from "purify-ts"; + import { JSONParseError, ReadFileError } from "@internal/config/di/configTypes"; + import { LocalConfigDataSource } from "./ConfigDataSource"; import * as LocalConfig from "./LocalConfigDataSource"; diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index 30788caad..ce9201bb2 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -1,14 +1,16 @@ import { injectable } from "inversify"; import { Either } from "purify-ts"; + import { - ReadFileError, JSONParseError, LocalConfigFailure, + ReadFileError, } from "@internal/config/di/configTypes"; import { Config } from "@internal/config/model/Config"; -import { LocalConfigDataSource } from "./ConfigDataSource"; import pkg from "@root/package.json"; +import { LocalConfigDataSource } from "./ConfigDataSource"; + const version = { name: pkg.name, version: pkg.version, diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts index 6dd24a477..eb2d887d2 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts @@ -1,6 +1,8 @@ import { injectable } from "inversify"; import { Either } from "purify-ts"; + import { Config } from "@internal/config/model/Config"; + import { RemoteConfigDataSource } from "./ConfigDataSource"; /** diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts index a3b413187..0915603ee 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts @@ -1,9 +1,11 @@ import { Either, Left } from "purify-ts"; + import { ApiCallError, JSONParseError, ParseResponseError, } from "@internal/config/di/configTypes"; + import { RemoteConfigDataSource } from "./ConfigDataSource"; import { RestRemoteConfigDataSource } from "./RemoteConfigDataSource"; diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts index 25bacd431..9db968ff1 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts @@ -1,12 +1,14 @@ import { injectable } from "inversify"; import { Either, Left } from "purify-ts"; -import { Config } from "@internal/config/model/Config"; + import { ApiCallError, JSONParseError, ParseResponseError, RemoteConfigFailure, } from "@internal/config/di/configTypes"; +import { Config } from "@internal/config/model/Config"; + import { RemoteConfigDataSource } from "./ConfigDataSource"; import { ConfigDto } from "./Dto"; diff --git a/packages/core/src/internal/config/di/configModule.test.ts b/packages/core/src/internal/config/di/configModule.test.ts index d9d8633ea..9d3fab55e 100644 --- a/packages/core/src/internal/config/di/configModule.test.ts +++ b/packages/core/src/internal/config/di/configModule.test.ts @@ -1,8 +1,10 @@ import { Container } from "inversify"; + import { FileLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource"; import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; import { RestRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource"; import { StubRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource.stub"; + import { configModuleFactory } from "./configModule"; import { types } from "./configTypes"; diff --git a/packages/core/src/internal/config/di/configModule.ts b/packages/core/src/internal/config/di/configModule.ts index 23facbcdd..5d27ac93c 100644 --- a/packages/core/src/internal/config/di/configModule.ts +++ b/packages/core/src/internal/config/di/configModule.ts @@ -1,10 +1,12 @@ import { ContainerModule } from "inversify"; + import { FileLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource"; import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; import { RestRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource"; import { StubRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource.stub"; import { DefaultConfigService } from "@internal/config/service/DefaultConfigService"; import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; + import { types } from "./configTypes"; // This module is used to configure the dependency injection container diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index 29b2b80d4..4d6f41817 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -1,7 +1,9 @@ import { Either, Left } from "purify-ts"; + +import { JSONParseError } from "@internal/config/di/configTypes"; + import { ConfigService } from "./ConfigService"; import { DefaultConfigService } from "./DefaultConfigService"; -import { JSONParseError } from "@internal/config/di/configTypes"; const localDataSource = { getConfig: jest.fn(), diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index 2d4582ec7..ff81f6c8a 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -1,10 +1,12 @@ import { inject, injectable } from "inversify"; -import { types } from "@internal/config/di/configTypes"; + import type { LocalConfigDataSource, RemoteConfigDataSource, } from "@internal/config/data/ConfigDataSource"; +import { types } from "@internal/config/di/configTypes"; import { Config } from "@internal/config/model/Config"; + import { ConfigService } from "./ConfigService"; @injectable() diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts index 1f28edd65..4de21457f 100644 --- a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts @@ -1,6 +1,7 @@ import { inject, injectable } from "inversify"; -import type { ConfigService } from "@internal/config/service/ConfigService"; + import { types } from "@internal/config/di/configTypes"; +import type { ConfigService } from "@internal/config/service/ConfigService"; /** * class GetSDKVersionUseCase diff --git a/packages/core/src/transport/ble/BleTransport.ts b/packages/core/src/transport/ble/BleTransport.ts index 78ba7f612..7512788a4 100644 --- a/packages/core/src/transport/ble/BleTransport.ts +++ b/packages/core/src/transport/ble/BleTransport.ts @@ -1,5 +1,5 @@ -import { Transport } from "../Transport"; -import { Response } from "../model"; +import { Response } from "@root/src/transport/model"; +import { Transport } from "@root/src/transport/Transport"; export class BleTransport implements Transport { send(_apduHex: string): Response | undefined { diff --git a/packages/core/src/transport/index.ts b/packages/core/src/transport/index.ts index d69b321ca..bbefb1fe2 100644 --- a/packages/core/src/transport/index.ts +++ b/packages/core/src/transport/index.ts @@ -1,4 +1,3 @@ -export type { Transport } from "./Transport"; - export * from "./ble"; export * from "./model"; +export type { Transport } from "./Transport"; From 4cb011de85303f61e1164e347a58c269169f35a8 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 6 Feb 2024 15:49:23 +0100 Subject: [PATCH 066/253] chore: add husky pre-push hook to run lint To disable it, you can export HUSKY=0. --- .husky/pre-push | 1 + package.json | 4 +++- pnpm-lock.yaml | 53 ++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 .husky/pre-push diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 000000000..009b3f89b --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1 @@ +pnpm lint diff --git a/package.json b/package.json index df967b01b..e34a6773d 100644 --- a/package.json +++ b/package.json @@ -17,12 +17,14 @@ "signer": "pnpm --filter @ledgerhq/device-sdk-signer", "trusted-apps": "pnpm --filter @ledgerhq/device-sdk-trusted-apps", "ui": "pnpm --filter @ledgerhq/device-sdk-ui", - "sample": "pnpm --filter @ledgerhq/device-sdk-sample" + "sample": "pnpm --filter @ledgerhq/device-sdk-sample", + "prepare": "husky" }, "devDependencies": { "@types/jest": "^29.5.11", "@types/node": "^20.10.6", "eslint": "^8.56.0", + "husky": "^9.0.10", "hygen": "^6.2.11", "jest": "^29.7.0", "lint-staged": "^15.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6dfe8997..1910e9804 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: eslint: specifier: ^8.56.0 version: 8.56.0 + husky: + specifier: ^9.0.10 + version: 9.0.10 hygen: specifier: ^6.2.11 version: 6.2.11 @@ -1819,7 +1822,7 @@ packages: eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) @@ -2959,7 +2962,7 @@ packages: eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) @@ -2993,7 +2996,7 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -3017,7 +3020,7 @@ packages: enhanced-resolve: 5.15.0 eslint: 8.56.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -3039,8 +3042,8 @@ packages: debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -3077,6 +3080,35 @@ packages: debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color @@ -3128,7 +3160,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -3138,6 +3170,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3948,6 +3981,12 @@ packages: engines: {node: '>=16.17.0'} dev: true + /husky@9.0.10: + resolution: {integrity: sha512-TQGNknoiy6bURzIO77pPRu+XHi6zI7T93rX+QnJsoYFf3xdjKOur+IlfqzJGMHIK/wXrLg+GsvMs8Op7vI2jVA==} + engines: {node: '>=18'} + hasBin: true + dev: true + /hygen@6.2.11: resolution: {integrity: sha512-t6/zLI2XozP5gvV74nnl8LZSbwpVNFUkUs/O9DwuOdiiBbws5k4AQNVwKZ9FGzcKjdJ5EBBYkVzlcUHkLyY0FQ==} hasBin: true From 18e4046b4cabdc3a647dcaaa8f305e518d7edf72 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 8 Feb 2024 15:36:56 +0100 Subject: [PATCH 067/253] chore: upgrade turbo to v1.12.3 --- package.json | 2 +- pnpm-lock.yaml | 318 +++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 267 insertions(+), 53 deletions(-) diff --git a/package.json b/package.json index e34a6773d..16cff277f 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "lint-staged": "^15.2.0", "prettier": "^3.1.1", "rimraf": "^5.0.5", - "turbo": "^1.11.2", + "turbo": "^1.12.3", "typescript": "^5.3.3", "zx": "^7.2.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1910e9804..4a4da2fba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,7 @@ importers: version: 6.2.11 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + version: 29.7.0(@types/node@20.10.6) lint-staged: specifier: ^15.2.0 version: 15.2.0 @@ -36,8 +36,8 @@ importers: specifier: ^5.0.5 version: 5.0.5 turbo: - specifier: ^1.11.2 - version: 1.11.2 + specifier: ^1.12.3 + version: 1.12.3 typescript: specifier: ^5.3.3 version: 5.3.3 @@ -55,7 +55,7 @@ importers: version: 0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11) next: specifier: 14.0.4 - version: 14.0.4(@babel/core@7.23.6)(react-dom@18.2.0)(react@18.2.0) + version: 14.0.4(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18 version: 18.2.0 @@ -64,7 +64,7 @@ importers: version: 18.2.0(react@18.2.0) styled-components: specifier: ^5.3.11 - version: 5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + version: 5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -116,10 +116,10 @@ importers: devDependencies: ts-jest: specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.23.6)(jest@29.7.0)(typescript@5.3.3) + version: 29.1.1(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.10.6)(typescript@5.3.3) + version: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) packages/config/typescript: devDependencies: @@ -165,7 +165,7 @@ importers: version: 8.2.2 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.10.6)(typescript@5.3.3) + version: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) tsc-alias: specifier: ^1.8.8 version: 1.8.8 @@ -273,6 +273,29 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true + + /@babel/core@7.23.9: + resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) + '@babel/helpers': 7.23.9 + '@babel/parser': 7.23.9 + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@5.5.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.56.0): resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} @@ -349,6 +372,20 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} @@ -387,6 +424,17 @@ packages: '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color + dev: true + + /@babel/helpers@7.23.9: + resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 + transitivePeerDependencies: + - supports-color /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} @@ -403,6 +451,13 @@ packages: dependencies: '@babel/types': 7.23.6 + /@babel/parser@7.23.9: + resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.9 + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -456,6 +511,17 @@ packages: dependencies: '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: false /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} @@ -545,6 +611,14 @@ packages: '@babel/parser': 7.23.6 '@babel/types': 7.23.6 + /@babel/template@7.23.9: + resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + /@babel/traverse@7.23.6(supports-color@5.5.0): resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} engines: {node: '>=6.9.0'} @@ -562,6 +636,23 @@ packages: transitivePeerDependencies: - supports-color + /@babel/traverse@7.23.9: + resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + debug: 4.3.4(supports-color@5.5.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + /@babel/types@7.23.6: resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} @@ -570,6 +661,14 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + /@babel/types@7.23.9: + resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -1069,7 +1168,7 @@ packages: dependencies: '@types/react': 18.2.45 react: 18.2.0 - styled-components: 5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false @@ -1086,7 +1185,7 @@ packages: dependencies: '@types/react': 18.2.45 react: 18.2.0 - styled-components: 5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false @@ -1118,7 +1217,7 @@ packages: react-select: 5.8.0(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) react-window: 1.8.10(react-dom@18.2.0)(react@18.2.0) - styled-components: 5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false @@ -1530,6 +1629,12 @@ packages: undici-types: 5.26.5 dev: true + /@types/node@20.11.16: + resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true @@ -2122,17 +2227,17 @@ packages: resolve: 1.22.8 dev: false - /babel-plugin-styled-components@2.1.4(@babel/core@7.23.6)(styled-components@5.3.11): + /babel-plugin-styled-components@2.1.4(@babel/core@7.23.9)(styled-components@5.3.11): resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} peerDependencies: styled-components: '>= 2' dependencies: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.15 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) transitivePeerDependencies: - '@babel/core' dev: false @@ -2558,7 +2663,7 @@ packages: yaml: 1.10.2 dev: false - /create-jest@29.7.0(@types/node@20.10.6)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.10.6): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -2577,6 +2682,25 @@ packages: - ts-node dev: true + /create-jest@29.7.0(@types/node@20.11.16)(ts-node@10.9.2): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -3211,7 +3335,7 @@ packages: '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 - jest: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.10.6) transitivePeerDependencies: - supports-color - typescript @@ -4481,7 +4605,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.10.6)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.10.6): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4495,7 +4619,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.10.6) exit: 0.1.2 import-local: 3.1.0 jest-config: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) @@ -4509,6 +4633,34 @@ packages: - ts-node dev: true + /jest-cli@29.7.0(@types/node@20.11.16)(ts-node@10.9.2): + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /jest-config@29.7.0(@types/node@20.10.6)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4544,7 +4696,48 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.10.6)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-config@29.7.0(@types/node@20.11.16)(ts-node@10.9.2): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.23.6 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + babel-jest: 29.7.0(@babel/core@7.23.6) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -4833,7 +5026,7 @@ packages: supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.10.6)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.10.6): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4846,7 +5039,28 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.10.6) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest@29.7.0(@types/node@20.11.16)(ts-node@10.9.2): + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5203,7 +5417,7 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /next@14.0.4(@babel/core@7.23.6)(react-dom@18.2.0)(react@18.2.0): + /next@14.0.4(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} engines: {node: '>=18.17.0'} hasBin: true @@ -5226,7 +5440,7 @@ packages: postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.23.6)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.23.9)(react@18.2.0) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 14.0.4 @@ -6318,7 +6532,7 @@ packages: engines: {node: '>=8'} dev: true - /styled-components@5.3.11(@babel/core@7.23.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0): + /styled-components@5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0): resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} engines: {node: '>=10'} peerDependencies: @@ -6331,7 +6545,7 @@ packages: '@emotion/is-prop-valid': 1.2.1 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.23.6)(styled-components@5.3.11) + babel-plugin-styled-components: 2.1.4(@babel/core@7.23.9)(styled-components@5.3.11) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 @@ -6343,7 +6557,7 @@ packages: - '@babel/core' dev: false - /styled-jsx@5.1.1(@babel/core@7.23.6)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.23.9)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -6356,7 +6570,7 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.9 client-only: 0.0.1 react: 18.2.0 dev: false @@ -6498,7 +6712,7 @@ packages: typescript: 5.3.3 dev: true - /ts-jest@29.1.1(@babel/core@7.23.6)(jest@29.7.0)(typescript@5.3.3): + /ts-jest@29.1.1(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6519,10 +6733,10 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.9 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -6532,7 +6746,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-node@10.9.2(@types/node@20.10.6)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.11.16)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -6551,7 +6765,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.6 + '@types/node': 20.11.16 acorn: 8.11.2 acorn-walk: 8.3.1 arg: 4.1.3 @@ -6601,64 +6815,64 @@ packages: typescript: 5.3.3 dev: true - /turbo-darwin-64@1.11.2: - resolution: {integrity: sha512-toFmRG/adriZY3hOps7nYCfqHAS+Ci6xqgX3fbo82kkLpC6OBzcXnleSwuPqjHVAaRNhVoB83L5njcE9Qwi2og==} + /turbo-darwin-64@1.12.3: + resolution: {integrity: sha512-dDglIaux+A4jOnB9CDH69sujmrnuLJLrKw1t3J+if6ySlFuxSwC++gDq9TVuOZo2+S7lFkGh+x5ytn3wp+jE8Q==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@1.11.2: - resolution: {integrity: sha512-FCsEDZ8BUSFYEOSC3rrARQrj7x2VOrmVcfrMUIhexTxproRh4QyMxLfr6LALk4ymx6jbDCxWa6Szal8ckldFbA==} + /turbo-darwin-arm64@1.12.3: + resolution: {integrity: sha512-5TqqeujEyHMoVUWGzSzUl5ERSg7HDCdbU3gBs5ziWTpFRpeJ/+Y15kYyZJcMQcubRIH3Y1hL/yA5IhlGdgXOMA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@1.11.2: - resolution: {integrity: sha512-Vzda/o/QyEske5CxLf0wcu7UUS+7zB90GgHZV4tyN+WZtoouTvbwuvZ3V6b5Wgd3OJ/JwWR0CXDK7Sf4VEMr7A==} + /turbo-linux-64@1.12.3: + resolution: {integrity: sha512-yUreU+/gq4vlBtcdyfjz7slwz4zM1RG8sSXvyHmAS+QXqSrGkegg4qLl2fRbv/c3EyA/XbfcZuD6tcrXkejr6g==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@1.11.2: - resolution: {integrity: sha512-bRLwovQRz0yxDZrM4tQEAYV0fBHEaTzUF0JZ8RG1UmZt/CqtpnUrJpYb1VK8hj1z46z9YehARpYCwQ2K0qU4yw==} + /turbo-linux-arm64@1.12.3: + resolution: {integrity: sha512-XRwAsp2eRSqZmaMVNrmHoKqofeJMuD87zmefZLTRAObh38hIwKgyl2QRsJIbteob5RN77yFbv3lAJ36UIY5h7w==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@1.11.2: - resolution: {integrity: sha512-LgTWqkHAKgyVuLYcEPxZVGPInTjjeCnN5KQMdJ4uQZ+xMDROvMFS2rM93iQl4ieDJgidwHCxxCxaU9u8c3d/Kg==} + /turbo-windows-64@1.12.3: + resolution: {integrity: sha512-CPnRfnUCtmFeShOtUdMCthySjmyHaoTyh9JueiYFvtCNeO3WfDMj63dpOQstQWHdJFYmIrIGfhAclcds9ePQYA==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@1.11.2: - resolution: {integrity: sha512-829aVBU7IX0c/B4G7g1VI8KniAGutHhIupkYMgF6xPkYVev2G3MYe6DMS/vsLt9GGM9ulDtdWxWrH5P2ngK8IQ==} + /turbo-windows-arm64@1.12.3: + resolution: {integrity: sha512-cYA/wlzvp4vlCNHYJ2AjNS3FLXWwUC/5CJompBkTeKFFB6AviE/iLkbIhFikCVSNXZk/3AGanpMUXIkt3bdlwg==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@1.11.2: - resolution: {integrity: sha512-jPC7LVQJzebs5gWf8FmEvsvXGNyKbN+O9qpvv98xpNaM59aS0/Irhd0H0KbcqnXfsz7ETlzOC3R+xFWthC4Z8A==} + /turbo@1.12.3: + resolution: {integrity: sha512-a6q8I0TK9ohACYbkmxzG/JYPuDC4VCvfmXLTlf321qQ4BIAhoyaOj/O2g+zJ6L1vNYnZ82G4LrbMfgLLngbLsg==} hasBin: true optionalDependencies: - turbo-darwin-64: 1.11.2 - turbo-darwin-arm64: 1.11.2 - turbo-linux-64: 1.11.2 - turbo-linux-arm64: 1.11.2 - turbo-windows-64: 1.11.2 - turbo-windows-arm64: 1.11.2 + turbo-darwin-64: 1.12.3 + turbo-darwin-arm64: 1.12.3 + turbo-linux-64: 1.12.3 + turbo-linux-arm64: 1.12.3 + turbo-windows-64: 1.12.3 + turbo-windows-arm64: 1.12.3 dev: true /type-check@0.4.0: From cbe6ed583d615833e814227dc91f42ae31f1f674 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 8 Feb 2024 15:45:06 +0100 Subject: [PATCH 068/253] chore: enable colors in github actions --- .github/workflows/pull_request.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 9e73bee5a..e46312fca 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,6 +11,8 @@ jobs: - uses: ./actions/setup-toolchain-composite - name: Lint + env: + FORCE_COLOR: "1" run: pnpm lint test: @@ -23,4 +25,6 @@ jobs: - uses: ./actions/setup-toolchain-composite - name: Test + env: + FORCE_COLOR: "1" run: pnpm test From 251062db3ee8f9b3dda687ef7f67abdce0caf13e Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 8 Feb 2024 11:06:55 +0100 Subject: [PATCH 069/253] chore: add prettier dsdk configuration --- apps/sample/.prettierrc.js | 3 +++ apps/sample/package.json | 5 ++++- package.json | 2 ++ packages/config/prettier/index.js | 6 ++++++ packages/config/prettier/package.json | 12 ++++++++++++ packages/core/.prettierignore | 1 + packages/core/.prettierrc.js | 3 +++ packages/core/package.json | 3 +++ packages/signer/.prettierrc.js | 3 +++ packages/signer/package.json | 5 ++++- packages/trusted-apps/.prettierrc.js | 3 +++ packages/trusted-apps/package.json | 5 ++++- packages/ui/.prettierrc.js | 3 +++ packages/ui/package.json | 5 ++++- pnpm-lock.yaml | 21 +++++++++++++++++++++ turbo.json | 6 ++++++ 16 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 apps/sample/.prettierrc.js create mode 100644 packages/config/prettier/index.js create mode 100644 packages/config/prettier/package.json create mode 100644 packages/core/.prettierignore create mode 100644 packages/core/.prettierrc.js create mode 100644 packages/signer/.prettierrc.js create mode 100644 packages/trusted-apps/.prettierrc.js create mode 100644 packages/ui/.prettierrc.js diff --git a/apps/sample/.prettierrc.js b/apps/sample/.prettierrc.js new file mode 100644 index 000000000..9601e1776 --- /dev/null +++ b/apps/sample/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + ...require("@ledgerhq/prettier-config-dsdk"), +}; diff --git a/apps/sample/package.json b/apps/sample/package.json index e1687eff5..28e02b982 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -7,7 +7,9 @@ "build": "next build", "start": "next start", "lint": "next lint --max-warnings=0", - "lint:fix": "next lint --fix" + "lint:fix": "next lint --fix", + "prettier": "prettier . --check", + "prettier:fix": "prettier . --write" }, "dependencies": { "@ledgerhq/device-sdk-core": "workspace:*", @@ -19,6 +21,7 @@ }, "devDependencies": { "@ledgerhq/eslint-config-dsdk": "workspace:*", + "@ledgerhq/prettier-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", "@types/react": "^18", "@types/styled-components": "^5.1.25", diff --git a/package.json b/package.json index e34a6773d..91cd3fd64 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,8 @@ "dev": "turbo dev --log-order=grouped", "lint": "turbo run lint --log-order=grouped", "lint:fix": "turbo run lint:fix --log-order=grouped", + "prettier": "turbo run prettier --log-order=grouped", + "prettier:fix": "turbo run prettier:fix --log-order=grouped", "test": "turbo run test --log-order=grouped", "core": "pnpm --filter @ledgerhq/device-sdk-core", "signer": "pnpm --filter @ledgerhq/device-sdk-signer", diff --git a/packages/config/prettier/index.js b/packages/config/prettier/index.js new file mode 100644 index 000000000..94c6c3ed9 --- /dev/null +++ b/packages/config/prettier/index.js @@ -0,0 +1,6 @@ +/** @type {import('prettier').Config} **/ +module.exports = { + tabWidth: 2, + semi: true, + singleQuote: false, +}; diff --git a/packages/config/prettier/package.json b/packages/config/prettier/package.json new file mode 100644 index 000000000..c81279052 --- /dev/null +++ b/packages/config/prettier/package.json @@ -0,0 +1,12 @@ +{ + "name": "@ledgerhq/prettier-config-dsdk", + "license": "MIT", + "version": "0.0.1", + "private": true, + "files": [ + "index.js" + ], + "devDependencies": { + "prettier": "^3.1.1" + } +} diff --git a/packages/core/.prettierignore b/packages/core/.prettierignore new file mode 100644 index 000000000..4eb56dc37 --- /dev/null +++ b/packages/core/.prettierignore @@ -0,0 +1 @@ +lib/* \ No newline at end of file diff --git a/packages/core/.prettierrc.js b/packages/core/.prettierrc.js new file mode 100644 index 000000000..9601e1776 --- /dev/null +++ b/packages/core/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + ...require("@ledgerhq/prettier-config-dsdk"), +}; diff --git a/packages/core/package.json b/packages/core/package.json index 18024d2fd..a59aba017 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -12,6 +12,8 @@ "dev": "tsc && (concurrently \"tsc -w -p tsconfig.prod.json\" \"tsc-alias -w -p tsconfig.prod.json\")", "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", + "prettier": "prettier . --check", + "prettier:fix": "prettier . --write", "test": "jest src", "test:watch": "pnpm test -- --watch", "test:coverage": "pnpm test -- --coverage", @@ -27,6 +29,7 @@ "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", + "@ledgerhq/prettier-config-dsdk": "workspace:*", "concurrently": "^8.2.2", "ts-node": "^10.9.2", "tsc-alias": "^1.8.8" diff --git a/packages/signer/.prettierrc.js b/packages/signer/.prettierrc.js new file mode 100644 index 000000000..9601e1776 --- /dev/null +++ b/packages/signer/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + ...require("@ledgerhq/prettier-config-dsdk"), +}; diff --git a/packages/signer/package.json b/packages/signer/package.json index 17a553008..8c74449ef 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -12,6 +12,8 @@ "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", + "prettier": "prettier . --check", + "prettier:fix": "prettier . --write", "test": "jest --passWithNoTests" }, "dependencies": { @@ -21,6 +23,7 @@ "devDependencies": { "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", - "@ledgerhq/jest-config-dsdk": "workspace:*" + "@ledgerhq/jest-config-dsdk": "workspace:*", + "@ledgerhq/prettier-config-dsdk": "workspace:*" } } diff --git a/packages/trusted-apps/.prettierrc.js b/packages/trusted-apps/.prettierrc.js new file mode 100644 index 000000000..9601e1776 --- /dev/null +++ b/packages/trusted-apps/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + ...require("@ledgerhq/prettier-config-dsdk"), +}; diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 90d20c862..171482f20 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -11,6 +11,8 @@ "build": "rimraf lib && tsc", "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", + "prettier": "prettier . --check", + "prettier:fix": "prettier . --write", "dev": "tsc --watch", "test": "jest --passWithNoTests" }, @@ -21,6 +23,7 @@ "devDependencies": { "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", - "@ledgerhq/jest-config-dsdk": "workspace:*" + "@ledgerhq/jest-config-dsdk": "workspace:*", + "@ledgerhq/prettier-config-dsdk": "workspace:*" } } diff --git a/packages/ui/.prettierrc.js b/packages/ui/.prettierrc.js new file mode 100644 index 000000000..9601e1776 --- /dev/null +++ b/packages/ui/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + ...require("@ledgerhq/prettier-config-dsdk"), +}; diff --git a/packages/ui/package.json b/packages/ui/package.json index 41114ae19..8e08b6295 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -12,6 +12,8 @@ "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", + "prettier": "prettier . --check", + "prettier:fix": "prettier . --write", "test": "jest --passWithNoTests" }, "dependencies": { @@ -21,6 +23,7 @@ "devDependencies": { "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", - "@ledgerhq/jest-config-dsdk": "workspace:*" + "@ledgerhq/jest-config-dsdk": "workspace:*", + "@ledgerhq/prettier-config-dsdk": "workspace:*" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1910e9804..02ed8cfd5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,9 @@ importers: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../../packages/config/eslint + '@ledgerhq/prettier-config-dsdk': + specifier: workspace:* + version: link:../../packages/config/prettier '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../../packages/config/typescript @@ -121,6 +124,12 @@ importers: specifier: ^10.9.2 version: 10.9.2(@types/node@20.10.6)(typescript@5.3.3) + packages/config/prettier: + devDependencies: + prettier: + specifier: ^3.1.1 + version: 3.1.1 + packages/config/typescript: devDependencies: '@tsconfig/recommended': @@ -157,6 +166,9 @@ importers: '@ledgerhq/jest-config-dsdk': specifier: workspace:* version: link:../config/jest + '@ledgerhq/prettier-config-dsdk': + specifier: workspace:* + version: link:../config/prettier '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript @@ -185,6 +197,9 @@ importers: '@ledgerhq/jest-config-dsdk': specifier: workspace:* version: link:../config/jest + '@ledgerhq/prettier-config-dsdk': + specifier: workspace:* + version: link:../config/prettier '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript @@ -204,6 +219,9 @@ importers: '@ledgerhq/jest-config-dsdk': specifier: workspace:* version: link:../config/jest + '@ledgerhq/prettier-config-dsdk': + specifier: workspace:* + version: link:../config/prettier '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript @@ -223,6 +241,9 @@ importers: '@ledgerhq/jest-config-dsdk': specifier: workspace:* version: link:../config/jest + '@ledgerhq/prettier-config-dsdk': + specifier: workspace:* + version: link:../config/prettier '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript diff --git a/turbo.json b/turbo.json index 14fd58d9f..7f7e55118 100644 --- a/turbo.json +++ b/turbo.json @@ -12,6 +12,12 @@ "lint:fix": { "dependsOn": ["^lint:fix"] }, + "prettier": { + "dependsOn": ["^prettier"] + }, + "prettier:fix": { + "dependsOn": ["^prettier:fix"] + }, "dev": { "dependsOn": ["build"], "cache": false, From c18da98cee7ee9cfd5d83de63c6266cbb0813ac0 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 8 Feb 2024 11:08:06 +0100 Subject: [PATCH 070/253] chore: run prettier:fix on repo --- .../src/providers/DeviceSdkProvider/index.tsx | 2 +- apps/sample/tsconfig.json | 14 ++----- packages/core/src/di.ts | 2 +- .../config/data/LocalConfigDataSource.test.ts | 8 ++-- .../config/data/LocalConfigDataSource.ts | 2 +- .../data/RemoteConfigDataSource.stub.ts | 4 +- .../data/RemoteConfigDataSource.test.ts | 38 +++++++++---------- .../config/data/RemoteConfigDataSource.ts | 4 +- .../service/DefaultConfigService.test.ts | 4 +- .../config/service/DefaultConfigService.ts | 2 +- packages/core/tsconfig.json | 2 +- packages/signer/tsconfig.json | 2 +- 12 files changed, 38 insertions(+), 46 deletions(-) diff --git a/apps/sample/src/providers/DeviceSdkProvider/index.tsx b/apps/sample/src/providers/DeviceSdkProvider/index.tsx index 976645d59..8966e1090 100644 --- a/apps/sample/src/providers/DeviceSdkProvider/index.tsx +++ b/apps/sample/src/providers/DeviceSdkProvider/index.tsx @@ -1,5 +1,5 @@ import { createContext, useContext } from "react"; -import { DeviceSdk,DeviceSdkBuilder } from "@ledgerhq/device-sdk-core"; +import { DeviceSdk, DeviceSdkBuilder } from "@ledgerhq/device-sdk-core"; export const sdk = new DeviceSdkBuilder().build(); diff --git a/apps/sample/tsconfig.json b/apps/sample/tsconfig.json index 2533e1dd9..f9c79624a 100644 --- a/apps/sample/tsconfig.json +++ b/apps/sample/tsconfig.json @@ -7,18 +7,10 @@ } ], "paths": { - "@/*": [ - "./src/*" - ] + "@/*": ["./src/*"] }, "strictNullChecks": true }, - "include": [ - "**/*.ts", - "**/*.tsx", - ".next/types/**/*.ts" - ], - "exclude": [ - "node_modules" - ] + "include": ["**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] } diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index e3d4074dd..f11aed3f2 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -14,7 +14,7 @@ export const makeContainer = ({ const container = new Container(); container.applyMiddleware(logger); container.load( - configModuleFactory({ stub }) + configModuleFactory({ stub }), // modules go here ); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts index 6573d33f2..e4383377f 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts @@ -26,7 +26,7 @@ describe("LocalConfigDataSource", () => { it("should return an Either", () => { readFileSyncSpy.mockReturnValue( - JSON.stringify({ name: "DeviceSDK", version: "0.0.0-spied.1" }) + JSON.stringify({ name: "DeviceSDK", version: "0.0.0-spied.1" }), ); jsonParse.mockReturnValue({ @@ -38,7 +38,7 @@ describe("LocalConfigDataSource", () => { Either.of({ name: "DeviceSDK", version: "0.0.0-spied.1", - }) + }), ); }); @@ -54,7 +54,7 @@ describe("LocalConfigDataSource", () => { it("should return an Either if JSON.parse throws", () => { const err = new Error("JSON.parse error"); readFileSyncSpy.mockReturnValue( - JSON.stringify({ name: "DeviceSDK", version: "0.0.0-spied.1" }) + JSON.stringify({ name: "DeviceSDK", version: "0.0.0-spied.1" }), ); jsonParse.mockImplementation(() => { @@ -71,7 +71,7 @@ describe("LocalConfigDataSource", () => { JSON.stringify({ name: "@ledgerhq/device-sdk-core", version: "0.0.1", - }) + }), ); }); }); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index ce9201bb2..8e48056ca 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -37,7 +37,7 @@ export class FileLocalConfigDataSource implements LocalConfigDataSource { (error) => { console.log("JSON.parse error"); return new JSONParseError(error); - } + }, ); }); } diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts index eb2d887d2..c1a768c1d 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.stub.ts @@ -17,8 +17,8 @@ export class StubRemoteConfigDataSource implements RemoteConfigDataSource { Either.of({ name: "DeviceSDK", version: "0.0.0-fake.2", - }) - ) + }), + ), ); } } diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts index 0915603ee..d6725ed9e 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts @@ -15,11 +15,11 @@ let datasource: RemoteConfigDataSource; /* eslint-disable @typescript-eslint/no-explicit-any */ const callApiSpy = jest.spyOn( RestRemoteConfigDataSource.prototype as any, - "_callApi" + "_callApi", ); const parseResponseSpy = jest.spyOn( RestRemoteConfigDataSource.prototype as any, - "_parseResponse" + "_parseResponse", ); /* eslint-enable @typescript-eslint/no-explicit-any */ @@ -37,23 +37,23 @@ describe("RemoteRestConfigDataSource", () => { ok: true, json: () => Promise.resolve( - Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1" }) + Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1" }), ), - }) + }), ); parseResponseSpy.mockReturnValue( Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1", - }) + }), ); expect(await datasource.getConfig()).toStrictEqual( Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1", - }) + }), ); }); @@ -62,7 +62,7 @@ describe("RemoteRestConfigDataSource", () => { callApiSpy.mockResolvedValue(Left(err)); expect(await datasource.getConfig()).toStrictEqual( - Left(new ApiCallError(err)) + Left(new ApiCallError(err)), ); }); @@ -72,13 +72,13 @@ describe("RemoteRestConfigDataSource", () => { ok: false, json: () => Promise.resolve( - Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1" }) + Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1" }), ), - }) + }), ); expect(await datasource.getConfig()).toStrictEqual( - Left(new ApiCallError(new Error("response not ok"))) + Left(new ApiCallError(new Error("response not ok"))), ); }); @@ -88,11 +88,11 @@ describe("RemoteRestConfigDataSource", () => { Either.of({ ok: true, json: () => Promise.resolve(Left(err)), - }) + }), ); expect(await datasource.getConfig()).toStrictEqual( - Left(new JSONParseError()) + Left(new JSONParseError()), ); }); @@ -102,9 +102,9 @@ describe("RemoteRestConfigDataSource", () => { ok: true, json: () => Promise.resolve( - Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1" }) + Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1" }), ), - }) + }), ); parseResponseSpy.mockImplementation(() => { @@ -112,7 +112,7 @@ describe("RemoteRestConfigDataSource", () => { }); expect(await datasource.getConfig()).toStrictEqual( - Left(new ParseResponseError()) + Left(new ParseResponseError()), ); }); @@ -126,13 +126,13 @@ describe("RemoteRestConfigDataSource", () => { Either.of({ version: "0.0.0-fake.1", yolo: "yolo", - }) + }), ), - }) + }), ); expect(await datasource.getConfig()).toStrictEqual( - Left(new ParseResponseError()) + Left(new ParseResponseError()), ); }); @@ -147,7 +147,7 @@ describe("RemoteRestConfigDataSource", () => { Either.of({ name: "DeviceSDK", version: "0.0.0-fake.1", - }) + }), ); }); }); diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts index 9db968ff1..73e5df106 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts @@ -72,10 +72,10 @@ export class RestRemoteConfigDataSource implements RemoteConfigDataSource { name: "DeviceSDK", version: "0.0.0-fake.1", yolo: "yolo", - }) + }), ); }), - }) + }), ); }); } diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index 4d6f41817..3ad572470 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -28,7 +28,7 @@ describe("DefaultConfigService", () => { Either.of({ name: "DeviceSDK", version: "1.0.0-local", - }) + }), ); expect(await service.getSdkConfig()).toStrictEqual({ @@ -45,7 +45,7 @@ describe("DefaultConfigService", () => { Either.of({ name: "DeviceSDK", version: "1.0.0-remote", - }) + }), ); expect(await service.getSdkConfig()).toStrictEqual({ diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index ff81f6c8a..8a6183a5c 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -15,7 +15,7 @@ export class DefaultConfigService implements ConfigService { private _remote: RemoteConfigDataSource; constructor( @inject(types.LocalConfigDataSource) local: LocalConfigDataSource, - @inject(types.RemoteConfigDataSource) remote: RemoteConfigDataSource + @inject(types.RemoteConfigDataSource) remote: RemoteConfigDataSource, ) { this._local = local; this._remote = remote; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 9eba77295..0631edecd 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -5,7 +5,7 @@ "baseUrl": ".", "paths": { "@internal/*": ["src/internal/*"], - "@root/*": ["./*"], + "@root/*": ["./*"] } }, "include": ["src", "index.ts", "jest.*.ts"] diff --git a/packages/signer/tsconfig.json b/packages/signer/tsconfig.json index 7de4b7b54..52d8bbf1d 100644 --- a/packages/signer/tsconfig.json +++ b/packages/signer/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "./lib" }, - "include": ["src/**/*", "jest.config.ts"], + "include": ["src/**/*", "jest.config.ts"] } From 8b3f1bc9415ad4c9cb77714aa95f445d80f5e951 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 8 Feb 2024 12:04:59 +0100 Subject: [PATCH 071/253] chore: add prettier check in github workflows --- .github/workflows/pull_request.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 9e73bee5a..43e8d4726 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -13,6 +13,18 @@ jobs: - name: Lint run: pnpm lint + prettier: + runs-on: [device-sdk-4xlarge-linux] + env: + CI_JOB_NUMBER: 1 + steps: + - uses: actions/checkout@v3 + + - uses: ./actions/setup-toolchain-composite + + - name: Prettier + run: pnpm prettier + test: runs-on: [device-sdk-4xlarge-linux] env: From 14f1b4c6235a309a2fb0ee6986a8103954605994 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 9 Feb 2024 17:53:29 +0100 Subject: [PATCH 072/253] feat(core): add logger service and default console logger --- .../src/providers/DeviceSdkProvider/index.tsx | 10 ++- packages/core/jest.config.ts | 3 +- packages/core/src/api/DeviceSdk.ts | 4 +- packages/core/src/api/DeviceSdkBuilder.ts | 10 ++- packages/core/src/api/Error.ts | 5 ++ packages/core/src/api/Logger.test.ts | 60 +++++++++++++ packages/core/src/api/Logger.ts | 29 +++++++ packages/core/src/api/index.ts | 1 + packages/core/src/di.ts | 17 +++- .../config/data/LocalConfigDataSource.ts | 10 +-- .../config/data/RemoteConfigDataSource.ts | 4 - .../service/DefaultConfigService.test.ts | 20 ++++- .../config/service/DefaultConfigService.ts | 30 +++++-- .../internal/logger/di/loggerModule.test.ts | 19 ++++ .../src/internal/logger/di/loggerModule.ts | 29 +++++++ .../src/internal/logger/di/loggerTypes.ts | 3 + .../service/DefaultLoggerService.test.ts | 86 +++++++++++++++++++ .../logger/service/DefaultLoggerService.ts | 38 ++++++++ .../src/internal/logger/service/Log.test.ts | 26 ++++++ .../core/src/internal/logger/service/Log.ts | 50 +++++++++++ .../logger/service/LogBuilder.test.ts | 72 ++++++++++++++++ .../src/internal/logger/service/LogBuilder.ts | 40 +++++++++ .../internal/logger/service/LoggerService.ts | 18 ++++ 23 files changed, 554 insertions(+), 30 deletions(-) create mode 100644 packages/core/src/api/Error.ts create mode 100644 packages/core/src/api/Logger.test.ts create mode 100644 packages/core/src/api/Logger.ts create mode 100644 packages/core/src/internal/logger/di/loggerModule.test.ts create mode 100644 packages/core/src/internal/logger/di/loggerModule.ts create mode 100644 packages/core/src/internal/logger/di/loggerTypes.ts create mode 100644 packages/core/src/internal/logger/service/DefaultLoggerService.test.ts create mode 100644 packages/core/src/internal/logger/service/DefaultLoggerService.ts create mode 100644 packages/core/src/internal/logger/service/Log.test.ts create mode 100644 packages/core/src/internal/logger/service/Log.ts create mode 100644 packages/core/src/internal/logger/service/LogBuilder.test.ts create mode 100644 packages/core/src/internal/logger/service/LogBuilder.ts create mode 100644 packages/core/src/internal/logger/service/LoggerService.ts diff --git a/apps/sample/src/providers/DeviceSdkProvider/index.tsx b/apps/sample/src/providers/DeviceSdkProvider/index.tsx index 8966e1090..3c3d4728c 100644 --- a/apps/sample/src/providers/DeviceSdkProvider/index.tsx +++ b/apps/sample/src/providers/DeviceSdkProvider/index.tsx @@ -1,7 +1,13 @@ import { createContext, useContext } from "react"; -import { DeviceSdk, DeviceSdkBuilder } from "@ledgerhq/device-sdk-core"; +import { + ConsoleLogger, + DeviceSdk, + DeviceSdkBuilder, +} from "@ledgerhq/device-sdk-core"; -export const sdk = new DeviceSdkBuilder().build(); +export const sdk = new DeviceSdkBuilder() + .addLogger(new ConsoleLogger()) + .build(); const SdkContext = createContext(sdk); diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index cc4e81b66..2769f8e0c 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -1,3 +1,4 @@ +/* eslint no-restricted-syntax: 0 */ import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; const config: JestConfigWithTsJest = { @@ -6,7 +7,7 @@ const config: JestConfigWithTsJest = { testPathIgnorePatterns: ["/lib/"], collectCoverageFrom: [ // TODO: remove internal when the rest of the files are setup - "src/internal/**/*.ts", + "src/**/*.ts", "!src/**/*.stub.ts", ], moduleNameMapper: { diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index ef01b9fb2..9376c61d1 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -7,11 +7,11 @@ import { makeContainer, MakeContainerProps } from "@root/src/di"; export class DeviceSdk { container: Container; /** @internal */ - constructor({ stub }: MakeContainerProps) { + constructor({ stub, loggers }: MakeContainerProps) { // NOTE: MakeContainerProps might not be the exact type here // For the init of the project this is sufficient, but we might need to // update the constructor arguments as we go (we might have more than just the container config) - this.container = makeContainer({ stub }); + this.container = makeContainer({ stub, loggers }); } startScan() { diff --git a/packages/core/src/api/DeviceSdkBuilder.ts b/packages/core/src/api/DeviceSdkBuilder.ts index 5f82d59f6..4af25084b 100644 --- a/packages/core/src/api/DeviceSdkBuilder.ts +++ b/packages/core/src/api/DeviceSdkBuilder.ts @@ -1,17 +1,25 @@ +import { LoggerSubscriber } from "@internal/logger/service/Log"; + import { DeviceSdk } from "./DeviceSdk"; export class LedgerDeviceSdkBuilder { stub = false; + loggers: LoggerSubscriber[] = []; constructor() { console.log("New build"); } build(): DeviceSdk { - return new DeviceSdk({ stub: this.stub }); + return new DeviceSdk({ stub: this.stub, loggers: this.loggers }); } setStub(stubbed = true): LedgerDeviceSdkBuilder { this.stub = stubbed; return this; } + + addLogger(logger: LoggerSubscriber): LedgerDeviceSdkBuilder { + this.loggers.push(logger); + return this; + } } diff --git a/packages/core/src/api/Error.ts b/packages/core/src/api/Error.ts new file mode 100644 index 000000000..c597e372f --- /dev/null +++ b/packages/core/src/api/Error.ts @@ -0,0 +1,5 @@ +export interface SdkError { + readonly _tag: string; + originalError?: Error; + // message?: string; FUTURE ? +} diff --git a/packages/core/src/api/Logger.test.ts b/packages/core/src/api/Logger.test.ts new file mode 100644 index 000000000..2a1ad1351 --- /dev/null +++ b/packages/core/src/api/Logger.test.ts @@ -0,0 +1,60 @@ +import { LogBuilder } from "@internal/logger/service/LogBuilder"; + +import { ConsoleLogger, Log, LogLevel } from "./Logger"; + +const warn = jest.spyOn(console, "warn").mockImplementation(jest.fn()); +const info = jest.spyOn(console, "info").mockImplementation(jest.fn()); +const debug = jest.spyOn(console, "debug").mockImplementation(jest.fn()); +const error = jest.spyOn(console, "error").mockImplementation(jest.fn()); +const log = jest.spyOn(console, "log").mockImplementation(jest.fn()); + +let logger: ConsoleLogger; +let logObject: Log; +describe("ConsoleLogger", () => { + beforeEach(() => { + logger = new ConsoleLogger(); + logObject = LogBuilder.build({}, {}, "test"); + }); + + afterAll(() => { + warn.mockRestore(); + info.mockRestore(); + debug.mockRestore(); + error.mockRestore(); + log.mockRestore(); + }); + + describe("log", () => { + it("should log Info level", () => { + logObject.setLevel(LogLevel.Info); + logger.log(logObject); + expect(info).toHaveBeenCalledWith("[LOGGER]", "test"); + }); + + it("should log Warn level", () => { + logObject.setLevel(LogLevel.Warning); + logger.log(logObject); + expect(warn).toHaveBeenCalledWith("[LOGGER]", "test"); + }); + + it("should log Error level", () => { + logObject.setLevel(LogLevel.Error); + logObject.addMessage("error"); + logger.log(logObject); + expect(error).toHaveBeenCalledWith("[LOGGER]", "test", "error"); + }); + + it("should log Debug level", () => { + logObject.setLevel(LogLevel.Debug); + logger.log(logObject); + expect(debug).toHaveBeenCalledWith("[LOGGER]", "test"); + }); + + it("should default to Log level if none present", () => { + // @ts-expect-error disable for tests + logObject.setLevel(undefined); + logger.log(logObject); + expect(log).toHaveBeenCalledWith("[LOGGER]", "test"); + }); + }); +}); diff --git a/packages/core/src/api/Logger.ts b/packages/core/src/api/Logger.ts new file mode 100644 index 000000000..17252486b --- /dev/null +++ b/packages/core/src/api/Logger.ts @@ -0,0 +1,29 @@ +import { Log, LoggerSubscriber, LogLevel } from "@internal/logger/service/Log"; + +export { Log, LogLevel }; +export type { + LogContext, + LogData, + LogMessages, +} from "@internal/logger/service/Log"; + +export class ConsoleLogger implements LoggerSubscriber { + log(log: Log): void { + switch (log.level) { + case LogLevel.Info: + console.info("[LOGGER]", ...log.messages); + break; + case LogLevel.Warning: + console.warn("[LOGGER]", ...log.messages); + break; + case LogLevel.Debug: + console.debug("[LOGGER]", ...log.messages); + break; + case LogLevel.Error: + console.error("[LOGGER]", ...log.messages); + break; + default: + console.log("[LOGGER]", ...log.messages); + } + } +} diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 2d852fa69..b8545e4e3 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -2,3 +2,4 @@ export { DeviceSdk } from "./DeviceSdk"; export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; +export { ConsoleLogger } from "./Logger"; diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index f11aed3f2..79deea439 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -1,20 +1,31 @@ import { Container } from "inversify"; -import { makeLoggerMiddleware } from "inversify-logger-middleware"; +// Uncomment this line to enable the logger middleware +// import { makeLoggerMiddleware } from "inversify-logger-middleware"; import { configModuleFactory } from "@internal/config/di/configModule"; +import { loggerModuleFactory } from "@internal/logger/di/loggerModule"; +import { LoggerSubscriber } from "@internal/logger/service/Log"; -const logger = makeLoggerMiddleware(); +// Uncomment this line to enable the logger middleware +// const logger = makeLoggerMiddleware(); export type MakeContainerProps = { stub: boolean; + loggers: LoggerSubscriber[]; }; + export const makeContainer = ({ stub = false, + loggers = [], }: Partial = {}) => { const container = new Container(); - container.applyMiddleware(logger); + + // Uncomment this line to enable the logger middleware + // container.applyMiddleware(logger); + container.load( configModuleFactory({ stub }), + loggerModuleFactory({ subscribers: loggers }) // modules go here ); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index 8e48056ca..47ffe9663 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -28,16 +28,10 @@ export const stubFsReadFile = () => JSON.stringify(version); export class FileLocalConfigDataSource implements LocalConfigDataSource { getConfig(): Either { return Either.encase(() => stubFsReadFile()) - .mapLeft((error) => { - console.log("readFileSync error"); - return new ReadFileError(error); - }) + .mapLeft((error) => new ReadFileError(error)) .chain((str) => { return Either.encase(() => JSON.parse(str) as Config).mapLeft( - (error) => { - console.log("JSON.parse error"); - return new JSONParseError(error); - }, + (error) => new JSONParseError(error) ); }); } diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts index 73e5df106..8b2cfa18e 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts @@ -21,18 +21,15 @@ export class RestRemoteConfigDataSource implements RemoteConfigDataSource { async getConfig(): Promise> { const call = await this._callApi(); if (call.isLeft()) { - console.error("ApiCallError"); return Left(new ApiCallError(call.extract())); } if (!call.extract().ok) { - console.error("ApiCallError"); return Left(new ApiCallError(new Error("response not ok"))); } const json = await call.extract().json(); if (json.isLeft()) { - console.error("JSONParseError"); return Left(new JSONParseError()); } @@ -46,7 +43,6 @@ export class RestRemoteConfigDataSource implements RemoteConfigDataSource { private _parseResponse(dto: ConfigDto): Either { const { name, version } = dto; if (!name || !version) { - console.log("missing stuff"); return Left(new ParseResponseError()); } return Either.of({ name, version }); diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index 3ad572470..9aa9f4ad3 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -14,12 +14,30 @@ const remoteDataSource = { parseResponse: jest.fn(), }; +const loggerService = { + subscribers: [], + info: jest.fn(), + debug: jest.fn(), + warn: jest.fn(), + error: jest.fn(), +}; + let service: ConfigService; describe("DefaultConfigService", () => { beforeEach(() => { remoteDataSource.getConfig.mockClear(); localDataSource.getConfig.mockClear(); - service = new DefaultConfigService(localDataSource, remoteDataSource); + loggerService.debug.mockClear(); + loggerService.error.mockClear(); + loggerService.info.mockClear(); + loggerService.warn.mockClear(); + loggerService.subscribers = []; + + service = new DefaultConfigService( + localDataSource, + remoteDataSource, + loggerService + ); }); describe("when the local config is available", () => { diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index 8a6183a5c..4694bfd69 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -4,8 +4,11 @@ import type { LocalConfigDataSource, RemoteConfigDataSource, } from "@internal/config/data/ConfigDataSource"; -import { types } from "@internal/config/di/configTypes"; +import { types as configTypes } from "@internal/config/di/configTypes"; import { Config } from "@internal/config/model/Config"; +import { types as loggerTypes } from "@internal/logger/di/loggerTypes"; +import { LogBuilder } from "@internal/logger/service/LogBuilder"; +import type { LoggerService } from "@internal/logger/service/LoggerService"; import { ConfigService } from "./ConfigService"; @@ -13,31 +16,42 @@ import { ConfigService } from "./ConfigService"; export class DefaultConfigService implements ConfigService { private _local: LocalConfigDataSource; private _remote: RemoteConfigDataSource; + private _logger: LoggerService; constructor( - @inject(types.LocalConfigDataSource) local: LocalConfigDataSource, - @inject(types.RemoteConfigDataSource) remote: RemoteConfigDataSource, + @inject(configTypes.LocalConfigDataSource) local: LocalConfigDataSource, + @inject(configTypes.RemoteConfigDataSource) remote: RemoteConfigDataSource, + @inject(loggerTypes.LoggerService) logger: LoggerService ) { this._local = local; this._remote = remote; + this._logger = logger; } async getSdkConfig(): Promise { // Returns an Either const localConfig = this._local.getConfig().ifLeft((err) => { - console.error("Local config not available"); - console.error(err); + const log = LogBuilder.buildFromError(err); + log.addMessage("Local config not available"); + this._logger.error(log); }); if (localConfig.isRight()) { - return localConfig.extract(); + const val = localConfig.extract(); + const log = LogBuilder.build({ type: "config" }, { config: val }); + log.addMessage("Local config available"); + log.addMessage(val.version); + log.addMessage(val.name); + this._logger.info(log); + return val; } return this._remote.getConfig().then((config) => { return config .mapLeft((err) => { // Here we handle the error and return a default value - console.error("Remote config not available"); - console.error(err); + const log = LogBuilder.buildFromError(err); + log.addMessage("Remote config not available"); + this._logger.error(log); return { name: "DeadSdk", version: "0.0.0-dead.1" }; }) .extract(); diff --git a/packages/core/src/internal/logger/di/loggerModule.test.ts b/packages/core/src/internal/logger/di/loggerModule.test.ts new file mode 100644 index 000000000..c19706603 --- /dev/null +++ b/packages/core/src/internal/logger/di/loggerModule.test.ts @@ -0,0 +1,19 @@ +import { Container } from "inversify"; + +import { loggerModuleFactory } from "./loggerModule"; + +describe("loggerModuleFactory", () => { + describe("Default", () => { + let container: Container; + let mod: ReturnType; + beforeEach(() => { + mod = loggerModuleFactory(); + container = new Container(); + container.load(mod); + }); + + it("should return the config module", () => { + expect(mod).toBeDefined(); + }); + }); +}); diff --git a/packages/core/src/internal/logger/di/loggerModule.ts b/packages/core/src/internal/logger/di/loggerModule.ts new file mode 100644 index 000000000..d344f1491 --- /dev/null +++ b/packages/core/src/internal/logger/di/loggerModule.ts @@ -0,0 +1,29 @@ +import { ContainerModule } from "inversify"; + +import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; +import { LoggerSubscriber } from "@internal/logger/service/Log"; + +import { types } from "./loggerTypes"; + +type FactoryProps = { + subscribers: LoggerSubscriber[]; +}; + +export const loggerModuleFactory = ( + { subscribers }: FactoryProps = { subscribers: [] } +) => + new ContainerModule( + ( + bind, + _unbind, + _isBound, + _rebind, + _unbindAsync, + _onActivation, + _onDeactivation + ) => { + bind(types.LoggerService).toConstantValue( + new DefaultLoggerService(subscribers) + ); + } + ); diff --git a/packages/core/src/internal/logger/di/loggerTypes.ts b/packages/core/src/internal/logger/di/loggerTypes.ts new file mode 100644 index 000000000..131c33e6d --- /dev/null +++ b/packages/core/src/internal/logger/di/loggerTypes.ts @@ -0,0 +1,3 @@ +export const types = { + LoggerService: Symbol.for("LoggerService"), +}; diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts new file mode 100644 index 000000000..46e45f510 --- /dev/null +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts @@ -0,0 +1,86 @@ +import { DefaultLoggerService } from "./DefaultLoggerService"; +import { LogLevel } from "./Log"; +import { LogBuilder } from "./LogBuilder"; +import { LoggerService } from "./LoggerService"; + +let service: LoggerService; + +const subscriber = { + log: jest.fn(), +}; + +describe("LoggerService", () => { + it("should call subscriber.log with the correct log object", () => { + subscriber.log.mockClear(); + service = new DefaultLoggerService([subscriber]); + const log = LogBuilder.build({ type: "test" }, { key: "value" }, "message"); + + service.info(log); + + expect(subscriber.log).toHaveBeenCalledWith(log); + }); + + describe("info", () => { + it("should have the correct LogLevel", () => { + subscriber.log.mockClear(); + service = new DefaultLoggerService([subscriber]); + const log = LogBuilder.build( + { type: "test" }, + { key: "value" }, + "message" + ); + + service.info(log); + + expect(log.level).toBe(LogLevel.Info); + }); + }); + + describe("debug", () => { + it("should have the correct LogLevel", () => { + subscriber.log.mockClear(); + service = new DefaultLoggerService([subscriber]); + const log = LogBuilder.build( + { type: "test" }, + { key: "value" }, + "message" + ); + + service.debug(log); + + expect(log.level).toBe(LogLevel.Debug); + }); + }); + + describe("warn", () => { + it("should have the correct LogLevel", () => { + subscriber.log.mockClear(); + service = new DefaultLoggerService([subscriber]); + const log = LogBuilder.build( + { type: "test" }, + { key: "value" }, + "message" + ); + + service.warn(log); + + expect(log.level).toBe(LogLevel.Warning); + }); + }); + + describe("error", () => { + it("should have the correct LogLevel", () => { + subscriber.log.mockClear(); + service = new DefaultLoggerService([subscriber]); + const log = LogBuilder.buildFromError( + new Error("test"), + { type: "test" }, + { key: "value" } + ); + + service.error(log); + + expect(log.level).toBe(LogLevel.Error); + }); + }); +}); diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.ts new file mode 100644 index 000000000..cd4227a9c --- /dev/null +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.ts @@ -0,0 +1,38 @@ +import { injectable } from "inversify"; + +import { Log, LoggerSubscriber, LogLevel } from "./Log"; +import { LoggerService } from "./LoggerService"; + +@injectable() +export class DefaultLoggerService implements LoggerService { + subscribers: LoggerSubscriber[]; + constructor(subscribers: LoggerSubscriber[]) { + this.subscribers = subscribers; + } + + _log(log: Log): void { + this.subscribers.forEach((subscriber) => { + subscriber.log(log); + }); + } + + info(log: Log): void { + log.setLevel(LogLevel.Info); + this._log(log); + } + + warn(log: Log): void { + log.setLevel(LogLevel.Warning); + this._log(log); + } + + debug(log: Log): void { + log.setLevel(LogLevel.Debug); + this._log(log); + } + + error(log: Log): void { + log.setLevel(LogLevel.Error); + this._log(log); + } +} diff --git a/packages/core/src/internal/logger/service/Log.test.ts b/packages/core/src/internal/logger/service/Log.test.ts new file mode 100644 index 000000000..5c6ba5e5e --- /dev/null +++ b/packages/core/src/internal/logger/service/Log.test.ts @@ -0,0 +1,26 @@ +import { Log } from "./Log"; + +describe("Log", () => { + it("should create a Log instance", () => { + const log = new Log({ messages: ["test"], data: {}, context: {} }); + expect(log).toBeInstanceOf(Log); + }); + + it("should set the level", () => { + const log = new Log({ + messages: ["test"], + data: {}, + context: {}, + level: 1, + }); + expect(log.level).toBe(1); + log.setLevel(2); + expect(log.level).toBe(2); + }); + + it("should add a message", () => { + const log = new Log({ messages: ["test"], data: {}, context: {} }); + log.addMessage("test2"); + expect(log.messages).toEqual(["test", "test2"]); + }); +}); diff --git a/packages/core/src/internal/logger/service/Log.ts b/packages/core/src/internal/logger/service/Log.ts new file mode 100644 index 000000000..0faec7035 --- /dev/null +++ b/packages/core/src/internal/logger/service/Log.ts @@ -0,0 +1,50 @@ +export enum LogLevel { + Error = 0, + Warning = 1, + Info = 2, + Debug = 3, +} + +export type LogContext = Partial<{ + type: string; + [key: string]: unknown; +}>; + +export type LogData = Record; + +export type LogMessages = string[]; + +export type LogContructorArgs = { + messages: LogMessages; + data: LogData; + context: LogContext; + level?: LogLevel; +}; + +export interface LoggerSubscriber { + log(log: Log): void; +} + +export class Log { + level: LogLevel = LogLevel.Info; + messages: string[]; + data: Record = {}; // use Maybe type for null/undefined ? + context: LogContext = {}; // use Maybe type for null/undefined ? + + constructor({ messages, data, context, level }: LogContructorArgs) { + this.level = level ?? this.level; + this.messages = messages; + this.data = data; + this.context = context; + } + + setLevel(level: LogLevel) { + this.level = level; + return this; + } + + addMessage(message: string) { + this.messages.push(message); + return this; + } +} diff --git a/packages/core/src/internal/logger/service/LogBuilder.test.ts b/packages/core/src/internal/logger/service/LogBuilder.test.ts new file mode 100644 index 000000000..ef335888a --- /dev/null +++ b/packages/core/src/internal/logger/service/LogBuilder.test.ts @@ -0,0 +1,72 @@ +import { Log } from "./Log"; +import { LogBuilder } from "./LogBuilder"; + +class CustomError { + _tag = "CustomError"; + originalError?: Error; + + constructor(originalError?: Error) { + this.originalError = originalError; + } +} + +let log: Log; + +describe("LogBuilder", () => { + describe("build", () => { + it("should create a Log instance with context and data", () => { + log = LogBuilder.build( + { + type: "test", + }, + { + key: "value", + }, + "test", + "test2" + ); + + expect(log).toBeInstanceOf(Log); + expect(log.context).toEqual({ type: "test" }); + expect(log.data).toEqual({ key: "value" }); + expect(log.messages).toEqual(["test", "test2"]); + }); + + it("should create a Log instance with an empty context and data", () => { + log = LogBuilder.build(undefined, undefined, "test"); + expect(log.context).toEqual({}); + expect(log.data).toEqual({}); + expect(log.messages).toEqual(["test"]); + }); + }); + + describe("buildFromError", () => { + it("should create a Log instance with a normal Error", () => { + log = LogBuilder.buildFromError(new Error("test"), {}, { key: "value" }); + expect(log).toBeInstanceOf(Log); + expect(log.context).toEqual({ type: "error" }); + expect(log.messages).toEqual(["test"]); + }); + + describe("custom Error", () => { + it("with no originalError should create a Log", () => { + log = LogBuilder.buildFromError(new CustomError(), { type: "error" }); + expect(log).toBeInstanceOf(Log); + expect(log.context).toEqual({ type: "CustomError" }); + expect(log.messages).toEqual(["CustomError"]); + }); + + it("with originalError should create a Log", () => { + const err = new CustomError(new Error("test")); + log = LogBuilder.buildFromError( + err, + { type: "error" }, + { key: "value" } + ); + expect(log).toBeInstanceOf(Log); + expect(log.messages).toEqual(["test"]); + expect(log.data).toEqual({ key: "value", error: err }); + }); + }); + }); +}); diff --git a/packages/core/src/internal/logger/service/LogBuilder.ts b/packages/core/src/internal/logger/service/LogBuilder.ts new file mode 100644 index 000000000..8d7e4cd61 --- /dev/null +++ b/packages/core/src/internal/logger/service/LogBuilder.ts @@ -0,0 +1,40 @@ +import { SdkError } from "@root/src/api/Error"; + +import { Log, LogContext, LogData, LogLevel, LogMessages } from "./Log"; + +export class LogBuilder { + static build( + context: LogContext = {}, + data: LogData = {}, + ...messages: LogMessages + ) { + return new Log({ context, data, messages }); + } + + static buildFromError( + error: SdkError | Error, + context: LogContext = { type: "error" }, + data: LogData = {} + ) { + const isSdkError = "_tag" in error; + + return new Log({ + level: LogLevel.Error, + context: { + ...context, + type: isSdkError ? error._tag : "error", + }, + data: { + ...data, + error: { + ...error, + }, + }, + messages: isSdkError + ? error.originalError + ? [error.originalError.message] + : [error._tag] + : [error.message], + }); + } +} diff --git a/packages/core/src/internal/logger/service/LoggerService.ts b/packages/core/src/internal/logger/service/LoggerService.ts new file mode 100644 index 000000000..cd74ba439 --- /dev/null +++ b/packages/core/src/internal/logger/service/LoggerService.ts @@ -0,0 +1,18 @@ +import { Log, LoggerSubscriber } from "./Log"; +/** + * [IDEAS] + * a data object in looger + * context in logger (object || string ?) context.tag / context.type / context.id / context.os ... + * message (string[]) in logger + * + * EXPOSE TO OUSTIDE => MOVE OUT OF INTERNAL + */ + +export interface LoggerService { + subscribers: LoggerSubscriber[]; + + info(log: Log): void; + warn(log: Log): void; + debug(log: Log): void; + error(log: Log): void; +} From 63262977e1cbebd7e00a0841771bc77942abe5e9 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 12 Feb 2024 11:28:33 +0100 Subject: [PATCH 073/253] chore(test): add tests to existing files --- packages/core/jest.config.ts | 3 +- packages/core/src/api/DeviceSdk.test.ts | 62 +++++++++++++++++++ packages/core/src/api/DeviceSdk.ts | 2 +- .../core/src/api/DeviceSdkBuilder.test.ts | 28 +++++++++ packages/core/src/api/DeviceSdkBuilder.ts | 5 +- packages/core/src/api/Logger.test.ts | 33 ++++++---- packages/core/src/api/Logger.ts | 1 + packages/core/src/api/index.ts | 9 ++- packages/core/src/di.ts | 4 +- .../config/data/LocalConfigDataSource.stub.ts | 2 +- .../service/DefaultConfigService.test.ts | 3 +- .../config/service/DefaultConfigService.ts | 2 +- .../service/DefaultLoggerService.test.ts | 8 +-- .../core/src/internal/logger/service/Log.ts | 1 + .../src/internal/logger/service/LogBuilder.ts | 2 +- .../internal/logger/service/LoggerService.ts | 12 +--- 16 files changed, 139 insertions(+), 38 deletions(-) create mode 100644 packages/core/src/api/DeviceSdk.test.ts create mode 100644 packages/core/src/api/DeviceSdkBuilder.test.ts diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index 2769f8e0c..5c7f9b398 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -6,9 +6,10 @@ const config: JestConfigWithTsJest = { setupFiles: ["/jest.setup.ts"], testPathIgnorePatterns: ["/lib/"], collectCoverageFrom: [ - // TODO: remove internal when the rest of the files are setup "src/**/*.ts", "!src/**/*.stub.ts", + "!src/index.ts", + "!src/api/index.ts", ], moduleNameMapper: { "^@internal/(.*)$": "/src/internal/$1", diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts new file mode 100644 index 000000000..14f4b0e29 --- /dev/null +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -0,0 +1,62 @@ +/* eslint-disable no-restricted-imports */ +import pkg from "../../package.json"; +import { DeviceSdk } from "./DeviceSdk"; + +let sdk: DeviceSdk; +const logger = { + log: jest.fn(), +}; +describe("DeviceSdk", () => { + describe("clean", () => { + beforeEach(() => { + sdk = new DeviceSdk({ stub: false, loggers: [logger] }); + }); + + it("should create an instance", () => { + expect(sdk).toBeDefined(); + expect(sdk).toBeInstanceOf(DeviceSdk); + }); + + it("should return a clean `version`", async () => { + expect(await sdk.getVersion()).toBe(pkg.version); + }); + + it("startScan should ....", () => { + expect(sdk.startScan()).toBeFalsy(); + }); + + it("stopScan should ....", () => { + expect(sdk.stopScan()).toBeFalsy(); + }); + }); + + describe("stubbed", () => { + beforeEach(() => { + sdk = new DeviceSdk({ stub: true, loggers: [] }); + }); + + it("should create a stubbed version", () => { + expect(sdk).toBeDefined(); + expect(sdk).toBeInstanceOf(DeviceSdk); + }); + + it("should return a stubbed `version`", async () => { + expect(await sdk.getVersion()).toBe("0.0.0-stub.1"); + }); + }); + + describe("without args", () => { + beforeEach(() => { + sdk = new DeviceSdk(); + }); + + it("should create an instance", () => { + expect(sdk).toBeDefined(); + expect(sdk).toBeInstanceOf(DeviceSdk); + }); + + it("should return a clean `version`", async () => { + expect(await sdk.getVersion()).toBe(pkg.version); + }); + }); +}); diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 9376c61d1..457b3e2e0 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -7,7 +7,7 @@ import { makeContainer, MakeContainerProps } from "@root/src/di"; export class DeviceSdk { container: Container; /** @internal */ - constructor({ stub, loggers }: MakeContainerProps) { + constructor({ stub, loggers }: Partial = {}) { // NOTE: MakeContainerProps might not be the exact type here // For the init of the project this is sufficient, but we might need to // update the constructor arguments as we go (we might have more than just the container config) diff --git a/packages/core/src/api/DeviceSdkBuilder.test.ts b/packages/core/src/api/DeviceSdkBuilder.test.ts new file mode 100644 index 000000000..c6f987ee8 --- /dev/null +++ b/packages/core/src/api/DeviceSdkBuilder.test.ts @@ -0,0 +1,28 @@ +import { DeviceSdk } from "./DeviceSdk"; +import { LedgerDeviceSdkBuilder } from "./DeviceSdkBuilder"; + +let builder: LedgerDeviceSdkBuilder; +const logger = { + log: jest.fn(), +}; + +describe("LedgerDeviceSdkBuilder", () => { + beforeEach(() => { + builder = new LedgerDeviceSdkBuilder(); + }); + + it("should build a DeviceSdk instance", () => { + const sdk: DeviceSdk = builder.build(); + expect(sdk).toBeInstanceOf(DeviceSdk); + }); + + it("should set the stub flag", () => { + builder.setStub(true); + expect(builder.stub).toBe(true); + }); + + it("should add a logger", () => { + builder.addLogger(logger); + expect(builder.loggers).toContain(logger); + }); +}); diff --git a/packages/core/src/api/DeviceSdkBuilder.ts b/packages/core/src/api/DeviceSdkBuilder.ts index 4af25084b..ecb44de6d 100644 --- a/packages/core/src/api/DeviceSdkBuilder.ts +++ b/packages/core/src/api/DeviceSdkBuilder.ts @@ -5,15 +5,12 @@ import { DeviceSdk } from "./DeviceSdk"; export class LedgerDeviceSdkBuilder { stub = false; loggers: LoggerSubscriber[] = []; - constructor() { - console.log("New build"); - } build(): DeviceSdk { return new DeviceSdk({ stub: this.stub, loggers: this.loggers }); } - setStub(stubbed = true): LedgerDeviceSdkBuilder { + setStub(stubbed: boolean): LedgerDeviceSdkBuilder { this.stub = stubbed; return this; } diff --git a/packages/core/src/api/Logger.test.ts b/packages/core/src/api/Logger.test.ts index 2a1ad1351..34e3b34ac 100644 --- a/packages/core/src/api/Logger.test.ts +++ b/packages/core/src/api/Logger.test.ts @@ -11,20 +11,31 @@ const log = jest.spyOn(console, "log").mockImplementation(jest.fn()); let logger: ConsoleLogger; let logObject: Log; describe("ConsoleLogger", () => { - beforeEach(() => { - logger = new ConsoleLogger(); - logObject = LogBuilder.build({}, {}, "test"); - }); - - afterAll(() => { - warn.mockRestore(); - info.mockRestore(); - debug.mockRestore(); - error.mockRestore(); - log.mockRestore(); + describe("exports", () => { + it("Log", () => { + const lgg = new Log({ + messages: [], + data: {}, + context: {}, + }); + expect(lgg).toBeInstanceOf(Log); + }); }); describe("log", () => { + beforeEach(() => { + logger = new ConsoleLogger(); + logObject = LogBuilder.build({}, {}, "test"); + }); + + afterAll(() => { + warn.mockRestore(); + info.mockRestore(); + debug.mockRestore(); + error.mockRestore(); + log.mockRestore(); + }); + it("should log Info level", () => { logObject.setLevel(LogLevel.Info); logger.log(logObject); diff --git a/packages/core/src/api/Logger.ts b/packages/core/src/api/Logger.ts index 17252486b..09653849f 100644 --- a/packages/core/src/api/Logger.ts +++ b/packages/core/src/api/Logger.ts @@ -4,6 +4,7 @@ export { Log, LogLevel }; export type { LogContext, LogData, + LoggerSubscriber, LogMessages, } from "@internal/logger/service/Log"; diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index b8545e4e3..4e62c93f6 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -2,4 +2,11 @@ export { DeviceSdk } from "./DeviceSdk"; export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; -export { ConsoleLogger } from "./Logger"; +export type { + LogContext, + LogData, + LoggerSubscriber, + LogLevel, + LogMessages, +} from "./Logger"; +export { ConsoleLogger, Log } from "./Logger"; diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 79deea439..bca563c75 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -17,7 +17,7 @@ export type MakeContainerProps = { export const makeContainer = ({ stub = false, loggers = [], -}: Partial = {}) => { +}: Partial) => { const container = new Container(); // Uncomment this line to enable the logger middleware @@ -25,7 +25,7 @@ export const makeContainer = ({ container.load( configModuleFactory({ stub }), - loggerModuleFactory({ subscribers: loggers }) + loggerModuleFactory({ subscribers: loggers }), // modules go here ); diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts index 2b6ab90b4..2bf993c15 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts @@ -16,7 +16,7 @@ export class StubLocalConfigDataSource implements LocalConfigDataSource { getConfig(): Either { return Either.of({ name: "DeviceSDK", - version: "0.0.0-mock.1", + version: "0.0.0-stub.1", }); } } diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index 9aa9f4ad3..30157d45a 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -20,6 +20,7 @@ const loggerService = { debug: jest.fn(), warn: jest.fn(), error: jest.fn(), + fatal: jest.fn(), }; let service: ConfigService; @@ -36,7 +37,7 @@ describe("DefaultConfigService", () => { service = new DefaultConfigService( localDataSource, remoteDataSource, - loggerService + loggerService, ); }); diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index 4694bfd69..1134f406b 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -20,7 +20,7 @@ export class DefaultConfigService implements ConfigService { constructor( @inject(configTypes.LocalConfigDataSource) local: LocalConfigDataSource, @inject(configTypes.RemoteConfigDataSource) remote: RemoteConfigDataSource, - @inject(loggerTypes.LoggerService) logger: LoggerService + @inject(loggerTypes.LoggerService) logger: LoggerService, ) { this._local = local; this._remote = remote; diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts index 46e45f510..2ecb3543b 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts @@ -27,7 +27,7 @@ describe("LoggerService", () => { const log = LogBuilder.build( { type: "test" }, { key: "value" }, - "message" + "message", ); service.info(log); @@ -43,7 +43,7 @@ describe("LoggerService", () => { const log = LogBuilder.build( { type: "test" }, { key: "value" }, - "message" + "message", ); service.debug(log); @@ -59,7 +59,7 @@ describe("LoggerService", () => { const log = LogBuilder.build( { type: "test" }, { key: "value" }, - "message" + "message", ); service.warn(log); @@ -75,7 +75,7 @@ describe("LoggerService", () => { const log = LogBuilder.buildFromError( new Error("test"), { type: "test" }, - { key: "value" } + { key: "value" }, ); service.error(log); diff --git a/packages/core/src/internal/logger/service/Log.ts b/packages/core/src/internal/logger/service/Log.ts index 0faec7035..34d30fc91 100644 --- a/packages/core/src/internal/logger/service/Log.ts +++ b/packages/core/src/internal/logger/service/Log.ts @@ -1,4 +1,5 @@ export enum LogLevel { + Fatal = -1, Error = 0, Warning = 1, Info = 2, diff --git a/packages/core/src/internal/logger/service/LogBuilder.ts b/packages/core/src/internal/logger/service/LogBuilder.ts index 8d7e4cd61..f32ddd0fc 100644 --- a/packages/core/src/internal/logger/service/LogBuilder.ts +++ b/packages/core/src/internal/logger/service/LogBuilder.ts @@ -14,7 +14,7 @@ export class LogBuilder { static buildFromError( error: SdkError | Error, context: LogContext = { type: "error" }, - data: LogData = {} + data: LogData = {}, ) { const isSdkError = "_tag" in error; diff --git a/packages/core/src/internal/logger/service/LoggerService.ts b/packages/core/src/internal/logger/service/LoggerService.ts index cd74ba439..9ca7697a9 100644 --- a/packages/core/src/internal/logger/service/LoggerService.ts +++ b/packages/core/src/internal/logger/service/LoggerService.ts @@ -1,18 +1,10 @@ import { Log, LoggerSubscriber } from "./Log"; -/** - * [IDEAS] - * a data object in looger - * context in logger (object || string ?) context.tag / context.type / context.id / context.os ... - * message (string[]) in logger - * - * EXPOSE TO OUSTIDE => MOVE OUT OF INTERNAL - */ export interface LoggerService { subscribers: LoggerSubscriber[]; - info(log: Log): void; + error(log: Log): void; warn(log: Log): void; + info(log: Log): void; debug(log: Log): void; - error(log: Log): void; } From 7a912cfe4eb30e87dde6a383b09649e6606148a9 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 13 Feb 2024 15:15:59 +0100 Subject: [PATCH 074/253] chore: prettier fixes --- .../src/internal/config/data/LocalConfigDataSource.ts | 2 +- packages/core/src/internal/logger/di/loggerModule.ts | 8 ++++---- .../core/src/internal/logger/service/LogBuilder.test.ts | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index 47ffe9663..62e884084 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -31,7 +31,7 @@ export class FileLocalConfigDataSource implements LocalConfigDataSource { .mapLeft((error) => new ReadFileError(error)) .chain((str) => { return Either.encase(() => JSON.parse(str) as Config).mapLeft( - (error) => new JSONParseError(error) + (error) => new JSONParseError(error), ); }); } diff --git a/packages/core/src/internal/logger/di/loggerModule.ts b/packages/core/src/internal/logger/di/loggerModule.ts index d344f1491..b60ca374e 100644 --- a/packages/core/src/internal/logger/di/loggerModule.ts +++ b/packages/core/src/internal/logger/di/loggerModule.ts @@ -10,7 +10,7 @@ type FactoryProps = { }; export const loggerModuleFactory = ( - { subscribers }: FactoryProps = { subscribers: [] } + { subscribers }: FactoryProps = { subscribers: [] }, ) => new ContainerModule( ( @@ -20,10 +20,10 @@ export const loggerModuleFactory = ( _rebind, _unbindAsync, _onActivation, - _onDeactivation + _onDeactivation, ) => { bind(types.LoggerService).toConstantValue( - new DefaultLoggerService(subscribers) + new DefaultLoggerService(subscribers), ); - } + }, ); diff --git a/packages/core/src/internal/logger/service/LogBuilder.test.ts b/packages/core/src/internal/logger/service/LogBuilder.test.ts index ef335888a..676572a73 100644 --- a/packages/core/src/internal/logger/service/LogBuilder.test.ts +++ b/packages/core/src/internal/logger/service/LogBuilder.test.ts @@ -23,7 +23,7 @@ describe("LogBuilder", () => { key: "value", }, "test", - "test2" + "test2", ); expect(log).toBeInstanceOf(Log); @@ -61,7 +61,7 @@ describe("LogBuilder", () => { log = LogBuilder.buildFromError( err, { type: "error" }, - { key: "value" } + { key: "value" }, ); expect(log).toBeInstanceOf(Log); expect(log.messages).toEqual(["test"]); From 391c0ffc066f941b4da99740108ec2ea380d87c5 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 13 Feb 2024 15:50:45 +0100 Subject: [PATCH 075/253] =?UTF-8?q?=E2=9E=95=20(repo):=20Add=20gitmoji=20[?= =?UTF-8?q?DSDK-188]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add gitmoji dependency and `commit` script from root package.json --- package.json | 4 +- pnpm-lock.yaml | 881 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 884 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 02d0dd239..e5947b8bf 100644 --- a/package.json +++ b/package.json @@ -20,12 +20,14 @@ "trusted-apps": "pnpm --filter @ledgerhq/device-sdk-trusted-apps", "ui": "pnpm --filter @ledgerhq/device-sdk-ui", "sample": "pnpm --filter @ledgerhq/device-sdk-sample", - "prepare": "husky" + "prepare": "husky", + "commit": "gitmoji -c" }, "devDependencies": { "@types/jest": "^29.5.11", "@types/node": "^20.10.6", "eslint": "^8.56.0", + "gitmoji-cli": "^9.1.0", "husky": "^9.0.10", "hygen": "^6.2.11", "jest": "^29.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98766f7d7..0cf5d0d1b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: eslint: specifier: ^8.56.0 version: 8.56.0 + gitmoji-cli: + specifier: ^9.1.0 + version: 9.1.0 husky: specifier: ^9.0.10 version: 9.0.10 @@ -1246,6 +1249,13 @@ packages: resolution: {integrity: sha512-mPvo78REWxhYTmkFI96ryCOAyZTV42f+l55AnuoeJ2tGn5nN7bmkOUIzZ4MJOx5VvGlWcvtY/+2dA0yEelCs9w==} dev: false + /@ljharb/through@2.3.12: + resolution: {integrity: sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + dev: true + /@microsoft/tsdoc-config@0.16.2: resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} dependencies: @@ -1396,6 +1406,27 @@ packages: tslib: 2.6.2 dev: true + /@pnpm/config.env-replace@1.1.0: + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + dev: true + + /@pnpm/network.ca-file@1.0.2: + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + dependencies: + graceful-fs: 4.2.10 + dev: true + + /@pnpm/npm-conf@2.2.2: + resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} + engines: {node: '>=12'} + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + dev: true + /@popperjs/core@2.11.8: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false @@ -1408,6 +1439,11 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true + /@sindresorhus/is@5.6.0: + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + dev: true + /@sinonjs/commons@3.0.0: resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} dependencies: @@ -1503,6 +1539,13 @@ packages: tslib: 2.6.2 dev: false + /@szmarczak/http-timer@5.0.1: + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + dependencies: + defer-to-connect: 2.0.1 + dev: true + /@tippyjs/react@4.2.6(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==} peerDependencies: @@ -1514,6 +1557,10 @@ packages: tippy.js: 6.3.7 dev: false + /@tootallnate/quickjs-emscripten@0.23.0: + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + dev: true + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true @@ -1594,6 +1641,10 @@ packages: hoist-non-react-statics: 3.3.2 dev: true + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + dev: true + /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true @@ -1986,6 +2037,26 @@ packages: hasBin: true dev: true + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + dev: true + + /ajv-formats@2.1.1(ajv@8.12.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: true + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -1995,6 +2066,21 @@ packages: uri-js: 4.4.1 dev: true + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + dependencies: + string-width: 4.2.3 + dev: true + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -2156,6 +2242,13 @@ packages: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true + /ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.2 + dev: true + /async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true @@ -2166,6 +2259,13 @@ packages: has-symbols: 1.0.3 dev: true + /atomically@2.0.2: + resolution: {integrity: sha512-Xfmb4q5QV7uqTlVdMSTtO5eF4DCHfNOdaPyKlbFShkzeNP+3lj3yjjcbdjSmEY4+pDBKJ9g26aP+ImTe88UHoQ==} + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.2 + dev: true + /autoprefixer@10.4.16(postcss@8.4.32): resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} @@ -2302,6 +2402,11 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true + /basic-ftp@5.0.4: + resolution: {integrity: sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==} + engines: {node: '>=10.0.0'} + dev: true + /big-integer@1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} @@ -2320,6 +2425,20 @@ packages: readable-stream: 3.6.2 dev: true + /boxen@7.1.1: + resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} + engines: {node: '>=14.16'} + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.3.0 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + dev: true + /bplist-parser@0.2.0: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} @@ -2400,6 +2519,24 @@ packages: streamsearch: 1.1.0 dev: false + /cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + dev: true + + /cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.0 + responselike: 3.0.0 + dev: true + /call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: @@ -2429,6 +2566,11 @@ packages: engines: {node: '>=10'} dev: true + /camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + dev: true + /camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} dev: false @@ -2494,6 +2636,10 @@ packages: engines: {node: '>=10'} dev: true + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + /chart.js@3.9.1: resolution: {integrity: sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==} dev: false @@ -2539,6 +2685,11 @@ packages: escape-string-regexp: 1.0.5 dev: true + /cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + dev: true + /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -2566,6 +2717,11 @@ packages: string-width: 7.0.0 dev: true + /cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + dev: true + /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false @@ -2659,6 +2815,39 @@ packages: yargs: 17.7.2 dev: true + /conf@12.0.0: + resolution: {integrity: sha512-fIWyWUXrJ45cHCIQX+Ck1hrZDIf/9DR0P0Zewn3uNht28hbt5OfGUq8rRWsxi96pZWPyBEd0eY9ama01JTaknA==} + engines: {node: '>=18'} + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + atomically: 2.0.2 + debounce-fn: 5.1.2 + dot-prop: 8.0.2 + env-paths: 3.0.0 + json-schema-typed: 8.0.1 + semver: 7.5.4 + uint8array-extras: 0.3.0 + dev: true + + /config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + dev: true + + /configstore@6.0.0: + resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} + engines: {node: '>=12'} + dependencies: + dot-prop: 6.0.1 + graceful-fs: 4.2.11 + unique-string: 3.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 5.1.0 + dev: true + /constant-case@2.0.0: resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} dependencies: @@ -2735,6 +2924,13 @@ packages: which: 2.0.2 dev: true + /crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + dependencies: + type-fest: 1.4.0 + dev: true + /css-color-keywords@1.0.0: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} @@ -2760,6 +2956,11 @@ packages: engines: {node: '>= 12'} dev: true + /data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + dev: true + /date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} @@ -2767,6 +2968,13 @@ packages: '@babel/runtime': 7.23.6 dev: true + /debounce-fn@5.1.2: + resolution: {integrity: sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -2790,6 +2998,13 @@ packages: ms: 2.1.2 supports-color: 5.5.0 + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: true + /dedent@1.5.1: resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} peerDependencies: @@ -2799,6 +3014,11 @@ packages: optional: true dev: true + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true @@ -2832,6 +3052,11 @@ packages: clone: 1.0.4 dev: true + /defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + dev: true + /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} @@ -2855,6 +3080,15 @@ packages: object-keys: 1.1.1 dev: true + /degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + dev: true + /degit@2.8.4: resolution: {integrity: sha512-vqYuzmSA5I50J882jd+AbAhQtgK6bdKUJIex1JNfEUPENCgYsxugzKVZlFyMwV4i06MmnV47/Iqi5Io86zf3Ng==} engines: {node: '>=8.0.0'} @@ -2925,6 +3159,20 @@ packages: no-case: 2.3.2 dev: true + /dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + dependencies: + is-obj: 2.0.0 + dev: true + + /dot-prop@8.0.2: + resolution: {integrity: sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==} + engines: {node: '>=16'} + dependencies: + type-fest: 3.13.1 + dev: true + /dotenv@16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} @@ -2982,6 +3230,11 @@ packages: strip-ansi: 6.0.1 dev: true + /env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -3079,6 +3332,11 @@ packages: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + /escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + dev: true + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -3092,6 +3350,23 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + /eslint-config-next@14.0.4(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==} peerDependencies: @@ -3694,6 +3969,15 @@ packages: jest-util: 29.7.0 dev: true + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -3737,6 +4021,21 @@ packages: web-streams-polyfill: 3.2.1 dev: true + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /figures@5.0.0: + resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} + engines: {node: '>=14'} + dependencies: + escape-string-regexp: 5.0.0 + is-unicode-supported: 1.3.0 + dev: true + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -3804,6 +4103,11 @@ packages: signal-exit: 4.1.0 dev: true + /form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + dev: true + /formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -3872,6 +4176,11 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true + /fuse.js@7.0.0: + resolution: {integrity: sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==} + engines: {node: '>=10'} + dev: true + /fx@31.0.0: resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==} hasBin: true @@ -3934,10 +4243,44 @@ packages: resolve-pkg-maps: 1.0.0 dev: true + /get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} + dependencies: + basic-ftp: 5.0.4 + data-uri-to-buffer: 6.0.2 + debug: 4.3.4(supports-color@5.5.0) + fs-extra: 11.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /git-hooks-list@3.1.0: resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} dev: true + /gitmoji-cli@9.1.0: + resolution: {integrity: sha512-/pzhoYW1O+PU3GoZfFfsVng8oTYsIPzeb/YDx8/NLbQCzFAAdQ+zLSVya3PPPP9PoMCerilYkma/gpkN/FSk+A==} + engines: {node: '>=18'} + hasBin: true + dependencies: + chalk: 5.3.0 + conf: 12.0.0 + execa: 8.0.1 + fuse.js: 7.0.0 + inquirer: 9.2.14 + inquirer-autocomplete-prompt: 3.0.1(inquirer@9.2.14) + meow: 12.1.1 + node-fetch: 3.3.2 + ora: 8.0.1 + path-exists: 5.0.0 + proxy-agent: 6.4.0 + update-notifier: 7.0.0 + validator: 13.11.0 + transitivePeerDependencies: + - supports-color + dev: true + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3990,6 +4333,13 @@ packages: path-is-absolute: 1.0.1 dev: true + /global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} + dependencies: + ini: 2.0.0 + dev: true + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -4037,6 +4387,27 @@ packages: get-intrinsic: 1.2.2 dev: true + /got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + dev: true + + /graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -4111,6 +4482,38 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: true + + /http-proxy-agent@7.0.1: + resolution: {integrity: sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + dev: true + + /http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: true + + /https-proxy-agent@7.0.3: + resolution: {integrity: sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + dev: true + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -4154,6 +4557,13 @@ packages: - supports-color dev: true + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true @@ -4177,6 +4587,11 @@ packages: parent-module: 1.0.1 resolve-from: 4.0.0 + /import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + dev: true + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -4212,6 +4627,50 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + dev: true + + /inquirer-autocomplete-prompt@3.0.1(inquirer@9.2.14): + resolution: {integrity: sha512-DQBXwX2fVQPVUzu4v4lGgtNgyjcX2+rTyphb2MeSOQh3xUayKAfHAF4y0KgsMi06m6ZiR3xIOdzMZMfQgX2m9w==} + engines: {node: '>=16'} + peerDependencies: + inquirer: ^9.1.0 + dependencies: + ansi-escapes: 6.2.0 + figures: 5.0.0 + inquirer: 9.2.14 + picocolors: 1.0.0 + run-async: 2.4.1 + rxjs: 7.8.1 + dev: true + + /inquirer@9.2.14: + resolution: {integrity: sha512-4ByIMt677Iz5AvjyKrDpzaepIyMewNvDcvwpVVRZNmy9dLakVoVgdCHZXbK1SlVJra1db0JZ6XkJyHsanpdrdQ==} + engines: {node: '>=18'} + dependencies: + '@ljharb/through': 2.3.12 + ansi-escapes: 4.3.2 + chalk: 5.3.0 + cli-cursor: 3.1.0 + cli-width: 4.1.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + /internal-slot@1.0.6: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} @@ -4231,6 +4690,14 @@ packages: resolution: {integrity: sha512-i9m8j/7YIv4mDuYXUAcrpKPSaju/CIly9AHK5jvCBeoiM/2KEsuCQTTP+rzSWWpLYWRukdXFSl6ZTk2/uumbiA==} dev: false + /ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + dev: true + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -4357,6 +4824,12 @@ packages: is-extglob: 2.1.1 dev: true + /is-in-ci@0.1.0: + resolution: {integrity: sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==} + engines: {node: '>=18'} + hasBin: true + dev: true + /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -4365,11 +4838,24 @@ packages: is-docker: 3.0.0 dev: true + /is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + dependencies: + global-dirs: 3.0.1 + is-path-inside: 3.0.3 + dev: true + /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} dev: true + /is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + dev: true + /is-lower-case@1.1.3: resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} dependencies: @@ -4385,6 +4871,11 @@ packages: engines: {node: '>= 0.4'} dev: true + /is-npm@6.0.0: + resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -4397,6 +4888,11 @@ packages: engines: {node: '>=0.12.0'} dev: true + /is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: true + /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -4456,11 +4952,25 @@ packages: which-typed-array: 1.1.13 dev: true + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: true + /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} dev: true + /is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + dev: true + + /is-unicode-supported@2.0.0: + resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} + engines: {node: '>=18'} + dev: true + /is-upper-case@1.1.2: resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} dependencies: @@ -5111,6 +5621,10 @@ packages: argparse: 2.0.1 dev: true + /jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + dev: true + /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -5138,6 +5652,14 @@ packages: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-schema-typed@8.0.1: + resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} + dev: true + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true @@ -5194,6 +5716,13 @@ packages: language-subtag-registry: 0.3.22 dev: true + /latest-version@7.0.0: + resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} + engines: {node: '>=14.16'} + dependencies: + package-json: 8.1.1 + dev: true + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -5279,6 +5808,14 @@ packages: is-unicode-supported: 0.1.0 dev: true + /log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + dev: true + /log-update@6.0.0: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} @@ -5306,6 +5843,11 @@ packages: resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} dev: true + /lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} @@ -5323,6 +5865,11 @@ packages: yallist: 4.0.0 dev: true + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: true + /make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -5352,6 +5899,11 @@ packages: resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} dev: false + /meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + dev: true + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true @@ -5379,6 +5931,16 @@ packages: engines: {node: '>=12'} dev: true + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: true + + /mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -5424,6 +5986,11 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + /mylas@2.1.13: resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==} engines: {node: '>=12.0.0'} @@ -5438,6 +6005,11 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + dev: true + /next@14.0.4(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} engines: {node: '>=18.17.0'} @@ -5498,6 +6070,15 @@ packages: formdata-polyfill: 4.0.10 dev: true + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true @@ -5524,6 +6105,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-url@8.0.0: + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} + dev: true + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -5661,6 +6247,31 @@ packages: wcwidth: 1.0.1 dev: true + /ora@8.0.1: + resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} + engines: {node: '>=18'} + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.0.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.0.0 + strip-ansi: 7.1.0 + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + + /p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + dev: true + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -5694,6 +6305,40 @@ packages: engines: {node: '>=6'} dev: true + /pac-proxy-agent@7.0.1: + resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} + engines: {node: '>= 14'} + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.0 + debug: 4.3.4(supports-color@5.5.0) + get-uri: 6.0.3 + http-proxy-agent: 7.0.1 + https-proxy-agent: 7.0.3 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + dev: true + + /package-json@8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} + dependencies: + got: 12.6.1 + registry-auth-token: 5.0.2 + registry-url: 6.0.1 + semver: 7.5.4 + dev: true + /param-case@2.1.1: resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} dependencies: @@ -5733,6 +6378,11 @@ packages: engines: {node: '>=8'} dev: true + /path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -5875,6 +6525,30 @@ packages: object-assign: 4.1.1 react-is: 16.13.1 + /proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + dev: true + + /proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4(supports-color@5.5.0) + http-proxy-agent: 7.0.1 + https-proxy-agent: 7.0.3 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.1 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + /ps-tree@1.2.0: resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} engines: {node: '>= 0.10'} @@ -5888,6 +6562,13 @@ packages: engines: {node: '>=6'} dev: true + /pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} + dependencies: + escape-goat: 4.0.0 + dev: true + /pure-rand@6.0.4: resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} dev: true @@ -5907,6 +6588,21 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: true + /react-chartjs-2@3.3.0(chart.js@3.9.1)(react@18.2.0): resolution: {integrity: sha512-4Mt0SR2aiUbWi/4762odRBYSnbNKSs4HWc0o3IW43py5bMfmfpeZU95w6mbvtuLZH/M3GsPJMU8DvDc+5U9blQ==} peerDependencies: @@ -6060,6 +6756,20 @@ packages: set-function-name: 2.0.1 dev: true + /registry-auth-token@5.0.2: + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + engines: {node: '>=14'} + dependencies: + '@pnpm/npm-conf': 2.2.2 + dev: true + + /registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + dependencies: + rc: 1.2.8 + dev: true + /regjsparser@0.10.0: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} hasBin: true @@ -6072,6 +6782,15 @@ packages: engines: {node: '>=0.10.0'} dev: true + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: true + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -6121,6 +6840,13 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + dependencies: + lowercase-keys: 3.0.0 + dev: true + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -6168,6 +6894,16 @@ packages: execa: 5.1.1 dev: true + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + + /run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -6202,12 +6938,23 @@ packages: is-regex: 1.1.4 dev: true + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 dev: false + /semver-diff@4.0.0: + resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} + engines: {node: '>=12'} + dependencies: + semver: 7.5.4 + dev: true + /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -6324,12 +7071,36 @@ packages: is-fullwidth-code-point: 5.0.0 dev: true + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: true + /snake-case@2.1.0: resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} dependencies: no-case: 2.3.2 dev: true + /socks-proxy-agent@8.0.2: + resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4(supports-color@5.5.0) + socks: 2.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /socks@2.7.3: + resolution: {integrity: sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + dev: true + /sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} dev: true @@ -6404,6 +7175,10 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -6411,6 +7186,11 @@ packages: escape-string-regexp: 2.0.0 dev: true + /stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + dev: true + /stream-combiner@0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} dependencies: @@ -6548,11 +7328,20 @@ packages: min-indent: 1.0.1 dev: true + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true + /stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + dev: true + /styled-components@5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0): resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} engines: {node: '>=10'} @@ -6704,6 +7493,13 @@ packages: engines: {node: '>=12'} dev: true + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -6928,6 +7724,16 @@ packages: engines: {node: '>=8'} dev: true + /type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: true + + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true + /type-fest@3.13.1: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} @@ -6971,12 +7777,23 @@ packages: is-typed-array: 1.1.12 dev: true + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: true + /typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true dev: true + /uint8array-extras@0.3.0: + resolution: {integrity: sha512-erJsJwQ0tKdwuqI0359U8ijkFmfiTcq25JvvzRVc1VP+2son1NJRXhxcAKJmAW3ajM8JSGAfsAXye8g4s+znxA==} + engines: {node: '>=18'} + dev: true + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -6990,6 +7807,13 @@ packages: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true + /unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + dependencies: + crypto-random-string: 4.0.0 + dev: true + /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -7010,6 +7834,24 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-notifier@7.0.0: + resolution: {integrity: sha512-Hv25Bh+eAbOLlsjJreVPOs4vd51rrtCrmhyOJtbpAojro34jS4KQaEp4/EvlHJX7jSO42VvEFpkastVyXyIsdQ==} + engines: {node: '>=18'} + dependencies: + boxen: 7.1.1 + chalk: 5.3.0 + configstore: 6.0.0 + import-lazy: 4.0.0 + is-in-ci: 0.1.0 + is-installed-globally: 0.4.0 + is-npm: 6.0.0 + latest-version: 7.0.0 + pupa: 3.1.0 + semver: 7.5.4 + semver-diff: 4.0.0 + xdg-basedir: 5.1.0 + dev: true + /upper-case-first@1.1.2: resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} dependencies: @@ -7063,6 +7905,11 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /validator@13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + dev: true + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -7093,6 +7940,10 @@ packages: hasBin: true dev: true + /when-exit@2.1.2: + resolution: {integrity: sha512-u9J+toaf3CCxCAzM/484qNAxQE75rFdVgiFEEV8Xps2gzYhf0tx73s1WXDQhkwV17E3MxRMz40m7Ekd2/121Lg==} + dev: true + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -7157,6 +8008,22 @@ packages: isexe: 2.0.0 dev: true + /widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + dev: true + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -7188,6 +8055,15 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: true + /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -7196,6 +8072,11 @@ packages: signal-exit: 3.0.7 dev: true + /xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + dev: true + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} From 384f70de4c49bc66543fae835cec6f4b0045e330 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 13 Feb 2024 15:28:44 +0100 Subject: [PATCH 076/253] feat: refine ConsoleLogger error handling --- packages/core/src/api/Logger.ts | 21 ++++++++++++++++++- .../src/internal/logger/service/Log.test.ts | 10 ++++----- .../core/src/internal/logger/service/Log.ts | 11 +++++----- .../logger/service/LogBuilder.test.ts | 5 ++++- .../src/internal/logger/service/LogBuilder.ts | 7 +++---- 5 files changed, 38 insertions(+), 16 deletions(-) diff --git a/packages/core/src/api/Logger.ts b/packages/core/src/api/Logger.ts index 09653849f..40deee18c 100644 --- a/packages/core/src/api/Logger.ts +++ b/packages/core/src/api/Logger.ts @@ -1,5 +1,7 @@ import { Log, LoggerSubscriber, LogLevel } from "@internal/logger/service/Log"; +import { SdkError } from "./Error"; + export { Log, LogLevel }; export type { LogContext, @@ -20,9 +22,26 @@ export class ConsoleLogger implements LoggerSubscriber { case LogLevel.Debug: console.debug("[LOGGER]", ...log.messages); break; - case LogLevel.Error: + case LogLevel.Error: { + const { type, tag } = log.context; + if (type === "error" && tag) { + const { error } = log.data as { error: SdkError }; + const { originalError } = error; + console.error("[LOGGER]", ...log.messages); + console.error(originalError); + break; + } + + if (type === "error" && !tag) { + const { error } = log.data as { error: Error }; + console.warn("[LOGGER]", ...log.messages); + console.error(error); + break; + } + console.error("[LOGGER]", ...log.messages); break; + } default: console.log("[LOGGER]", ...log.messages); } diff --git a/packages/core/src/internal/logger/service/Log.test.ts b/packages/core/src/internal/logger/service/Log.test.ts index 5c6ba5e5e..9b3e475a9 100644 --- a/packages/core/src/internal/logger/service/Log.test.ts +++ b/packages/core/src/internal/logger/service/Log.test.ts @@ -1,4 +1,4 @@ -import { Log } from "./Log"; +import { Log, LogLevel } from "./Log"; describe("Log", () => { it("should create a Log instance", () => { @@ -11,11 +11,11 @@ describe("Log", () => { messages: ["test"], data: {}, context: {}, - level: 1, + level: LogLevel.Info, }); - expect(log.level).toBe(1); - log.setLevel(2); - expect(log.level).toBe(2); + expect(log.level).toBe(LogLevel.Info); + log.setLevel(LogLevel.Debug); + expect(log.level).toBe(LogLevel.Debug); }); it("should add a message", () => { diff --git a/packages/core/src/internal/logger/service/Log.ts b/packages/core/src/internal/logger/service/Log.ts index 34d30fc91..38c786063 100644 --- a/packages/core/src/internal/logger/service/Log.ts +++ b/packages/core/src/internal/logger/service/Log.ts @@ -1,13 +1,14 @@ export enum LogLevel { - Fatal = -1, - Error = 0, - Warning = 1, - Info = 2, - Debug = 3, + Fatal, + Error, + Warning, + Info, + Debug, } export type LogContext = Partial<{ type: string; + tag: string; [key: string]: unknown; }>; diff --git a/packages/core/src/internal/logger/service/LogBuilder.test.ts b/packages/core/src/internal/logger/service/LogBuilder.test.ts index 676572a73..ed0f363b2 100644 --- a/packages/core/src/internal/logger/service/LogBuilder.test.ts +++ b/packages/core/src/internal/logger/service/LogBuilder.test.ts @@ -52,7 +52,10 @@ describe("LogBuilder", () => { it("with no originalError should create a Log", () => { log = LogBuilder.buildFromError(new CustomError(), { type: "error" }); expect(log).toBeInstanceOf(Log); - expect(log.context).toEqual({ type: "CustomError" }); + expect(log.context).toStrictEqual({ + type: "error", + tag: "CustomError", + }); expect(log.messages).toEqual(["CustomError"]); }); diff --git a/packages/core/src/internal/logger/service/LogBuilder.ts b/packages/core/src/internal/logger/service/LogBuilder.ts index f32ddd0fc..4888bb398 100644 --- a/packages/core/src/internal/logger/service/LogBuilder.ts +++ b/packages/core/src/internal/logger/service/LogBuilder.ts @@ -22,13 +22,12 @@ export class LogBuilder { level: LogLevel.Error, context: { ...context, - type: isSdkError ? error._tag : "error", + type: "error", + tag: isSdkError ? error._tag : undefined, }, data: { ...data, - error: { - ...error, - }, + error, }, messages: isSdkError ? error.originalError From 454ff1d0da919f7a46bb985d98b427f611343e53 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 13 Feb 2024 17:58:31 +0100 Subject: [PATCH 077/253] chore: fix tests --- packages/core/src/api/DeviceSdk.test.ts | 9 ++++ packages/core/src/api/Logger.test.ts | 60 ++++++++++++++++++++++--- packages/core/src/api/Logger.ts | 6 +-- 3 files changed, 65 insertions(+), 10 deletions(-) diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts index 14f4b0e29..38643b597 100644 --- a/packages/core/src/api/DeviceSdk.test.ts +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -1,4 +1,8 @@ /* eslint-disable no-restricted-imports */ +import { LocalConfigDataSource } from "@internal/config/data/ConfigDataSource"; +import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; +import { types as ConfigTypes } from "@internal/config/di/configTypes"; + import pkg from "../../package.json"; import { DeviceSdk } from "./DeviceSdk"; @@ -38,6 +42,11 @@ describe("DeviceSdk", () => { it("should create a stubbed version", () => { expect(sdk).toBeDefined(); expect(sdk).toBeInstanceOf(DeviceSdk); + expect( + sdk.container.get( + ConfigTypes.LocalConfigDataSource, + ), + ).toBeInstanceOf(StubLocalConfigDataSource); }); it("should return a stubbed `version`", async () => { diff --git a/packages/core/src/api/Logger.test.ts b/packages/core/src/api/Logger.test.ts index 34e3b34ac..9d69ffe5f 100644 --- a/packages/core/src/api/Logger.test.ts +++ b/packages/core/src/api/Logger.test.ts @@ -8,6 +8,14 @@ const debug = jest.spyOn(console, "debug").mockImplementation(jest.fn()); const error = jest.spyOn(console, "error").mockImplementation(jest.fn()); const log = jest.spyOn(console, "log").mockImplementation(jest.fn()); +class CustomError { + _tag = "CustomError"; + originalError?: Error; + constructor(originalError?: Error) { + this.originalError = originalError; + } +} + let logger: ConsoleLogger; let logObject: Log; describe("ConsoleLogger", () => { @@ -24,6 +32,11 @@ describe("ConsoleLogger", () => { describe("log", () => { beforeEach(() => { + warn.mockClear(); + info.mockClear(); + debug.mockClear(); + error.mockClear(); + log.mockClear(); logger = new ConsoleLogger(); logObject = LogBuilder.build({}, {}, "test"); }); @@ -48,13 +61,6 @@ describe("ConsoleLogger", () => { expect(warn).toHaveBeenCalledWith("[LOGGER]", "test"); }); - it("should log Error level", () => { - logObject.setLevel(LogLevel.Error); - logObject.addMessage("error"); - logger.log(logObject); - expect(error).toHaveBeenCalledWith("[LOGGER]", "test", "error"); - }); - it("should log Debug level", () => { logObject.setLevel(LogLevel.Debug); logger.log(logObject); @@ -67,5 +73,45 @@ describe("ConsoleLogger", () => { logger.log(logObject); expect(log).toHaveBeenCalledWith("[LOGGER]", "test"); }); + + describe("error", () => { + it("should log Error level", () => { + const err = new Error("test"); + logObject = LogBuilder.buildFromError(err); + logger.log(logObject); + expect(warn).toHaveBeenCalledWith("[LOGGER]", "test"); + expect(error).toHaveBeenCalledWith(err); + }); + + it("should log Error level with custom error and original error", () => { + const originalError = new Error("test error"); + const err = new CustomError(originalError); + logObject = LogBuilder.buildFromError(err); + logger.log(logObject); + expect(logObject.context.tag).toBe("CustomError"); + expect(warn).toHaveBeenCalledWith("[LOGGER]", "test error"); + expect(error).toHaveBeenCalledWith(originalError); + }); + + it("should log Error level with custom error and no original error", () => { + const err = new CustomError(); + logObject = LogBuilder.buildFromError(err); + logger.log(logObject); + expect(logObject.context.tag).toBe("CustomError"); + expect(warn).toHaveBeenCalledWith("[LOGGER]", "CustomError"); + expect(error).toHaveBeenCalledWith(err); + }); + + it("should log Warn level if no error type in context", () => { + logObject = LogBuilder.build({ type: "test" }, {}, "test"); + logObject.setLevel(LogLevel.Error); + logger.log(logObject); + expect(warn).toHaveBeenCalledWith( + "[LOGGER]", + "[type !== 'error']", + "test", + ); + }); + }); }); }); diff --git a/packages/core/src/api/Logger.ts b/packages/core/src/api/Logger.ts index 40deee18c..58307905c 100644 --- a/packages/core/src/api/Logger.ts +++ b/packages/core/src/api/Logger.ts @@ -27,8 +27,8 @@ export class ConsoleLogger implements LoggerSubscriber { if (type === "error" && tag) { const { error } = log.data as { error: SdkError }; const { originalError } = error; - console.error("[LOGGER]", ...log.messages); - console.error(originalError); + console.warn("[LOGGER]", ...log.messages); + console.error(originalError ?? error); break; } @@ -39,7 +39,7 @@ export class ConsoleLogger implements LoggerSubscriber { break; } - console.error("[LOGGER]", ...log.messages); + console.warn("[LOGGER]", "[type !== 'error']", ...log.messages); break; } default: From 43a474548a61f4955b55d1572f238f8f8bef0bae Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 14 Feb 2024 14:58:33 +0100 Subject: [PATCH 078/253] feat(logger): move log level away from the log --- packages/core/src/api/Logger.test.ts | 21 +++++------- packages/core/src/api/Logger.ts | 4 +-- .../service/DefaultLoggerService.test.ts | 32 +++++++++++-------- .../logger/service/DefaultLoggerService.ts | 16 ++++------ .../src/internal/logger/service/Log.test.ts | 14 +------- .../core/src/internal/logger/service/Log.ts | 22 ++++--------- .../src/internal/logger/service/LogBuilder.ts | 3 +- 7 files changed, 44 insertions(+), 68 deletions(-) diff --git a/packages/core/src/api/Logger.test.ts b/packages/core/src/api/Logger.test.ts index 9d69ffe5f..49b59a88a 100644 --- a/packages/core/src/api/Logger.test.ts +++ b/packages/core/src/api/Logger.test.ts @@ -50,27 +50,23 @@ describe("ConsoleLogger", () => { }); it("should log Info level", () => { - logObject.setLevel(LogLevel.Info); - logger.log(logObject); + logger.log(LogLevel.Info, logObject); expect(info).toHaveBeenCalledWith("[LOGGER]", "test"); }); it("should log Warn level", () => { - logObject.setLevel(LogLevel.Warning); - logger.log(logObject); + logger.log(LogLevel.Warning, logObject); expect(warn).toHaveBeenCalledWith("[LOGGER]", "test"); }); it("should log Debug level", () => { - logObject.setLevel(LogLevel.Debug); - logger.log(logObject); + logger.log(LogLevel.Debug, logObject); expect(debug).toHaveBeenCalledWith("[LOGGER]", "test"); }); it("should default to Log level if none present", () => { // @ts-expect-error disable for tests - logObject.setLevel(undefined); - logger.log(logObject); + logger.log(null, logObject); expect(log).toHaveBeenCalledWith("[LOGGER]", "test"); }); @@ -78,7 +74,7 @@ describe("ConsoleLogger", () => { it("should log Error level", () => { const err = new Error("test"); logObject = LogBuilder.buildFromError(err); - logger.log(logObject); + logger.log(LogLevel.Error, logObject); expect(warn).toHaveBeenCalledWith("[LOGGER]", "test"); expect(error).toHaveBeenCalledWith(err); }); @@ -87,7 +83,7 @@ describe("ConsoleLogger", () => { const originalError = new Error("test error"); const err = new CustomError(originalError); logObject = LogBuilder.buildFromError(err); - logger.log(logObject); + logger.log(LogLevel.Error, logObject); expect(logObject.context.tag).toBe("CustomError"); expect(warn).toHaveBeenCalledWith("[LOGGER]", "test error"); expect(error).toHaveBeenCalledWith(originalError); @@ -96,7 +92,7 @@ describe("ConsoleLogger", () => { it("should log Error level with custom error and no original error", () => { const err = new CustomError(); logObject = LogBuilder.buildFromError(err); - logger.log(logObject); + logger.log(LogLevel.Error, logObject); expect(logObject.context.tag).toBe("CustomError"); expect(warn).toHaveBeenCalledWith("[LOGGER]", "CustomError"); expect(error).toHaveBeenCalledWith(err); @@ -104,8 +100,7 @@ describe("ConsoleLogger", () => { it("should log Warn level if no error type in context", () => { logObject = LogBuilder.build({ type: "test" }, {}, "test"); - logObject.setLevel(LogLevel.Error); - logger.log(logObject); + logger.log(LogLevel.Error, logObject); expect(warn).toHaveBeenCalledWith( "[LOGGER]", "[type !== 'error']", diff --git a/packages/core/src/api/Logger.ts b/packages/core/src/api/Logger.ts index 58307905c..35d50af6d 100644 --- a/packages/core/src/api/Logger.ts +++ b/packages/core/src/api/Logger.ts @@ -11,8 +11,8 @@ export type { } from "@internal/logger/service/Log"; export class ConsoleLogger implements LoggerSubscriber { - log(log: Log): void { - switch (log.level) { + log(level: LogLevel, log: Log): void { + switch (level) { case LogLevel.Info: console.info("[LOGGER]", ...log.messages); break; diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts index 2ecb3543b..2542be612 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts @@ -1,9 +1,8 @@ import { DefaultLoggerService } from "./DefaultLoggerService"; import { LogLevel } from "./Log"; import { LogBuilder } from "./LogBuilder"; -import { LoggerService } from "./LoggerService"; -let service: LoggerService; +let service: DefaultLoggerService; const subscriber = { log: jest.fn(), @@ -16,12 +15,11 @@ describe("LoggerService", () => { const log = LogBuilder.build({ type: "test" }, { key: "value" }, "message"); service.info(log); - - expect(subscriber.log).toHaveBeenCalledWith(log); + expect(subscriber.log).toHaveBeenCalledWith(LogLevel.Info, log); }); describe("info", () => { - it("should have the correct LogLevel", () => { + it("should call _log with the correct LogLevel", () => { subscriber.log.mockClear(); service = new DefaultLoggerService([subscriber]); const log = LogBuilder.build( @@ -30,9 +28,11 @@ describe("LoggerService", () => { "message", ); - service.info(log); + const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - expect(log.level).toBe(LogLevel.Info); + service.info(log); + expect(spy).toHaveBeenCalledWith(LogLevel.Info, log); + spy.mockRestore(); }); }); @@ -46,9 +46,11 @@ describe("LoggerService", () => { "message", ); - service.debug(log); + const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - expect(log.level).toBe(LogLevel.Debug); + service.debug(log); + expect(spy).toHaveBeenCalledWith(LogLevel.Debug, log); + spy.mockRestore(); }); }); @@ -62,9 +64,11 @@ describe("LoggerService", () => { "message", ); - service.warn(log); + const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - expect(log.level).toBe(LogLevel.Warning); + service.warn(log); + expect(spy).toHaveBeenCalledWith(LogLevel.Warning, log); + spy.mockRestore(); }); }); @@ -78,9 +82,11 @@ describe("LoggerService", () => { { key: "value" }, ); - service.error(log); + const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - expect(log.level).toBe(LogLevel.Error); + service.error(log); + expect(spy).toHaveBeenCalledWith(LogLevel.Error, log); + spy.mockRestore(); }); }); }); diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.ts index cd4227a9c..9b028c6ea 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.ts @@ -10,29 +10,25 @@ export class DefaultLoggerService implements LoggerService { this.subscribers = subscribers; } - _log(log: Log): void { + _log(level: LogLevel, log: Log): void { this.subscribers.forEach((subscriber) => { - subscriber.log(log); + subscriber.log(level, log); }); } info(log: Log): void { - log.setLevel(LogLevel.Info); - this._log(log); + this._log(LogLevel.Info, log); } warn(log: Log): void { - log.setLevel(LogLevel.Warning); - this._log(log); + this._log(LogLevel.Warning, log); } debug(log: Log): void { - log.setLevel(LogLevel.Debug); - this._log(log); + this._log(LogLevel.Debug, log); } error(log: Log): void { - log.setLevel(LogLevel.Error); - this._log(log); + this._log(LogLevel.Error, log); } } diff --git a/packages/core/src/internal/logger/service/Log.test.ts b/packages/core/src/internal/logger/service/Log.test.ts index 9b3e475a9..4d0b93040 100644 --- a/packages/core/src/internal/logger/service/Log.test.ts +++ b/packages/core/src/internal/logger/service/Log.test.ts @@ -1,4 +1,4 @@ -import { Log, LogLevel } from "./Log"; +import { Log } from "./Log"; describe("Log", () => { it("should create a Log instance", () => { @@ -6,18 +6,6 @@ describe("Log", () => { expect(log).toBeInstanceOf(Log); }); - it("should set the level", () => { - const log = new Log({ - messages: ["test"], - data: {}, - context: {}, - level: LogLevel.Info, - }); - expect(log.level).toBe(LogLevel.Info); - log.setLevel(LogLevel.Debug); - expect(log.level).toBe(LogLevel.Debug); - }); - it("should add a message", () => { const log = new Log({ messages: ["test"], data: {}, context: {} }); log.addMessage("test2"); diff --git a/packages/core/src/internal/logger/service/Log.ts b/packages/core/src/internal/logger/service/Log.ts index 38c786063..9ec957d88 100644 --- a/packages/core/src/internal/logger/service/Log.ts +++ b/packages/core/src/internal/logger/service/Log.ts @@ -1,9 +1,9 @@ export enum LogLevel { - Fatal, - Error, - Warning, - Info, - Debug, + Fatal = "FATAL", + Error = "ERROR", + Warning = "WARNING", + Info = "INFO", + Debug = "DEBUG", } export type LogContext = Partial<{ @@ -20,31 +20,23 @@ export type LogContructorArgs = { messages: LogMessages; data: LogData; context: LogContext; - level?: LogLevel; }; export interface LoggerSubscriber { - log(log: Log): void; + log(level: LogLevel, log: Log): void; } export class Log { - level: LogLevel = LogLevel.Info; messages: string[]; data: Record = {}; // use Maybe type for null/undefined ? context: LogContext = {}; // use Maybe type for null/undefined ? - constructor({ messages, data, context, level }: LogContructorArgs) { - this.level = level ?? this.level; + constructor({ messages, data, context }: LogContructorArgs) { this.messages = messages; this.data = data; this.context = context; } - setLevel(level: LogLevel) { - this.level = level; - return this; - } - addMessage(message: string) { this.messages.push(message); return this; diff --git a/packages/core/src/internal/logger/service/LogBuilder.ts b/packages/core/src/internal/logger/service/LogBuilder.ts index 4888bb398..defbfa48c 100644 --- a/packages/core/src/internal/logger/service/LogBuilder.ts +++ b/packages/core/src/internal/logger/service/LogBuilder.ts @@ -1,6 +1,6 @@ import { SdkError } from "@root/src/api/Error"; -import { Log, LogContext, LogData, LogLevel, LogMessages } from "./Log"; +import { Log, LogContext, LogData, LogMessages } from "./Log"; export class LogBuilder { static build( @@ -19,7 +19,6 @@ export class LogBuilder { const isSdkError = "_tag" in error; return new Log({ - level: LogLevel.Error, context: { ...context, type: "error", From e7f5db899b6a03d24db9b618d351e41c0506d365 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 14 Feb 2024 15:57:13 +0100 Subject: [PATCH 079/253] feat(logger): add timestamp to Log --- .../{Logger.test.ts => ConsoleLogger.test.ts} | 2 +- .../src/api/{Logger.ts => ConsoleLogger.ts} | 2 +- packages/core/src/api/index.ts | 10 +++---- .../src/internal/logger/service/Log.test.ts | 27 +++++++++++++++-- .../core/src/internal/logger/service/Log.ts | 11 ++++--- .../logger/service/LogBuilder.test.ts | 29 +++++++++++++++++++ .../src/internal/logger/service/LogBuilder.ts | 26 ++++++++++++----- 7 files changed, 87 insertions(+), 20 deletions(-) rename packages/core/src/api/{Logger.test.ts => ConsoleLogger.test.ts} (98%) rename packages/core/src/api/{Logger.ts => ConsoleLogger.ts} (98%) diff --git a/packages/core/src/api/Logger.test.ts b/packages/core/src/api/ConsoleLogger.test.ts similarity index 98% rename from packages/core/src/api/Logger.test.ts rename to packages/core/src/api/ConsoleLogger.test.ts index 49b59a88a..80276cb75 100644 --- a/packages/core/src/api/Logger.test.ts +++ b/packages/core/src/api/ConsoleLogger.test.ts @@ -1,6 +1,6 @@ import { LogBuilder } from "@internal/logger/service/LogBuilder"; -import { ConsoleLogger, Log, LogLevel } from "./Logger"; +import { ConsoleLogger, Log, LogLevel } from "./ConsoleLogger"; const warn = jest.spyOn(console, "warn").mockImplementation(jest.fn()); const info = jest.spyOn(console, "info").mockImplementation(jest.fn()); diff --git a/packages/core/src/api/Logger.ts b/packages/core/src/api/ConsoleLogger.ts similarity index 98% rename from packages/core/src/api/Logger.ts rename to packages/core/src/api/ConsoleLogger.ts index 35d50af6d..c07985c3a 100644 --- a/packages/core/src/api/Logger.ts +++ b/packages/core/src/api/ConsoleLogger.ts @@ -7,7 +7,7 @@ export type { LogContext, LogData, LoggerSubscriber, - LogMessages, + LogMessage, } from "@internal/logger/service/Log"; export class ConsoleLogger implements LoggerSubscriber { diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 4e62c93f6..06698237f 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -1,12 +1,12 @@ "use strict"; -export { DeviceSdk } from "./DeviceSdk"; -export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; export type { LogContext, LogData, LoggerSubscriber, LogLevel, - LogMessages, -} from "./Logger"; -export { ConsoleLogger, Log } from "./Logger"; + LogMessage, +} from "./ConsoleLogger"; +export { ConsoleLogger, Log } from "./ConsoleLogger"; +export { DeviceSdk } from "./DeviceSdk"; +export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; diff --git a/packages/core/src/internal/logger/service/Log.test.ts b/packages/core/src/internal/logger/service/Log.test.ts index 4d0b93040..49a5dca0f 100644 --- a/packages/core/src/internal/logger/service/Log.test.ts +++ b/packages/core/src/internal/logger/service/Log.test.ts @@ -1,13 +1,36 @@ import { Log } from "./Log"; +const d = jest.spyOn(Date, "now").mockReturnValue(12346); + describe("Log", () => { + beforeEach(() => { + d.mockClear(); + }); + it("should create a Log instance", () => { - const log = new Log({ messages: ["test"], data: {}, context: {} }); + const log = new Log({ + messages: ["test"], + data: {}, + context: {}, + }); expect(log).toBeInstanceOf(Log); }); + it("should have the correct timestamp", () => { + const log = new Log({ + messages: ["test"], + data: {}, + context: {}, + }); + expect(log.timestamp).toBe(12346); + }); + it("should add a message", () => { - const log = new Log({ messages: ["test"], data: {}, context: {} }); + const log = new Log({ + messages: ["test"], + data: {}, + context: {}, + }); log.addMessage("test2"); expect(log.messages).toEqual(["test", "test2"]); }); diff --git a/packages/core/src/internal/logger/service/Log.ts b/packages/core/src/internal/logger/service/Log.ts index 9ec957d88..bfc7d1d44 100644 --- a/packages/core/src/internal/logger/service/Log.ts +++ b/packages/core/src/internal/logger/service/Log.ts @@ -14,12 +14,13 @@ export type LogContext = Partial<{ export type LogData = Record; -export type LogMessages = string[]; +export type LogMessage = string; export type LogContructorArgs = { - messages: LogMessages; + messages: LogMessage[]; data: LogData; context: LogContext; + timestamp?: number; }; export interface LoggerSubscriber { @@ -27,14 +28,16 @@ export interface LoggerSubscriber { } export class Log { - messages: string[]; + messages: LogMessage[]; data: Record = {}; // use Maybe type for null/undefined ? context: LogContext = {}; // use Maybe type for null/undefined ? + timestamp: number = Date.now(); - constructor({ messages, data, context }: LogContructorArgs) { + constructor({ messages, data, context, timestamp }: LogContructorArgs) { this.messages = messages; this.data = data; this.context = context; + this.timestamp = timestamp ?? this.timestamp; } addMessage(message: string) { diff --git a/packages/core/src/internal/logger/service/LogBuilder.test.ts b/packages/core/src/internal/logger/service/LogBuilder.test.ts index ed0f363b2..cd10cb0a7 100644 --- a/packages/core/src/internal/logger/service/LogBuilder.test.ts +++ b/packages/core/src/internal/logger/service/LogBuilder.test.ts @@ -11,8 +11,13 @@ class CustomError { } let log: Log; +const d = jest.spyOn(Date, "now").mockReturnValue(12345); describe("LogBuilder", () => { + beforeEach(() => { + d.mockClear(); + }); + describe("build", () => { it("should create a Log instance with context and data", () => { log = LogBuilder.build( @@ -40,6 +45,30 @@ describe("LogBuilder", () => { }); }); + describe("buildWithTimestamp", () => { + it("should create a Log instance with a timestamp", () => { + log = LogBuilder.buildWithTimestamp( + { type: "test" }, + { key: "value" }, + 12345, + "test", + ); + + expect(log).toBeInstanceOf(Log); + expect(log.timestamp).toBe(12345); + expect(log.context).toEqual({ type: "test" }); + expect(log.data).toEqual({ key: "value" }); + expect(log.messages).toEqual(["test"]); + }); + + it("should create a Log instance with a timestamp and no context or data", () => { + log = LogBuilder.buildWithTimestamp(undefined, undefined, 12345, "test"); + expect(log.context).toEqual({}); + expect(log.data).toEqual({}); + expect(log.messages).toEqual(["test"]); + }); + }); + describe("buildFromError", () => { it("should create a Log instance with a normal Error", () => { log = LogBuilder.buildFromError(new Error("test"), {}, { key: "value" }); diff --git a/packages/core/src/internal/logger/service/LogBuilder.ts b/packages/core/src/internal/logger/service/LogBuilder.ts index defbfa48c..a4fe133ea 100644 --- a/packages/core/src/internal/logger/service/LogBuilder.ts +++ b/packages/core/src/internal/logger/service/LogBuilder.ts @@ -1,22 +1,37 @@ import { SdkError } from "@root/src/api/Error"; -import { Log, LogContext, LogData, LogMessages } from "./Log"; +import { Log, LogContext, LogData, LogMessage } from "./Log"; export class LogBuilder { static build( context: LogContext = {}, data: LogData = {}, - ...messages: LogMessages + ...messages: LogMessage[] ) { return new Log({ context, data, messages }); } + static buildWithTimestamp( + context: LogContext = {}, + data: LogData = {}, + timestamp: number, + ...messages: LogMessage[] + ) { + return new Log({ context, data, messages, timestamp }); + } + static buildFromError( error: SdkError | Error, context: LogContext = { type: "error" }, data: LogData = {}, + timestamp?: number, ) { const isSdkError = "_tag" in error; + const message = isSdkError + ? error.originalError + ? error.originalError.message + : error._tag + : error.message; return new Log({ context: { @@ -28,11 +43,8 @@ export class LogBuilder { ...data, error, }, - messages: isSdkError - ? error.originalError - ? [error.originalError.message] - : [error._tag] - : [error.message], + messages: [message], + timestamp, }); } } From af16eaf927ddab44a74368f2b169a77743d6f783 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 14 Feb 2024 16:20:46 +0100 Subject: [PATCH 080/253] =?UTF-8?q?=F0=9F=91=B7=20(pr):=20Update=20PR=20CI?= =?UTF-8?q?=20workflow=20to=20include=20typechecks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 35 ++++++++++-------------------- apps/sample/package.json | 3 ++- package.json | 1 + packages/core/package.json | 1 + packages/signer/package.json | 1 + packages/trusted-apps/package.json | 1 + packages/ui/package.json | 1 + turbo.json | 3 +++ 8 files changed, 21 insertions(+), 25 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 0bafccffa..e820c12ca 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,42 +1,29 @@ name: pull_request on: [pull_request] + +env: + FORCE_COLOR: "1" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name != 'develop' && github.ref || github.run_id }} + cancel-in-progress: true + jobs: - lint: + health-check: runs-on: [device-sdk-4xlarge-linux] - env: - CI_JOB_NUMBER: 1 steps: - uses: actions/checkout@v3 - uses: ./actions/setup-toolchain-composite - name: Lint - env: - FORCE_COLOR: "1" run: pnpm lint - prettier: - runs-on: [device-sdk-4xlarge-linux] - env: - CI_JOB_NUMBER: 1 - steps: - - uses: actions/checkout@v3 - - - uses: ./actions/setup-toolchain-composite - - name: Prettier run: pnpm prettier - test: - runs-on: [device-sdk-4xlarge-linux] - env: - CI_JOB_NUMBER: 1 - steps: - - uses: actions/checkout@v3 - - - uses: ./actions/setup-toolchain-composite + - name: Typecheck + run: pnpm typecheck - name: Test - env: - FORCE_COLOR: "1" run: pnpm test diff --git a/apps/sample/package.json b/apps/sample/package.json index 28e02b982..e7698bf93 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -9,7 +9,8 @@ "lint": "next lint --max-warnings=0", "lint:fix": "next lint --fix", "prettier": "prettier . --check", - "prettier:fix": "prettier . --write" + "prettier:fix": "prettier . --write", + "typecheck": "tsc --noEmit" }, "dependencies": { "@ledgerhq/device-sdk-core": "workspace:*", diff --git a/package.json b/package.json index e5947b8bf..a590a8167 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "prettier": "turbo run prettier --log-order=grouped", "prettier:fix": "turbo run prettier:fix --log-order=grouped", "test": "turbo run test --log-order=grouped", + "typecheck": "turbo run typecheck --log-order=grouped", "core": "pnpm --filter @ledgerhq/device-sdk-core", "signer": "pnpm --filter @ledgerhq/device-sdk-signer", "trusted-apps": "pnpm --filter @ledgerhq/device-sdk-trusted-apps", diff --git a/packages/core/package.json b/packages/core/package.json index a59aba017..bc30386db 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -17,6 +17,7 @@ "test": "jest src", "test:watch": "pnpm test -- --watch", "test:coverage": "pnpm test -- --coverage", + "typecheck": "tsc --noEmit", "module:create": "pnpm hygen core-module with-prompt" }, "dependencies": { diff --git a/packages/signer/package.json b/packages/signer/package.json index 8c74449ef..608455d76 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -14,6 +14,7 @@ "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", + "typecheck": "tsc --noEmit", "test": "jest --passWithNoTests" }, "dependencies": { diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 171482f20..fe8f771bf 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -13,6 +13,7 @@ "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", + "typecheck": "tsc --noEmit", "dev": "tsc --watch", "test": "jest --passWithNoTests" }, diff --git a/packages/ui/package.json b/packages/ui/package.json index 8e08b6295..d79e4d29b 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -14,6 +14,7 @@ "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", + "typecheck": "tsc --noEmit", "test": "jest --passWithNoTests" }, "dependencies": { diff --git a/turbo.json b/turbo.json index 7f7e55118..8269c3c03 100644 --- a/turbo.json +++ b/turbo.json @@ -27,6 +27,9 @@ "dependsOn": ["build", "lint"], "outputs": [], "inputs": ["src/**/*.ts", "tests/**/*.ts"] + }, + "typecheck": { + "dependsOn": ["build", "^typecheck"] } } } From 5ecb50b6679d57e05f4e93ae859e47d2b558eaae Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Thu, 15 Feb 2024 17:36:10 +0100 Subject: [PATCH 081/253] =?UTF-8?q?=F0=9F=94=A8=20(changelog):=20Setup=20c?= =?UTF-8?q?hangeset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/config.json | 16 + .github/workflows/pull_request.yml | 2 +- .github/workflows/version.yml | 23 + actions/setup-toolchain-composite/action.yml | 4 +- package.json | 8 +- pnpm-lock.yaml | 684 +++++++++++++++++++ 6 files changed, 733 insertions(+), 4 deletions(-) create mode 100644 .changeset/config.json create mode 100644 .github/workflows/version.yml diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 000000000..641058ad7 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", + "changelog": [ + "@changesets/changelog-github", + { + "repo": "LedgerHQ/device-sdk-ts" + } + ], + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "develop", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index e820c12ca..faf25b64a 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -12,7 +12,7 @@ jobs: health-check: runs-on: [device-sdk-4xlarge-linux] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./actions/setup-toolchain-composite diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml new file mode 100644 index 000000000..b4b8b7650 --- /dev/null +++ b/.github/workflows/version.yml @@ -0,0 +1,23 @@ +name: create release pull request +on: + push: + branches: + - develop + +env: + FORCE_COLOR: "1" + +jobs: + version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./actions/setup-toolchain-composite + - name: install dependencies + run: pnpm install + - name: create release pull request + uses: changesets/action@v1 + with: + version: pnpm bump + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/actions/setup-toolchain-composite/action.yml b/actions/setup-toolchain-composite/action.yml index ca73c97d5..02ee807d5 100644 --- a/actions/setup-toolchain-composite/action.yml +++ b/actions/setup-toolchain-composite/action.yml @@ -5,9 +5,9 @@ runs: using: "composite" steps: - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 20 - uses: pnpm/action-setup@v2 name: Install pnpm diff --git a/package.json b/package.json index a590a8167..f747f9eb2 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,15 @@ "ui": "pnpm --filter @ledgerhq/device-sdk-ui", "sample": "pnpm --filter @ledgerhq/device-sdk-sample", "prepare": "husky", - "commit": "gitmoji -c" + "bump": "changeset version", + "release": "changeset publish", + "changelog": "changeset add", + "commit": "gitmoji -c", + "commitcl": "pnpm changelog && pnpm commit" }, "devDependencies": { + "@changesets/changelog-github": "^0.5.0", + "@changesets/cli": "^2.27.1", "@types/jest": "^29.5.11", "@types/node": "^20.10.6", "eslint": "^8.56.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0cf5d0d1b..c38440832 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,12 @@ importers: .: devDependencies: + '@changesets/changelog-github': + specifier: ^0.5.0 + version: 0.5.0 + '@changesets/cli': + specifier: ^2.27.1 + version: 2.27.1 '@types/jest': specifier: ^29.5.11 version: 29.5.11 @@ -697,6 +703,208 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true + /@changesets/apply-release-plan@7.0.0: + resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} + dependencies: + '@babel/runtime': 7.23.6 + '@changesets/config': 3.0.0 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.5.4 + dev: true + + /@changesets/assemble-release-plan@6.0.0: + resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} + dependencies: + '@babel/runtime': 7.23.6 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.5.4 + dev: true + + /@changesets/changelog-git@0.2.0: + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + dependencies: + '@changesets/types': 6.0.0 + dev: true + + /@changesets/changelog-github@0.5.0: + resolution: {integrity: sha512-zoeq2LJJVcPJcIotHRJEEA2qCqX0AQIeFE+L21L8sRLPVqDhSXY8ZWAt2sohtBpFZkBwu+LUwMSKRr2lMy3LJA==} + dependencies: + '@changesets/get-github-info': 0.6.0 + '@changesets/types': 6.0.0 + dotenv: 8.6.0 + transitivePeerDependencies: + - encoding + dev: true + + /@changesets/cli@2.27.1: + resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} + hasBin: true + dependencies: + '@babel/runtime': 7.23.6 + '@changesets/apply-release-plan': 7.0.0 + '@changesets/assemble-release-plan': 6.0.0 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.0 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/get-release-plan': 4.0.0 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 + '@changesets/write': 0.3.0 + '@manypkg/get-packages': 1.1.3 + '@types/semver': 7.5.6 + ansi-colors: 4.1.3 + chalk: 2.4.2 + ci-info: 3.9.0 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + meow: 6.1.1 + outdent: 0.5.0 + p-limit: 2.3.0 + preferred-pm: 3.1.2 + resolve-from: 5.0.0 + semver: 7.5.4 + spawndamnit: 2.0.0 + term-size: 2.2.1 + tty-table: 4.2.3 + dev: true + + /@changesets/config@3.0.0: + resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/logger': 0.1.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.5 + dev: true + + /@changesets/errors@0.2.0: + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + dependencies: + extendable-error: 0.1.7 + dev: true + + /@changesets/get-dependents-graph@2.0.0: + resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + chalk: 2.4.2 + fs-extra: 7.0.1 + semver: 7.5.4 + dev: true + + /@changesets/get-github-info@0.6.0: + resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} + dependencies: + dataloader: 1.4.0 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + + /@changesets/get-release-plan@4.0.0: + resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} + dependencies: + '@babel/runtime': 7.23.6 + '@changesets/assemble-release-plan': 6.0.0 + '@changesets/config': 3.0.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + dev: true + + /@changesets/get-version-range-type@0.4.0: + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + dev: true + + /@changesets/git@3.0.0: + resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + dependencies: + '@babel/runtime': 7.23.6 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.5 + spawndamnit: 2.0.0 + dev: true + + /@changesets/logger@0.1.0: + resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + dependencies: + chalk: 2.4.2 + dev: true + + /@changesets/parse@0.4.0: + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + dependencies: + '@changesets/types': 6.0.0 + js-yaml: 3.14.1 + dev: true + + /@changesets/pre@2.0.0: + resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + dependencies: + '@babel/runtime': 7.23.6 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + dev: true + + /@changesets/read@0.6.0: + resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + dependencies: + '@babel/runtime': 7.23.6 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 + chalk: 2.4.2 + fs-extra: 7.0.1 + p-filter: 2.1.0 + dev: true + + /@changesets/types@4.1.0: + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + dev: true + + /@changesets/types@6.0.0: + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + dev: true + + /@changesets/write@0.3.0: + resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} + dependencies: + '@babel/runtime': 7.23.6 + '@changesets/types': 6.0.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + prettier: 2.8.8 + dev: true + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -1256,6 +1464,26 @@ packages: call-bind: 1.0.5 dev: true + /@manypkg/find-root@1.1.0: + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + dependencies: + '@babel/runtime': 7.23.6 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + dev: true + + /@manypkg/get-packages@1.1.3: + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + dependencies: + '@babel/runtime': 7.23.6 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + dev: true + /@microsoft/tsdoc-config@0.16.2: resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} dependencies: @@ -1685,6 +1913,10 @@ packages: resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} dev: true + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true + /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: true @@ -2238,6 +2470,11 @@ packages: is-shared-array-buffer: 1.0.2 dev: true + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true @@ -2407,6 +2644,13 @@ packages: engines: {node: '>=10.0.0'} dev: true + /better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + dependencies: + is-windows: 1.0.2 + dev: true + /big-integer@1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} @@ -2466,6 +2710,12 @@ packages: fill-range: 7.0.1 dev: true + /breakword@1.0.6: + resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + dependencies: + wcwidth: 1.0.1 + dev: true + /browserslist@4.22.2: resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -2556,6 +2806,15 @@ packages: upper-case: 1.1.3 dev: true + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: true + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -2726,6 +2985,14 @@ packages: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2915,6 +3182,14 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true + /cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -2947,6 +3222,28 @@ packages: /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + /csv-generate@3.4.3: + resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + dev: true + + /csv-parse@4.16.3: + resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + dev: true + + /csv-stringify@5.6.5: + resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + dev: true + + /csv@5.5.3: + resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} + engines: {node: '>= 0.1.90'} + dependencies: + csv-generate: 3.4.3 + csv-parse: 4.16.3 + csv-stringify: 5.6.5 + stream-transform: 2.1.3 + dev: true + /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true @@ -2961,6 +3258,10 @@ packages: engines: {node: '>= 14'} dev: true + /dataloader@1.4.0: + resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + dev: true + /date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} @@ -2998,6 +3299,19 @@ packages: ms: 2.1.2 supports-color: 5.5.0 + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true + /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -3100,6 +3414,11 @@ packages: engines: {node: '>=6'} dev: true + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + /detect-indent@7.0.1: resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} engines: {node: '>=12.20'} @@ -3178,6 +3497,11 @@ packages: engines: {node: '>=12'} dev: true + /dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + dev: true + /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true @@ -3969,6 +4293,10 @@ packages: jest-util: 29.7.0 dev: true + /extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + dev: true + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -4076,6 +4404,13 @@ packages: path-exists: 4.0.0 dev: true + /find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + dependencies: + micromatch: 4.0.5 + pkg-dir: 4.2.0 + dev: true + /flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4147,6 +4482,24 @@ packages: universalify: 2.0.1 dev: true + /fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + + /fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -4411,10 +4764,19 @@ packages: /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + /grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true + /hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + dev: true + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true @@ -4514,6 +4876,10 @@ packages: - supports-color dev: true + /human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + dev: true + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -4898,6 +5264,11 @@ packages: engines: {node: '>=8'} dev: true + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + /is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -4938,6 +5309,13 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + dependencies: + better-path-resolve: 1.0.0 + dev: true + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} @@ -4994,6 +5372,11 @@ packages: get-intrinsic: 1.2.2 dev: true + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -5676,6 +6059,12 @@ packages: engines: {node: '>=6'} hasBin: true + /jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: @@ -5700,11 +6089,21 @@ packages: json-buffer: 3.0.1 dev: true + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: true + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: true @@ -5775,6 +6174,16 @@ packages: wrap-ansi: 9.0.0 dev: true + /load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -5797,6 +6206,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -5853,6 +6266,13 @@ packages: engines: {node: 14 || >=16.14} dev: true + /lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: true + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -5887,6 +6307,16 @@ packages: tmpl: 1.0.5 dev: true + /map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true + /map-stream@0.1.0: resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} dev: true @@ -5904,6 +6334,23 @@ packages: engines: {node: '>=16.10'} dev: true + /meow@6.1.1: + resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + engines: {node: '>=8'} + dependencies: + '@types/minimist': 1.2.5 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 2.5.0 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.13.1 + yargs-parser: 18.1.3 + dev: true + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true @@ -5966,6 +6413,15 @@ packages: brace-expansion: 2.0.1 dev: true + /minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true @@ -5975,6 +6431,11 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dev: true + /mixme@0.5.10: + resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} + engines: {node: '>= 8.0.0'} + dev: true + /moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} dev: false @@ -6061,6 +6522,18 @@ packages: engines: {node: '>=10.5.0'} dev: true + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + /node-fetch@3.3.1: resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6267,11 +6740,22 @@ packages: engines: {node: '>=0.10.0'} dev: true + /outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + dev: true + /p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} dev: true + /p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + dependencies: + p-map: 2.1.0 + dev: true + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -6300,6 +6784,11 @@ packages: p-limit: 3.1.0 dev: true + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -6432,6 +6921,11 @@ packages: hasBin: true dev: true + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -6477,6 +6971,16 @@ packages: source-map-js: 1.0.2 dev: true + /preferred-pm@3.1.2: + resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.0.0 + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -6495,6 +6999,12 @@ packages: synckit: 0.8.6 dev: true + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + /prettier@3.1.1: resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} engines: {node: '>=14'} @@ -6557,6 +7067,10 @@ packages: event-stream: 3.3.4 dev: true + /pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: true + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -6588,6 +7102,11 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true + /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} @@ -6707,6 +7226,16 @@ packages: type-fest: 0.6.0 dev: true + /read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -6723,6 +7252,14 @@ packages: picomatch: 2.3.1 dev: true + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: true + /reflect-metadata@0.2.1: resolution: {integrity: sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==} dev: false @@ -6787,6 +7324,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true + /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: true @@ -6979,6 +7520,10 @@ packages: upper-case-first: 1.1.2 dev: true + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true + /set-function-length@1.1.1: resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} engines: {node: '>= 0.4'} @@ -7002,6 +7547,13 @@ packages: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} dev: false + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -7009,6 +7561,11 @@ packages: shebang-regex: 3.0.0 dev: true + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -7076,6 +7633,19 @@ packages: engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} dev: true + /smartwrap@2.0.2: + resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + array.prototype.flat: 1.3.2 + breakword: 1.0.6 + grapheme-splitter: 1.0.4 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 15.4.1 + dev: true + /snake-case@2.1.0: resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} dependencies: @@ -7143,6 +7713,13 @@ packages: resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} dev: true + /spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + dependencies: + cross-spawn: 5.1.0 + signal-exit: 3.0.7 + dev: true + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: @@ -7197,6 +7774,12 @@ packages: duplexer: 0.1.2 dev: true + /stream-transform@2.1.3: + resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + dependencies: + mixme: 0.5.10 + dev: true + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -7458,6 +8041,11 @@ packages: engines: {node: '>=6'} dev: true + /term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + dev: true + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -7515,11 +8103,20 @@ packages: is-number: 7.0.0 dev: true + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true + /trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + dev: true + /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -7632,6 +8229,20 @@ packages: typescript: 5.3.3 dev: true + /tty-table@4.2.3: + resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + chalk: 4.1.2 + csv: 5.5.3 + kleur: 4.1.5 + smartwrap: 2.0.2 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 17.7.2 + dev: true + /turbo-darwin-64@1.12.3: resolution: {integrity: sha512-dDglIaux+A4jOnB9CDH69sujmrnuLJLrKw1t3J+if6ySlFuxSwC++gDq9TVuOZo2+S7lFkGh+x5ytn3wp+jE8Q==} cpu: [x64] @@ -7704,6 +8315,11 @@ packages: engines: {node: '>=4'} dev: true + /type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -7814,6 +8430,11 @@ packages: crypto-random-string: 4.0.0 dev: true + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -7935,11 +8556,22 @@ packages: engines: {node: '>= 8'} dev: true + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + /webpod@0.0.2: resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} hasBin: true dev: true + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + /when-exit@2.1.2: resolution: {integrity: sha512-u9J+toaf3CCxCAzM/484qNAxQE75rFdVgiFEEV8Xps2gzYhf0tx73s1WXDQhkwV17E3MxRMz40m7Ekd2/121Lg==} dev: true @@ -7981,6 +8613,18 @@ packages: is-weakset: 2.0.2 dev: true + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: true + + /which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + dev: true + /which-typed-array@1.1.13: resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} @@ -7992,6 +8636,13 @@ packages: has-tostringtag: 1.0.0 dev: true + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -8077,11 +8728,19 @@ packages: engines: {node: '>=12'} dev: true + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: true + /yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: true + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -8099,11 +8758,36 @@ packages: engines: {node: '>= 14'} dev: true + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} dev: true + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: true + /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} From bb384bb1c135b17e833470c982d25fc568bc421a Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 16 Feb 2024 16:52:09 +0100 Subject: [PATCH 082/253] =?UTF-8?q?=E2=9C=85=20(core):=20Use=20=5F=5Fmocks?= =?UTF-8?q?=5F=5F=20folders=20with=20jest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/.eslintrc.js | 9 +++++ packages/core/src/api/ConsoleLogger.test.ts | 12 +----- packages/core/src/api/DeviceSdk.test.ts | 8 ++-- .../core/src/api/DeviceSdkBuilder.test.ts | 8 ++-- packages/core/src/api/Error.ts | 2 +- .../core/src/api/__mocks__/ConsoleLogger.ts | 3 ++ .../config/data/LocalConfigDataSource.stub.ts | 1 - .../data/__mocks__/LocalConfigDataSource.ts | 5 +++ .../data/__mocks__/RemoteConfigDataSource.ts | 7 ++++ .../service/DefaultConfigService.test.ts | 40 ++++++++----------- .../service/DefaultLoggerService.test.ts | 24 +++++------ .../service/__mocks__/DefaultLoggerService.ts | 12 ++++++ 12 files changed, 76 insertions(+), 55 deletions(-) create mode 100644 packages/core/src/api/__mocks__/ConsoleLogger.ts create mode 100644 packages/core/src/internal/config/data/__mocks__/LocalConfigDataSource.ts create mode 100644 packages/core/src/internal/config/data/__mocks__/RemoteConfigDataSource.ts create mode 100644 packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index f1495cd5c..134e640d6 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -5,4 +5,13 @@ module.exports = { project: true, tsconfigRootDir: __dirname, }, + overrides: [ + { + files: ["**/*.test.ts"], + rules: { + "no-restricted-imports": 0, + "@typescript-eslint/unbound-method": 0, + }, + }, + ], }; diff --git a/packages/core/src/api/ConsoleLogger.test.ts b/packages/core/src/api/ConsoleLogger.test.ts index 80276cb75..86b8b6f47 100644 --- a/packages/core/src/api/ConsoleLogger.test.ts +++ b/packages/core/src/api/ConsoleLogger.test.ts @@ -32,21 +32,13 @@ describe("ConsoleLogger", () => { describe("log", () => { beforeEach(() => { - warn.mockClear(); - info.mockClear(); - debug.mockClear(); - error.mockClear(); - log.mockClear(); + jest.clearAllMocks(); logger = new ConsoleLogger(); logObject = LogBuilder.build({}, {}, "test"); }); afterAll(() => { - warn.mockRestore(); - info.mockRestore(); - debug.mockRestore(); - error.mockRestore(); - log.mockRestore(); + jest.restoreAllMocks(); }); it("should log Info level", () => { diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts index 38643b597..7ff82e726 100644 --- a/packages/core/src/api/DeviceSdk.test.ts +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -4,15 +4,17 @@ import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigData import { types as ConfigTypes } from "@internal/config/di/configTypes"; import pkg from "../../package.json"; +import { ConsoleLogger } from "./ConsoleLogger"; import { DeviceSdk } from "./DeviceSdk"; +jest.mock("./ConsoleLogger"); + let sdk: DeviceSdk; -const logger = { - log: jest.fn(), -}; +let logger: ConsoleLogger; describe("DeviceSdk", () => { describe("clean", () => { beforeEach(() => { + logger = new ConsoleLogger(); sdk = new DeviceSdk({ stub: false, loggers: [logger] }); }); diff --git a/packages/core/src/api/DeviceSdkBuilder.test.ts b/packages/core/src/api/DeviceSdkBuilder.test.ts index c6f987ee8..7a89801fa 100644 --- a/packages/core/src/api/DeviceSdkBuilder.test.ts +++ b/packages/core/src/api/DeviceSdkBuilder.test.ts @@ -1,10 +1,11 @@ +import { ConsoleLogger } from "./ConsoleLogger"; import { DeviceSdk } from "./DeviceSdk"; import { LedgerDeviceSdkBuilder } from "./DeviceSdkBuilder"; +jest.mock("./ConsoleLogger"); + let builder: LedgerDeviceSdkBuilder; -const logger = { - log: jest.fn(), -}; +let logger: ConsoleLogger; describe("LedgerDeviceSdkBuilder", () => { beforeEach(() => { @@ -22,6 +23,7 @@ describe("LedgerDeviceSdkBuilder", () => { }); it("should add a logger", () => { + logger = new ConsoleLogger(); builder.addLogger(logger); expect(builder.loggers).toContain(logger); }); diff --git a/packages/core/src/api/Error.ts b/packages/core/src/api/Error.ts index c597e372f..3ea5b8ef9 100644 --- a/packages/core/src/api/Error.ts +++ b/packages/core/src/api/Error.ts @@ -1,5 +1,5 @@ export interface SdkError { readonly _tag: string; originalError?: Error; - // message?: string; FUTURE ? + // [could] message?: string; } diff --git a/packages/core/src/api/__mocks__/ConsoleLogger.ts b/packages/core/src/api/__mocks__/ConsoleLogger.ts new file mode 100644 index 000000000..f5f835627 --- /dev/null +++ b/packages/core/src/api/__mocks__/ConsoleLogger.ts @@ -0,0 +1,3 @@ +export class ConsoleLogger { + log = jest.fn(); +} diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts index 2bf993c15..2ebc196fd 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.stub.ts @@ -10,7 +10,6 @@ import { LocalConfigDataSource } from "./ConfigDataSource"; * class StubLocalConfigDataSource * */ - @injectable() export class StubLocalConfigDataSource implements LocalConfigDataSource { getConfig(): Either { diff --git a/packages/core/src/internal/config/data/__mocks__/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/__mocks__/LocalConfigDataSource.ts new file mode 100644 index 000000000..123123c42 --- /dev/null +++ b/packages/core/src/internal/config/data/__mocks__/LocalConfigDataSource.ts @@ -0,0 +1,5 @@ +import { LocalConfigDataSource } from "@internal/config/data/ConfigDataSource"; + +export class FileLocalConfigDataSource implements LocalConfigDataSource { + getConfig = jest.fn(); +} diff --git a/packages/core/src/internal/config/data/__mocks__/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/__mocks__/RemoteConfigDataSource.ts new file mode 100644 index 000000000..92d2744dd --- /dev/null +++ b/packages/core/src/internal/config/data/__mocks__/RemoteConfigDataSource.ts @@ -0,0 +1,7 @@ +import { RemoteConfigDataSource } from "@internal/config/data/ConfigDataSource"; + +export class RestRemoteConfigDataSource implements RemoteConfigDataSource { + getConfig = jest.fn(); + _parseResponse = jest.fn(); + _callApi = jest.fn(); +} diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index 30157d45a..2e4ca4c85 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -2,37 +2,31 @@ import { Either, Left } from "purify-ts"; import { JSONParseError } from "@internal/config/di/configTypes"; +import { DefaultLoggerService } from "../../logger/service/DefaultLoggerService"; +import { FileLocalConfigDataSource } from "../data/LocalConfigDataSource"; +import { RestRemoteConfigDataSource } from "../data/RemoteConfigDataSource"; import { ConfigService } from "./ConfigService"; import { DefaultConfigService } from "./DefaultConfigService"; -const localDataSource = { - getConfig: jest.fn(), -}; +jest.mock("../data/LocalConfigDataSource"); +jest.mock("../data/RemoteConfigDataSource"); -const remoteDataSource = { - getConfig: jest.fn(), - parseResponse: jest.fn(), -}; - -const loggerService = { - subscribers: [], - info: jest.fn(), - debug: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - fatal: jest.fn(), -}; +let localDataSource: jest.Mocked; +let remoteDataSource: jest.Mocked; +let loggerService: jest.Mocked; let service: ConfigService; describe("DefaultConfigService", () => { beforeEach(() => { - remoteDataSource.getConfig.mockClear(); - localDataSource.getConfig.mockClear(); - loggerService.debug.mockClear(); - loggerService.error.mockClear(); - loggerService.info.mockClear(); - loggerService.warn.mockClear(); - loggerService.subscribers = []; + jest.clearAllMocks(); + localDataSource = + new FileLocalConfigDataSource() as jest.Mocked; + remoteDataSource = + new RestRemoteConfigDataSource() as jest.Mocked; + + loggerService = new DefaultLoggerService( + [], + ) as jest.Mocked; service = new DefaultConfigService( localDataSource, diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts index 2542be612..0c5e7a4ba 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts @@ -1,27 +1,29 @@ +import { ConsoleLogger } from "../../../api/ConsoleLogger"; import { DefaultLoggerService } from "./DefaultLoggerService"; import { LogLevel } from "./Log"; import { LogBuilder } from "./LogBuilder"; +jest.mock("../../../api/ConsoleLogger"); + let service: DefaultLoggerService; -const subscriber = { - log: jest.fn(), -}; +let subscriber: jest.Mocked; describe("LoggerService", () => { - it("should call subscriber.log with the correct log object", () => { - subscriber.log.mockClear(); + beforeEach(() => { + jest.clearAllMocks(); + subscriber = new ConsoleLogger() as jest.Mocked; service = new DefaultLoggerService([subscriber]); - const log = LogBuilder.build({ type: "test" }, { key: "value" }, "message"); + }); + it("should call subscriber.log with the correct log object", () => { + const log = LogBuilder.build({ type: "test" }, { key: "value" }, "message"); service.info(log); expect(subscriber.log).toHaveBeenCalledWith(LogLevel.Info, log); }); describe("info", () => { it("should call _log with the correct LogLevel", () => { - subscriber.log.mockClear(); - service = new DefaultLoggerService([subscriber]); const log = LogBuilder.build( { type: "test" }, { key: "value" }, @@ -38,8 +40,6 @@ describe("LoggerService", () => { describe("debug", () => { it("should have the correct LogLevel", () => { - subscriber.log.mockClear(); - service = new DefaultLoggerService([subscriber]); const log = LogBuilder.build( { type: "test" }, { key: "value" }, @@ -56,8 +56,6 @@ describe("LoggerService", () => { describe("warn", () => { it("should have the correct LogLevel", () => { - subscriber.log.mockClear(); - service = new DefaultLoggerService([subscriber]); const log = LogBuilder.build( { type: "test" }, { key: "value" }, @@ -74,8 +72,6 @@ describe("LoggerService", () => { describe("error", () => { it("should have the correct LogLevel", () => { - subscriber.log.mockClear(); - service = new DefaultLoggerService([subscriber]); const log = LogBuilder.buildFromError( new Error("test"), { type: "test" }, diff --git a/packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts b/packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts new file mode 100644 index 000000000..d395b51f8 --- /dev/null +++ b/packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts @@ -0,0 +1,12 @@ +import { LoggerSubscriber } from "@internal/logger/service/Log"; +import { LoggerService } from "@internal/logger/service/LoggerService"; + +export class DefaultLoggerService implements LoggerService { + subscribers: LoggerSubscriber[] = []; + + _log = jest.fn(); + info = jest.fn(); + warn = jest.fn(); + debug = jest.fn(); + error = jest.fn(); +} From 8fe561a90b43e12000d1411333f2cb9a2854aba8 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 20 Feb 2024 15:56:14 +0100 Subject: [PATCH 083/253] =?UTF-8?q?=F0=9F=93=88=20(othr):=20Add=20SonarQub?= =?UTF-8?q?e=20integration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 7 ++++++- package.json | 1 + packages/signer/package.json | 3 ++- packages/trusted-apps/package.json | 3 ++- packages/ui/package.json | 3 ++- sonar-project.properties | 4 ++++ turbo.json | 5 +++++ 7 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 sonar-project.properties diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index faf25b64a..52ac5a5d3 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -26,4 +26,9 @@ jobs: run: pnpm typecheck - name: Test - run: pnpm test + run: pnpm test:coverage + + - uses: sonarsource/sonarqube-scan-action@master + env: + SONAR_TOKEN: ${{ secrets.GREEN_SONAR_TOKEN }} + SONAR_HOST_URL: ${{ secrets.GREEN_SONAR_HOST_URL }} diff --git a/package.json b/package.json index f747f9eb2..c3e29d965 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "prettier": "turbo run prettier --log-order=grouped", "prettier:fix": "turbo run prettier:fix --log-order=grouped", "test": "turbo run test --log-order=grouped", + "test:coverage": "turbo run test:coverage --log-order=grouped", "typecheck": "turbo run typecheck --log-order=grouped", "core": "pnpm --filter @ledgerhq/device-sdk-core", "signer": "pnpm --filter @ledgerhq/device-sdk-signer", diff --git a/packages/signer/package.json b/packages/signer/package.json index 608455d76..0a347e8e2 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -15,7 +15,8 @@ "prettier": "prettier . --check", "prettier:fix": "prettier . --write", "typecheck": "tsc --noEmit", - "test": "jest --passWithNoTests" + "test": "jest --passWithNoTests", + "test:coverage": "pnpm test -- --coverage" }, "dependencies": { "inversify": "^6.0.2", diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index fe8f771bf..7f3fb6015 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -15,7 +15,8 @@ "prettier:fix": "prettier . --write", "typecheck": "tsc --noEmit", "dev": "tsc --watch", - "test": "jest --passWithNoTests" + "test": "jest --passWithNoTests", + "test:coverage": "pnpm test -- --coverage" }, "dependencies": { "inversify": "^6.0.2", diff --git a/packages/ui/package.json b/packages/ui/package.json index d79e4d29b..e302e07ff 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -15,7 +15,8 @@ "prettier": "prettier . --check", "prettier:fix": "prettier . --write", "typecheck": "tsc --noEmit", - "test": "jest --passWithNoTests" + "test": "jest --passWithNoTests", + "test:coverage": "pnpm test -- --coverage" }, "dependencies": { "inversify": "^6.0.2", diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 000000000..2d21d046b --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,4 @@ +sonar.projectKey=LedgerHQ_device-sdk-ts_AY3G5or9RLDSln8Rix8q +sonar.typescript.tsconfigPaths=tsconfig.json +sonar.javascript.lcov.reportPaths=**/coverage/lcov.info +sonar.exclusions=**/node_modules/**,**/coverage/**,**/.next,**/pocs/**,**/.turbo/**,**/lib/** \ No newline at end of file diff --git a/turbo.json b/turbo.json index 8269c3c03..9307502bc 100644 --- a/turbo.json +++ b/turbo.json @@ -28,6 +28,11 @@ "outputs": [], "inputs": ["src/**/*.ts", "tests/**/*.ts"] }, + "test:coverage": { + "dependsOn": ["build", "lint"], + "outputs": [], + "inputs": ["src/**/*.ts", "tests/**/*.ts"] + }, "typecheck": { "dependsOn": ["build", "^typecheck"] } From 30cb364869b2a5c93264c3d2a68a53b4064d8ccb Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 10:07:47 +0100 Subject: [PATCH 084/253] =?UTF-8?q?=F0=9F=94=A8=20(core):=20Update=20featu?= =?UTF-8?q?re=20to=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/scripts/add-module.mjs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/scripts/add-module.mjs b/packages/core/scripts/add-module.mjs index 377da64ad..d683a7590 100644 --- a/packages/core/scripts/add-module.mjs +++ b/packages/core/scripts/add-module.mjs @@ -4,7 +4,7 @@ import { basename } from "node:path"; const modules = argv._; if (!modules.length) { - console.error(`Usage: ${basename(__filename)} [ ...]`); + console.error(`Usage: ${basename(__filename)} [ ...]`); process.exit(1); } @@ -12,20 +12,20 @@ within(async () => { cd("src/internal"); for (const mod of modules) { const rootFolderName = `${mod}`; - const featureUppercased = mod.charAt(0).toUpperCase() + mod.slice(1); + const moduleUppercased = mod.charAt(0).toUpperCase() + mod.slice(1); await $`mkdir ${rootFolderName}`; within(async () => { cd(rootFolderName); await $`mkdir data di model service usecase`; const files = [ - `data/${featureUppercased}DataSource.ts`, + `data/${moduleUppercased}DataSource.ts`, `di/${mod}Module.test.ts`, `di/${mod}Module.ts`, `di/${mod}Types.ts`, `model/.gitkeep`, - `service/${featureUppercased}Service.ts`, - `service/Default${featureUppercased}Service.test.ts`, - `service/Default${featureUppercased}Service.ts`, + `service/${moduleUppercased}Service.ts`, + `service/Default${moduleUppercased}Service.test.ts`, + `service/Default${moduleUppercased}Service.ts`, `usecase/.gitkeep`, ]; for (const file of files) { From 317e0d94dd193373d09f7d1704de1f5bd32712ca Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 10:08:53 +0100 Subject: [PATCH 085/253] =?UTF-8?q?=E2=9A=97=EF=B8=8F=20(core):=20New=20ex?= =?UTF-8?q?ample=20with=20WebHid=20api=20getDevices?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To demonstrate that once a device of model/productId A is granted access, any other model/productId A device is also granted access, even if plugged in another USB port. --- pocs/web-hid-api/README.md | 4 ++ pocs/web-hid-api/index.html | 1 + pocs/web-hid-api/index.js | 78 +++++++++++++++++++++++++++++++++---- 3 files changed, 75 insertions(+), 8 deletions(-) diff --git a/pocs/web-hid-api/README.md b/pocs/web-hid-api/README.md index 319234e7a..734f7eb89 100644 --- a/pocs/web-hid-api/README.md +++ b/pocs/web-hid-api/README.md @@ -6,6 +6,10 @@ See the following documentation: [WebHID API Overview](https://ledgerhq.atlassia ## Run POC To run, just open `index.html` on your browser ✨, and click on the `start` button +You can also serve the page with: +``` +pnpm dlx serve . +``` Some actions (described in comments in `index.js`) can be done to try different error scenarios. diff --git a/pocs/web-hid-api/index.html b/pocs/web-hid-api/index.html index e020432a7..bf1fb5d5a 100644 --- a/pocs/web-hid-api/index.html +++ b/pocs/web-hid-api/index.html @@ -5,6 +5,7 @@ + diff --git a/pocs/web-hid-api/index.js b/pocs/web-hid-api/index.js index 3bffc2b76..da2a5ee41 100644 --- a/pocs/web-hid-api/index.js +++ b/pocs/web-hid-api/index.js @@ -4,7 +4,8 @@ console.info('WebHID API tester'); // A `requestDevice` can only be called in the context of a user interaction. // startWebHid(); -document.getElementById('startButton').addEventListener('click', function() { +document.getElementById('startButton').addEventListener('click', function () { + console.info("--- startButton button clicked ---"); startWebHid(); }); @@ -28,7 +29,7 @@ async function startWebHid() { // and remove any permission access to `file:///` (this website) and see what happens // -> on my MacOS with Chrome no error is thrown and the `devices` array is empty try { - devices = await navigator.hid.requestDevice({ filters: [{ vendorId: 0x2c97 }] }); + devices = await navigator.hid.requestDevice({ filters: [{ vendorId: 0x2c97 }] }); } catch (error) { console.error(`Error requesting device: ${error}`, error); return; @@ -40,19 +41,20 @@ async function startWebHid() { } const device = devices[0]; - console.info(`User selected: ${device.productName}. Collections attributes: ${device.collections.length}`); + console.info(`User selected: ${device.productName}. Product id: 0x${(device.productId >> 8).toString(16)}.`); + console.info(`Collections attributes: ${device.collections.length}`) for (let collection of device.collections) { console.log(`Collection:`); // An HID collection includes usage, usage page, reports, and subcollections. console.log(`--- Usage: ${collection.usage}`); console.log(`--- Usage page: ${collection.usagePage}`); - + console.log(`--- Input reports: ${collection.inputReports.length}`); for (let inputReport of collection.inputReports) { console.log(`--- Input report id: ${inputReport.reportId}`); } - + console.log(`--- Output reports: ${collection.outputReports.length}`); for (let outputReport of collection.outputReports) { console.log(`--- Output report id: ${outputReport.reportId}`); @@ -76,15 +78,15 @@ async function startWebHid() { } } - device.addEventListener("inputreport", event => { - const { data, device, reportId } = event; + device.addEventListener("inputreport", event => { + const { data, device, reportId } = event; const response = (new Uint8Array(data.buffer)).map(x => x.toString(16)).join(' '); console.log(`Received an input report on ${reportId}: ${response}`); }); console.log(`Sending getVersion to device ${device.productName} ...`); try { - await device.sendReport(0, new Uint8Array([0xAA, 0xAA, 0x05, 0x00, 0x00,0x00,0x05,0xE0,0x01,0x00,0x00,0x00])); + await device.sendReport(0, new Uint8Array([0xAA, 0xAA, 0x05, 0x00, 0x00, 0x00, 0x05, 0xE0, 0x01, 0x00, 0x00, 0x00])); console.log("getVersion sent"); } catch (error) { console.error(`Error while sending getVersion: ${error}`, error); @@ -104,3 +106,63 @@ if ("hid" in navigator) { console.log(`📡 Received a disconnect event on ${device.productName}`); }); } + + +/** + * Example to demonstrate that once a device of model/productId A is granted access, any other model/productId A device is also granted access, + * even if plugged in another USB port. + * + * You can test this by: + * - plugging a device 1 (model A) and grant access via the `startButton` button + * - unplug the device 1 + * - plug a device 2 (model A) in another USB port + * - click the `alreadyAccessibleDevice` button + * And you should see the device 2 being opened and the getVersion sent successfully. + * + * You can also test with a device from another model and see what happens. + */ +document.getElementById('alreadyAccessibleDevice').addEventListener('click', async function () { + console.info("--- alreadyAccessibleDevice button clicked ---"); + + if (!("hid" in navigator)) { + console.warn("WebHID API not supported :'("); + return; + } + + console.info("WebHID API supported !"); + + // Get all devices the user has previously granted the website access to. + const prevGrantedDevices = await navigator.hid.getDevices(); + console.info(`Devices previously granted access: ${prevGrantedDevices.length} devices\n: ${prevGrantedDevices.map(d => d.productName).join(', ')}`); + + if (prevGrantedDevices.length > 0) { + const [device] = prevGrantedDevices; + console.log(`Opening the first device: ${device.productName}, product id: 0x${(device.productId >> 8).toString(16)} ...`); + + try { + await device.open(); + } catch (error) { + if (error instanceof DOMException && error.name === "InvalidStateError") { + console.info(`Device ${device.productName} is already open`); + } else { + console.error(`Error while opening device: ${error}`, error); + return + } + } + + device.addEventListener("inputreport", event => { + const { data, reportId } = event; + const response = (new Uint8Array(data.buffer)).map(x => x.toString(16)).join(' '); + console.log(`Received an input report on ${reportId}: ${response}`); + }); + + console.log(`Sending getVersion to device ${device.productName} ...`); + try { + await device.sendReport(0, new Uint8Array([0xAA, 0xAA, 0x05, 0x00, 0x00, 0x00, 0x05, 0xE0, 0x01, 0x00, 0x00, 0x00])); + console.log("getVersion sent"); + } catch (error) { + console.error(`Error while sending getVersion: ${error}`, error); + return; + } + } +}); From e86b28744b7c0bb0c1a870f087dcb7ff82747d4b Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 10:09:33 +0100 Subject: [PATCH 086/253] =?UTF-8?q?=F0=9F=9A=A8=20(core):=20Remove=20TS=20?= =?UTF-8?q?compilerOptions=20types?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It was making it mandatory to list all added types packages, which was not practical and causing issues with @types/w3c-web-hid --- packages/config/typescript/sdk.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/config/typescript/sdk.json b/packages/config/typescript/sdk.json index 0ae0a817d..8cad79134 100644 --- a/packages/config/typescript/sdk.json +++ b/packages/config/typescript/sdk.json @@ -3,7 +3,6 @@ "compilerOptions": { "target": "esnext", "lib": ["esnext", "dom"], - "types": ["reflect-metadata", "jest", "node"], "sourceMap": true, "declaration": true, "declarationMap": true, From 8b018d4bc00fe8548cb341f2d592934936ea1557 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 10:10:57 +0100 Subject: [PATCH 087/253] =?UTF-8?q?=E2=9C=A8=20(core):=20New=20usb,=20devi?= =?UTF-8?q?ce-model=20and=20discovery=20modules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - in usb: UsbHidTransport and its WebHid implementation - in device-model: DeviceModelDataSource and its in-memory implementation - discovery: start and stop discovery uses cases, and connect use case --- packages/core/package.json | 8 +- packages/core/src/api/DeviceSdk.ts | 27 ++ packages/core/src/api/index.ts | 3 + packages/core/src/di.ts | 6 + .../data/DeviceModelDataSource.ts | 15 + .../data/StaticDeviceModelDataSource.test.ts | 142 +++++++ .../data/StaticDeviceModelDataSource.ts | 88 +++++ .../device-model/di/deviceModelDiTypes.ts | 3 + .../device-model/di/deviceModelModule.test.ts | 27 ++ .../device-model/di/deviceModelModule.ts | 23 ++ .../device-model/model/DeviceModel.stub.ts | 25 ++ .../device-model/model/DeviceModel.test.ts | 57 +++ .../device-model/model/DeviceModel.ts | 70 ++++ .../internal/discovery/di/discoveryDiTypes.ts | 5 + .../discovery/di/discoveryModule.test.ts | 44 +++ .../internal/discovery/di/discoveryModule.ts | 25 ++ .../discovery/use-case/ConnectUseCase.test.ts | 64 +++ .../discovery/use-case/ConnectUseCase.ts | 38 ++ .../use-case/StartDiscoveringUseCase.test.ts | 48 +++ .../use-case/StartDiscoveringUseCase.ts | 24 ++ .../use-case/StopDiscoveringUseCase.test.ts | 28 ++ .../use-case/StopDiscoveringUseCase.ts | 20 + .../src/internal/usb/data/UsbHidConfig.ts | 2 + .../core/src/internal/usb/di/usbDiTypes.ts | 3 + .../src/internal/usb/di/usbModule.test.ts | 26 ++ .../core/src/internal/usb/di/usbModule.ts | 22 ++ .../src/internal/usb/model/ConnectedDevice.ts | 12 + .../internal/usb/model/DiscoveredDevice.ts | 13 + .../core/src/internal/usb/model/Errors.ts | 45 +++ .../internal/usb/transport/UsbHidTransport.ts | 28 ++ .../usb/transport/WebUsbHidTransport.test.ts | 365 ++++++++++++++++++ .../usb/transport/WebUsbHidTransport.ts | 281 ++++++++++++++ .../transport/__mocks__/WebUsbHidTransport.ts | 20 + pnpm-lock.yaml | 35 +- 34 files changed, 1637 insertions(+), 5 deletions(-) create mode 100644 packages/core/src/internal/device-model/data/DeviceModelDataSource.ts create mode 100644 packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.test.ts create mode 100644 packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts create mode 100644 packages/core/src/internal/device-model/di/deviceModelDiTypes.ts create mode 100644 packages/core/src/internal/device-model/di/deviceModelModule.test.ts create mode 100644 packages/core/src/internal/device-model/di/deviceModelModule.ts create mode 100644 packages/core/src/internal/device-model/model/DeviceModel.stub.ts create mode 100644 packages/core/src/internal/device-model/model/DeviceModel.test.ts create mode 100644 packages/core/src/internal/device-model/model/DeviceModel.ts create mode 100644 packages/core/src/internal/discovery/di/discoveryDiTypes.ts create mode 100644 packages/core/src/internal/discovery/di/discoveryModule.test.ts create mode 100644 packages/core/src/internal/discovery/di/discoveryModule.ts create mode 100644 packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts create mode 100644 packages/core/src/internal/discovery/use-case/ConnectUseCase.ts create mode 100644 packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts create mode 100644 packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts create mode 100644 packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts create mode 100644 packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.ts create mode 100644 packages/core/src/internal/usb/data/UsbHidConfig.ts create mode 100644 packages/core/src/internal/usb/di/usbDiTypes.ts create mode 100644 packages/core/src/internal/usb/di/usbModule.test.ts create mode 100644 packages/core/src/internal/usb/di/usbModule.ts create mode 100644 packages/core/src/internal/usb/model/ConnectedDevice.ts create mode 100644 packages/core/src/internal/usb/model/DiscoveredDevice.ts create mode 100644 packages/core/src/internal/usb/model/Errors.ts create mode 100644 packages/core/src/internal/usb/transport/UsbHidTransport.ts create mode 100644 packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts create mode 100644 packages/core/src/internal/usb/transport/WebUsbHidTransport.ts create mode 100644 packages/core/src/internal/usb/transport/__mocks__/WebUsbHidTransport.ts diff --git a/packages/core/package.json b/packages/core/package.json index bc30386db..1331e56c0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -24,9 +24,15 @@ "inversify": "^6.0.2", "inversify-logger-middleware": "^3.1.0", "purify-ts": "^2.0.3", - "reflect-metadata": "^0.2.1" + "reflect-metadata": "^0.2.1", + "rxjs": "^7.8.1", + "semver": "^7.5.4", + "uuid": "^9.0.1" }, "devDependencies": { + "@types/semver": "^7.5.6", + "@types/uuid": "^9.0.8", + "@types/w3c-web-hid": "^1.0.6", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 457b3e2e0..7171addd5 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -1,7 +1,16 @@ import { Container } from "inversify"; +import { Observable } from "rxjs"; import { types as ConfigTypes } from "@internal/config/di/configTypes"; import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; +import { discoveryDiTypes } from "@internal/discovery/di/discoveryDiTypes"; +import { + ConnectUseCase, + ConnectUseCaseArgs, +} from "@internal/discovery/use-case/ConnectUseCase"; +import type { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; +import type { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; +import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { makeContainer, MakeContainerProps } from "@root/src/di"; export class DeviceSdk { @@ -27,4 +36,22 @@ export class DeviceSdk { .get(ConfigTypes.GetSdkVersionUseCase) .getSdkVersion(); } + + startDiscovering(): Observable { + return this.container + .get(discoveryDiTypes.StartDiscoveringUseCase) + .execute(); + } + + stopDiscovering() { + return this.container + .get(discoveryDiTypes.StopDiscoveringUseCase) + .execute(); + } + + connect(args: ConnectUseCaseArgs) { + return this.container + .get(discoveryDiTypes.ConnectUseCase) + .execute(args); + } } diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 06698237f..d20bedce4 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -10,3 +10,6 @@ export type { export { ConsoleLogger, Log } from "./ConsoleLogger"; export { DeviceSdk } from "./DeviceSdk"; export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; + +// [SHOULD] be exported from another file +export type { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index bca563c75..3fd1a0e31 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -3,8 +3,11 @@ import { Container } from "inversify"; // Uncomment this line to enable the logger middleware // import { makeLoggerMiddleware } from "inversify-logger-middleware"; import { configModuleFactory } from "@internal/config/di/configModule"; +import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelModule"; +import { discoveryModuleFactory } from "@internal/discovery/di/discoveryModule"; import { loggerModuleFactory } from "@internal/logger/di/loggerModule"; import { LoggerSubscriber } from "@internal/logger/service/Log"; +import { usbModuleFactory } from "@internal/usb/di/usbModule"; // Uncomment this line to enable the logger middleware // const logger = makeLoggerMiddleware(); @@ -25,6 +28,9 @@ export const makeContainer = ({ container.load( configModuleFactory({ stub }), + deviceModelModuleFactory({ stub }), + usbModuleFactory({ stub }), + discoveryModuleFactory({ stub }), loggerModuleFactory({ subscribers: loggers }), // modules go here ); diff --git a/packages/core/src/internal/device-model/data/DeviceModelDataSource.ts b/packages/core/src/internal/device-model/data/DeviceModelDataSource.ts new file mode 100644 index 000000000..40bb0f044 --- /dev/null +++ b/packages/core/src/internal/device-model/data/DeviceModelDataSource.ts @@ -0,0 +1,15 @@ +import { + DeviceModel, + DeviceModelId, +} from "@internal/device-model/model/DeviceModel"; + +/** + * Source of truth for the device models + */ +export interface DeviceModelDataSource { + getAllDeviceModels(): DeviceModel[]; + + getDeviceModel(params: { id: DeviceModelId }): DeviceModel; + + filterDeviceModels(params: Partial): DeviceModel[]; +} diff --git a/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.test.ts b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.test.ts new file mode 100644 index 000000000..7912ec4f7 --- /dev/null +++ b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.test.ts @@ -0,0 +1,142 @@ +import { DeviceModelId } from "@internal/device-model/model/DeviceModel"; + +import { StaticDeviceModelDataSource } from "./StaticDeviceModelDataSource"; + +describe("StaticDeviceModelDataSource", () => { + describe("getAllDeviceModels", () => { + it("should return all device models", () => { + const dataSource = new StaticDeviceModelDataSource(); + const deviceModels = dataSource.getAllDeviceModels(); + + // Currently supporting 4 device models + expect(deviceModels.length).toEqual(4); + expect(deviceModels).toContainEqual( + expect.objectContaining({ id: DeviceModelId.NANO_S }), + ); + expect(deviceModels).toContainEqual( + expect.objectContaining({ id: DeviceModelId.NANO_SP }), + ); + expect(deviceModels).toContainEqual( + expect.objectContaining({ id: DeviceModelId.NANO_X }), + ); + expect(deviceModels).toContainEqual( + expect.objectContaining({ id: DeviceModelId.STAX }), + ); + }); + }); + + describe("getDeviceModel", () => { + it("should return the associated device model", () => { + const dataSource = new StaticDeviceModelDataSource(); + + const deviceModel1 = dataSource.getDeviceModel({ + id: DeviceModelId.NANO_S, + }); + expect(deviceModel1).toEqual( + expect.objectContaining({ id: DeviceModelId.NANO_S }), + ); + + const deviceModel2 = dataSource.getDeviceModel({ + id: DeviceModelId.NANO_SP, + }); + expect(deviceModel2).toEqual( + expect.objectContaining({ id: DeviceModelId.NANO_SP }), + ); + + const deviceModel3 = dataSource.getDeviceModel({ + id: DeviceModelId.NANO_X, + }); + expect(deviceModel3).toEqual( + expect.objectContaining({ id: DeviceModelId.NANO_X }), + ); + + const deviceModel4 = dataSource.getDeviceModel({ + id: DeviceModelId.STAX, + }); + expect(deviceModel4).toEqual( + expect.objectContaining({ id: DeviceModelId.STAX }), + ); + }); + }); + + describe("filterDeviceModels", () => { + it("should return the device models that match the given single parameter", () => { + const dataSource = new StaticDeviceModelDataSource(); + + const deviceModels1 = dataSource.filterDeviceModels({ usbOnly: true }); + expect(deviceModels1.length).toEqual(2); + expect(deviceModels1).toContainEqual( + expect.objectContaining({ id: DeviceModelId.NANO_SP }), + ); + expect(deviceModels1).toContainEqual( + expect.objectContaining({ id: DeviceModelId.NANO_S }), + ); + + const deviceModels2 = dataSource.filterDeviceModels({ + usbProductId: 0x10, + }); + expect(deviceModels2.length).toEqual(1); + expect(deviceModels2[0]).toEqual( + expect.objectContaining({ id: DeviceModelId.NANO_S }), + ); + + const deviceModels3 = dataSource.filterDeviceModels({ + usbProductId: 0x40, + }); + expect(deviceModels3.length).toEqual(1); + expect(deviceModels3[0]).toEqual( + expect.objectContaining({ id: DeviceModelId.NANO_X }), + ); + + const deviceModels4 = dataSource.filterDeviceModels({ + usbProductId: 0x50, + }); + expect(deviceModels4.length).toEqual(1); + expect(deviceModels4[0]).toEqual( + expect.objectContaining({ id: DeviceModelId.NANO_SP }), + ); + + const deviceModels5 = dataSource.filterDeviceModels({ + usbProductId: 0x60, + }); + expect(deviceModels5.length).toEqual(1); + expect(deviceModels5[0]).toEqual( + expect.objectContaining({ id: DeviceModelId.STAX }), + ); + + const deviceModels6 = dataSource.filterDeviceModels({ + usbProductId: 0x00, + }); + expect(deviceModels6.length).toEqual(0); + }); + + it("should return the device models that match the given multiple parameters", () => { + const dataSource = new StaticDeviceModelDataSource(); + + const deviceModels1 = dataSource.filterDeviceModels({ + usbOnly: false, + usbProductId: 0x40, + }); + expect(deviceModels1.length).toEqual(1); + expect(deviceModels1[0]).toEqual( + expect.objectContaining({ id: DeviceModelId.NANO_X }), + ); + + const deviceModels2 = dataSource.filterDeviceModels({ + usbOnly: true, + usbProductId: 0x50, + }); + expect(deviceModels2.length).toEqual(1); + expect(deviceModels2[0]).toEqual( + expect.objectContaining({ id: DeviceModelId.NANO_SP }), + ); + + // Nano S is usbOnly + const deviceModels3 = dataSource.filterDeviceModels({ + usbOnly: false, + usbProductId: 0x10, + }); + expect(deviceModels3.length).toEqual(0); + }); + }); +}); diff --git a/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts new file mode 100644 index 000000000..359438577 --- /dev/null +++ b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts @@ -0,0 +1,88 @@ +import { injectable } from "inversify"; + +import { + DeviceModel, + DeviceModelId, +} from "@internal/device-model/model/DeviceModel"; + +import { DeviceModelDataSource } from "./DeviceModelDataSource"; + +/** + * Static/in memory implementation of the device model data source + */ +@injectable() +export class StaticDeviceModelDataSource implements DeviceModelDataSource { + private static deviceModelByIds: { [key in DeviceModelId]: DeviceModel } = { + [DeviceModelId.NANO_S]: new DeviceModel({ + id: DeviceModelId.NANO_S, + productName: "Ledger Nano S", + usbProductId: 0x10, + legacyUsbProductId: 0x0001, + usbOnly: true, + memorySize: 320 * 1024, + masks: [0x31100000], + }), + [DeviceModelId.NANO_SP]: new DeviceModel({ + id: DeviceModelId.NANO_SP, + productName: "Ledger Nano S Plus", + usbProductId: 0x50, + legacyUsbProductId: 0x0005, + usbOnly: true, + memorySize: 1533 * 1024, + masks: [0x33100000], + }), + [DeviceModelId.NANO_X]: new DeviceModel({ + id: DeviceModelId.NANO_X, + productName: "Ledger Nano X", + usbProductId: 0x40, + legacyUsbProductId: 0x0004, + usbOnly: false, + memorySize: 2 * 1024 * 1024, + masks: [0x33000000], + bluetoothSpec: [ + { + serviceUuid: "13d63400-2c97-0004-0000-4c6564676572", + notifyUuid: "13d63400-2c97-0004-0001-4c6564676572", + writeUuid: "13d63400-2c97-0004-0002-4c6564676572", + writeCmdUuid: "13d63400-2c97-0004-0003-4c6564676572", + }, + ], + }), + [DeviceModelId.STAX]: new DeviceModel({ + id: DeviceModelId.STAX, + productName: "Ledger Stax", + usbProductId: 0x60, + legacyUsbProductId: 0x0006, + usbOnly: false, + memorySize: 1533 * 1024, + masks: [0x33200000], + bluetoothSpec: [ + { + serviceUuid: "13d63400-2c97-6004-0000-4c6564676572", + notifyUuid: "13d63400-2c97-6004-0001-4c6564676572", + writeUuid: "13d63400-2c97-6004-0002-4c6564676572", + writeCmdUuid: "13d63400-2c97-6004-0003-4c6564676572", + }, + ], + }), + }; + + getAllDeviceModels(): DeviceModel[] { + return Object.values(StaticDeviceModelDataSource.deviceModelByIds); + } + + getDeviceModel(params: { id: DeviceModelId }): DeviceModel { + return StaticDeviceModelDataSource.deviceModelByIds[params.id]; + } + + /** + * Returns the list of device models that match all the given parameters + */ + filterDeviceModels(params: Partial): DeviceModel[] { + return this.getAllDeviceModels().filter((deviceModel) => { + return Object.entries(params).every(([key, value]) => { + return deviceModel[key as keyof DeviceModel] === value; + }); + }); + } +} diff --git a/packages/core/src/internal/device-model/di/deviceModelDiTypes.ts b/packages/core/src/internal/device-model/di/deviceModelDiTypes.ts new file mode 100644 index 000000000..2f1392b99 --- /dev/null +++ b/packages/core/src/internal/device-model/di/deviceModelDiTypes.ts @@ -0,0 +1,3 @@ +export const deviceModelDiTypes = { + DeviceModelDataSource: Symbol.for("DeviceModelDataSource"), +}; diff --git a/packages/core/src/internal/device-model/di/deviceModelModule.test.ts b/packages/core/src/internal/device-model/di/deviceModelModule.test.ts new file mode 100644 index 000000000..9e876f14b --- /dev/null +++ b/packages/core/src/internal/device-model/di/deviceModelModule.test.ts @@ -0,0 +1,27 @@ +import { Container } from "inversify"; + +import { StaticDeviceModelDataSource } from "@internal/device-model/data/StaticDeviceModelDataSource"; + +import { deviceModelDiTypes } from "./deviceModelDiTypes"; +import { deviceModelModuleFactory } from "./deviceModelModule"; + +describe("deviceModelModuleFactory", () => { + let container: Container; + let mod: ReturnType; + beforeEach(() => { + mod = deviceModelModuleFactory(); + container = new Container(); + container.load(mod); + }); + + it("should return the device module", () => { + expect(mod).toBeDefined(); + }); + + it("should return none mocked services and data sources", () => { + const deviceModelDataSource = container.get( + deviceModelDiTypes.DeviceModelDataSource, + ); + expect(deviceModelDataSource).toBeInstanceOf(StaticDeviceModelDataSource); + }); +}); diff --git a/packages/core/src/internal/device-model/di/deviceModelModule.ts b/packages/core/src/internal/device-model/di/deviceModelModule.ts new file mode 100644 index 000000000..df34df645 --- /dev/null +++ b/packages/core/src/internal/device-model/di/deviceModelModule.ts @@ -0,0 +1,23 @@ +import { ContainerModule } from "inversify"; + +import { StaticDeviceModelDataSource } from "@internal/device-model/data/StaticDeviceModelDataSource"; + +import { deviceModelDiTypes } from "./deviceModelDiTypes"; + +type FactoryProps = { + stub: boolean; +}; + +export const deviceModelModuleFactory = ({ + stub = false, +}: Partial = {}) => + new ContainerModule((bind, _unbind, _isBound, _rebind) => { + bind(deviceModelDiTypes.DeviceModelDataSource).to( + StaticDeviceModelDataSource, + ); + + if (stub) { + // We can rebind our interfaces to their mock implementations + // rebind(...).to(....); + } + }); diff --git a/packages/core/src/internal/device-model/model/DeviceModel.stub.ts b/packages/core/src/internal/device-model/model/DeviceModel.stub.ts new file mode 100644 index 000000000..ca3501e7b --- /dev/null +++ b/packages/core/src/internal/device-model/model/DeviceModel.stub.ts @@ -0,0 +1,25 @@ +import { DeviceModel, DeviceModelId } from "./DeviceModel"; + +export function deviceModelStubBuilder( + props: Partial = {}, +): DeviceModel { + return { + id: DeviceModelId.NANO_X, + productName: "Ledger Nano X", + usbProductId: 0x40, + legacyUsbProductId: 0x0004, + usbOnly: false, + memorySize: 2 * 1024 * 1024, + masks: [0x33000000], + bluetoothSpec: [ + { + serviceUuid: "13d63400-2c97-0004-0000-4c6564676572", + notifyUuid: "13d63400-2c97-0004-0001-4c6564676572", + writeUuid: "13d63400-2c97-0004-0002-4c6564676572", + writeCmdUuid: "13d63400-2c97-0004-0003-4c6564676572", + }, + ], + getBlockSize: () => 4 * 1024, + ...props, + }; +} diff --git a/packages/core/src/internal/device-model/model/DeviceModel.test.ts b/packages/core/src/internal/device-model/model/DeviceModel.test.ts new file mode 100644 index 000000000..0fa7f5b06 --- /dev/null +++ b/packages/core/src/internal/device-model/model/DeviceModel.test.ts @@ -0,0 +1,57 @@ +import { DeviceModel, DeviceModelId } from "./DeviceModel"; +import { deviceModelStubBuilder } from "./DeviceModel.stub"; + +describe("DeviceModel", () => { + let stubDeviceModel: DeviceModel; + + beforeAll(() => { + stubDeviceModel = deviceModelStubBuilder(); + }); + + test("should return the correct block size for Nano X", () => { + const deviceModel = new DeviceModel(stubDeviceModel); + const firmwareVersion = "2.0.0"; + + expect(deviceModel.getBlockSize(firmwareVersion)).toBe(4 * 1024); + }); + + test("should return the correct block size for Stax", () => { + const deviceModel = new DeviceModel({ + ...stubDeviceModel, + id: DeviceModelId.STAX, + }); + const firmwareVersion = "2.0.0"; + + expect(deviceModel.getBlockSize(firmwareVersion)).toBe(32); + }); + + test("should return the correct block size for Nano SP", () => { + const deviceModel = new DeviceModel({ + ...stubDeviceModel, + id: DeviceModelId.NANO_SP, + }); + const firmwareVersion = "2.0.0"; + + expect(deviceModel.getBlockSize(firmwareVersion)).toBe(32); + }); + + test("should return the correct block size for Nano S with version lower than 2.0.0", () => { + const deviceModel = new DeviceModel({ + ...stubDeviceModel, + id: DeviceModelId.NANO_S, + }); + const firmwareVersion = "1.0.0"; + + expect(deviceModel.getBlockSize(firmwareVersion)).toBe(4 * 1024); + }); + + test("should return the correct block size for Nano S with version 2.0.0", () => { + const deviceModel = new DeviceModel({ + ...stubDeviceModel, + id: DeviceModelId.NANO_S, + }); + const firmwareVersion = "2.0.0"; + + expect(deviceModel.getBlockSize(firmwareVersion)).toBe(2 * 1024); + }); +}); diff --git a/packages/core/src/internal/device-model/model/DeviceModel.ts b/packages/core/src/internal/device-model/model/DeviceModel.ts new file mode 100644 index 000000000..11f365d90 --- /dev/null +++ b/packages/core/src/internal/device-model/model/DeviceModel.ts @@ -0,0 +1,70 @@ +import semver from "semver"; + +export type DeviceId = string; + +export enum DeviceModelId { + NANO_S = "nanoS", + NANO_SP = "nanoSP", + NANO_X = "nanoX", + STAX = "stax", +} + +/** + * Represents the info of a device model + */ +export class DeviceModel { + id: DeviceModelId; + productName: string; + usbProductId: number; + legacyUsbProductId: number; + usbOnly: boolean; + memorySize: number; + masks: number[]; + bluetoothSpec?: { + serviceUuid: string; + writeUuid: string; + writeCmdUuid: string; + notifyUuid: string; + }[]; + + constructor(props: { + id: DeviceModelId; + productName: string; + usbProductId: number; + legacyUsbProductId: number; + usbOnly: boolean; + memorySize: number; + masks: number[]; + + bluetoothSpec?: { + serviceUuid: string; + writeUuid: string; + writeCmdUuid: string; + notifyUuid: string; + }[]; + }) { + this.id = props.id; + this.productName = props.productName; + this.usbProductId = props.usbProductId; + this.legacyUsbProductId = props.legacyUsbProductId; + this.usbOnly = props.usbOnly; + this.memorySize = props.memorySize; + this.masks = props.masks; + this.bluetoothSpec = props.bluetoothSpec; + } + + getBlockSize(firmwareVersion: string): number { + switch (this.id) { + case DeviceModelId.NANO_S: + return semver.lt(semver.coerce(firmwareVersion) ?? "", "2.0.0") + ? 4 * 1024 + : 2 * 1024; + case DeviceModelId.NANO_SP: + return 32; + case DeviceModelId.NANO_X: + return 4 * 1024; + case DeviceModelId.STAX: + return 32; + } + } +} diff --git a/packages/core/src/internal/discovery/di/discoveryDiTypes.ts b/packages/core/src/internal/discovery/di/discoveryDiTypes.ts new file mode 100644 index 000000000..2168a339f --- /dev/null +++ b/packages/core/src/internal/discovery/di/discoveryDiTypes.ts @@ -0,0 +1,5 @@ +export const discoveryDiTypes = { + StartDiscoveringUseCase: Symbol.for("StartDiscoveringUseCase"), + StopDiscoveringUseCase: Symbol.for("StopDiscoveringUseCase"), + ConnectUseCase: Symbol.for("ConnectUseCase"), +}; diff --git a/packages/core/src/internal/discovery/di/discoveryModule.test.ts b/packages/core/src/internal/discovery/di/discoveryModule.test.ts new file mode 100644 index 000000000..016a9530a --- /dev/null +++ b/packages/core/src/internal/discovery/di/discoveryModule.test.ts @@ -0,0 +1,44 @@ +import { Container } from "inversify"; + +import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelModule"; +import { ConnectUseCase } from "@internal/discovery/use-case/ConnectUseCase"; +import { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; +import { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; +import { usbModuleFactory } from "@internal/usb/di/usbModule"; + +import { discoveryDiTypes } from "./discoveryDiTypes"; +import { discoveryModuleFactory } from "./discoveryModule"; + +describe("discoveryModuleFactory", () => { + let container: Container; + let mod: ReturnType; + beforeEach(() => { + mod = discoveryModuleFactory(); + container = new Container(); + container.load( + mod, + // The following modules are injected into discovery module + usbModuleFactory(), + deviceModelModuleFactory(), + ); + }); + + it("should return the device module", () => { + expect(mod).toBeDefined(); + }); + + it("should return none mocked use cases", () => { + const startDiscoveringUseCase = container.get( + discoveryDiTypes.StartDiscoveringUseCase, + ); + expect(startDiscoveringUseCase).toBeInstanceOf(StartDiscoveringUseCase); + + const stopDiscoveringUseCase = container.get( + discoveryDiTypes.StopDiscoveringUseCase, + ); + expect(stopDiscoveringUseCase).toBeInstanceOf(StopDiscoveringUseCase); + + const connectUseCase = container.get(discoveryDiTypes.ConnectUseCase); + expect(connectUseCase).toBeInstanceOf(ConnectUseCase); + }); +}); diff --git a/packages/core/src/internal/discovery/di/discoveryModule.ts b/packages/core/src/internal/discovery/di/discoveryModule.ts new file mode 100644 index 000000000..841eaf61c --- /dev/null +++ b/packages/core/src/internal/discovery/di/discoveryModule.ts @@ -0,0 +1,25 @@ +import { ContainerModule } from "inversify"; + +import { ConnectUseCase } from "@internal/discovery/use-case/ConnectUseCase"; +import { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; +import { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; + +import { discoveryDiTypes } from "./discoveryDiTypes"; + +type FactoryProps = { + stub: boolean; +}; + +export const discoveryModuleFactory = ({ + stub = false, +}: Partial = {}) => + new ContainerModule((bind, _unbind, _isBound, _rebind) => { + bind(discoveryDiTypes.StartDiscoveringUseCase).to(StartDiscoveringUseCase); + bind(discoveryDiTypes.StopDiscoveringUseCase).to(StopDiscoveringUseCase); + bind(discoveryDiTypes.ConnectUseCase).to(ConnectUseCase); + + if (stub) { + // We can rebind our interfaces to their mock implementations + // rebind(...).to(....); + } + }); diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts new file mode 100644 index 000000000..6a040aadb --- /dev/null +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts @@ -0,0 +1,64 @@ +import { Left, Right } from "purify-ts"; + +import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; +import { DeviceModel } from "@internal/device-model/model/DeviceModel"; +import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; +import { UnknownDeviceError } from "@internal/usb/model/Errors"; +import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; + +import { ConnectUseCase } from "./ConnectUseCase"; + +let transport: WebUsbHidTransport; + +describe("ConnectUseCase", () => { + const stubConnectedDevice: ConnectedDevice = { + id: "", + deviceModel: {} as DeviceModel, + }; + + beforeAll(() => { + transport = new WebUsbHidTransport({} as DeviceModelDataSource); + }); + + afterAll(() => { + jest.restoreAllMocks(); + }); + + test("If connect use case encounter an error, return it", (done) => { + jest.spyOn(transport, "connect").mockImplementation(() => { + return Promise.resolve(Left(new UnknownDeviceError())); + }); + const usecase = new ConnectUseCase(transport); + + const connect = usecase.execute({ deviceId: "" }); + + connect.subscribe({ + next: (connectedDevice) => { + done(connectedDevice); + }, + error: (error) => { + expect(error).toBeInstanceOf(UnknownDeviceError); + done(); + }, + }); + }); + + test("If connect is in success, return an observable connected device object", (done) => { + jest.spyOn(transport, "connect").mockImplementation(() => { + return Promise.resolve(Right(stubConnectedDevice)); + }); + const usecase = new ConnectUseCase(transport); + + const connect = usecase.execute({ deviceId: "" }); + + connect.subscribe({ + next: (connectedDevice) => { + expect(connectedDevice).toBe(stubConnectedDevice); + done(); + }, + error: (error) => { + done(error); + }, + }); + }); +}); diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts new file mode 100644 index 000000000..64cc98f62 --- /dev/null +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -0,0 +1,38 @@ +import { inject, injectable } from "inversify"; +import { from, Observable, of, switchMap } from "rxjs"; + +import { DeviceId } from "@internal/device-model/model/DeviceModel"; +import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; +import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; +import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; + +export type ConnectUseCaseArgs = { + deviceId: DeviceId; +}; + +/** + * Connects to a discovered device via USB HID (and later BLE). + */ +@injectable() +export class ConnectUseCase { + constructor( + @inject(usbDiTypes.UsbHidTransport) + private usbHidTransport: UsbHidTransport, + // Later: @inject(usbDiTypes.BleTransport) private bleTransport: BleTransport, + ) {} + + execute({ deviceId }: ConnectUseCaseArgs): Observable { + return from(this.usbHidTransport.connect({ deviceId })).pipe( + switchMap((either) => { + return either.caseOf({ + Left: (error) => { + throw error; + }, + Right: (connectedDevice) => { + return of(connectedDevice); + }, + }); + }), + ); + } +} diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts new file mode 100644 index 000000000..030363c12 --- /dev/null +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts @@ -0,0 +1,48 @@ +import { of } from "rxjs"; + +import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; +import { DeviceModel } from "@internal/device-model/model/DeviceModel"; +import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; +import { DiscoveredDevice } from "@root/src"; + +import { StartDiscoveringUseCase } from "./StartDiscoveringUseCase"; + +let transport: WebUsbHidTransport; + +describe("StartDiscoveringUseCase", () => { + const stubDiscoveredDevice: DiscoveredDevice = { + id: "", + deviceModel: {} as DeviceModel, + }; + + beforeEach(() => { + transport = new WebUsbHidTransport({} as DeviceModelDataSource); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + test("If connect use case encounter an error, return it", (done) => { + const mockedStartDiscovering = jest.fn(() => { + return of(stubDiscoveredDevice); + }); + jest + .spyOn(transport, "startDiscovering") + .mockImplementation(mockedStartDiscovering); + const usecase = new StartDiscoveringUseCase(transport); + + const discover = usecase.execute(); + + expect(mockedStartDiscovering).toHaveBeenCalled(); + discover.subscribe({ + next: (discoveredDevice) => { + expect(discoveredDevice).toBe(stubDiscoveredDevice); + done(); + }, + error: (error) => { + done(error); + }, + }); + }); +}); diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts new file mode 100644 index 000000000..85c2e9bd8 --- /dev/null +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts @@ -0,0 +1,24 @@ +import { inject, injectable } from "inversify"; +import { Observable } from "rxjs"; + +import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; +import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; +import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; + +/** + * Starts discovering devices connected via USB HID (and later BLE). + * + * For the WebHID implementation, this use-case needs to be called as a result of an user interaction (button "click" event for ex). + */ +@injectable() +export class StartDiscoveringUseCase { + constructor( + @inject(usbDiTypes.UsbHidTransport) + private usbHidTransport: UsbHidTransport, + // Later: @inject(usbDiTypes.BleTransport) private bleTransport: BleTransport, + ) {} + + execute(): Observable { + return this.usbHidTransport.startDiscovering(); + } +} diff --git a/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts new file mode 100644 index 000000000..9cfc058e3 --- /dev/null +++ b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts @@ -0,0 +1,28 @@ +import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; +import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; + +import { StopDiscoveringUseCase } from "./StopDiscoveringUseCase"; + +let transport: WebUsbHidTransport; + +describe("StopDiscoveringUseCase", () => { + beforeEach(() => { + transport = new WebUsbHidTransport({} as DeviceModelDataSource); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + test("should call stop discovering", () => { + const mockedStopDiscovering = jest.fn(); + jest + .spyOn(transport, "stopDiscovering") + .mockImplementation(mockedStopDiscovering); + const usecase = new StopDiscoveringUseCase(transport); + + usecase.execute(); + + expect(mockedStopDiscovering).toHaveBeenCalled(); + }); +}); diff --git a/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.ts b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.ts new file mode 100644 index 000000000..56e30c29a --- /dev/null +++ b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.ts @@ -0,0 +1,20 @@ +import { inject, injectable } from "inversify"; + +import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; +import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; + +/** + * Stops discovering devices connected via USB HID (and later BLE). + */ +@injectable() +export class StopDiscoveringUseCase { + constructor( + @inject(usbDiTypes.UsbHidTransport) + private usbHidTransport: UsbHidTransport, + // Later: @inject(usbDiTypes.BleTransport) private bleTransport: BleTransport, + ) {} + + execute(): void { + return this.usbHidTransport.stopDiscovering(); + } +} diff --git a/packages/core/src/internal/usb/data/UsbHidConfig.ts b/packages/core/src/internal/usb/data/UsbHidConfig.ts new file mode 100644 index 000000000..bd56c7d3b --- /dev/null +++ b/packages/core/src/internal/usb/data/UsbHidConfig.ts @@ -0,0 +1,2 @@ +// [SHOULD] Move it to device-model module +export const ledgerVendorId = 0x2c97; diff --git a/packages/core/src/internal/usb/di/usbDiTypes.ts b/packages/core/src/internal/usb/di/usbDiTypes.ts new file mode 100644 index 000000000..aea94a6d1 --- /dev/null +++ b/packages/core/src/internal/usb/di/usbDiTypes.ts @@ -0,0 +1,3 @@ +export const usbDiTypes = { + UsbHidTransport: Symbol.for("UsbHidTransport"), +}; diff --git a/packages/core/src/internal/usb/di/usbModule.test.ts b/packages/core/src/internal/usb/di/usbModule.test.ts new file mode 100644 index 000000000..a26e2433c --- /dev/null +++ b/packages/core/src/internal/usb/di/usbModule.test.ts @@ -0,0 +1,26 @@ +import { Container } from "inversify"; + +import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelModule"; +import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; + +import { usbDiTypes } from "./usbDiTypes"; +import { usbModuleFactory } from "./usbModule"; + +describe("usbModuleFactory", () => { + let container: Container; + let mod: ReturnType; + beforeEach(() => { + mod = usbModuleFactory(); + container = new Container(); + container.load(mod, deviceModelModuleFactory()); + }); + + it("should return the usb module", () => { + expect(mod).toBeDefined(); + }); + + it("should return none mocked transports", () => { + const usbHidTransport = container.get(usbDiTypes.UsbHidTransport); + expect(usbHidTransport).toBeInstanceOf(WebUsbHidTransport); + }); +}); diff --git a/packages/core/src/internal/usb/di/usbModule.ts b/packages/core/src/internal/usb/di/usbModule.ts new file mode 100644 index 000000000..498a18075 --- /dev/null +++ b/packages/core/src/internal/usb/di/usbModule.ts @@ -0,0 +1,22 @@ +import { ContainerModule } from "inversify"; + +import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; + +import { usbDiTypes } from "./usbDiTypes"; + +type FactoryProps = { + stub: boolean; +}; + +export const usbModuleFactory = ({ + stub = false, +}: Partial = {}) => + new ContainerModule((bind, _unbind, _isBound, _rebind) => { + // The transport needs to be a singleton to keep the internal states of the devices + bind(usbDiTypes.UsbHidTransport).to(WebUsbHidTransport).inSingletonScope(); + + if (stub) { + // We can rebind our interfaces to their mock implementations + // rebind(...).to(....); + } + }); diff --git a/packages/core/src/internal/usb/model/ConnectedDevice.ts b/packages/core/src/internal/usb/model/ConnectedDevice.ts new file mode 100644 index 000000000..76673023c --- /dev/null +++ b/packages/core/src/internal/usb/model/ConnectedDevice.ts @@ -0,0 +1,12 @@ +import { + DeviceId, + DeviceModel, +} from "@internal/device-model/model/DeviceModel"; + +/** + * Represents a connected device. + */ +export type ConnectedDevice = { + id: DeviceId; // UUID to map with the associated transport device + deviceModel: DeviceModel; +}; diff --git a/packages/core/src/internal/usb/model/DiscoveredDevice.ts b/packages/core/src/internal/usb/model/DiscoveredDevice.ts new file mode 100644 index 000000000..b17a970c9 --- /dev/null +++ b/packages/core/src/internal/usb/model/DiscoveredDevice.ts @@ -0,0 +1,13 @@ +import { + DeviceId, + DeviceModel, +} from "@internal/device-model/model/DeviceModel"; + +/** + * Represents a discovered/scanned (not yet connected to) device. + */ +export type DiscoveredDevice = { + // type: "web-hid", // "node-hid" in the future -> no need as we will only have 1 USB transport implementation running + id: DeviceId; // UUID to map with the associated transport device + deviceModel: DeviceModel; +}; diff --git a/packages/core/src/internal/usb/model/Errors.ts b/packages/core/src/internal/usb/model/Errors.ts new file mode 100644 index 000000000..ee0c0958f --- /dev/null +++ b/packages/core/src/internal/usb/model/Errors.ts @@ -0,0 +1,45 @@ +export type PromptDeviceAccessError = + | UsbHidTransportNotSupportedError + | NoAccessibleDeviceError; + +export type ConnectError = UnknownDeviceError | OpeningConnectionError; + +export class DeviceNotRecognizedError { + readonly _tag = "DeviceNotRecognizedError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export class NoAccessibleDeviceError { + readonly _tag = "NoAccessibleDeviceError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export class OpeningConnectionError { + readonly _tag = "ConnectionOpeningError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export class UnknownDeviceError { + readonly _tag = "UnknownDeviceError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export class UsbHidTransportNotSupportedError { + readonly _tag = "UsbHidTransportNotSupportedError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} diff --git a/packages/core/src/internal/usb/transport/UsbHidTransport.ts b/packages/core/src/internal/usb/transport/UsbHidTransport.ts new file mode 100644 index 000000000..e89e8e5ab --- /dev/null +++ b/packages/core/src/internal/usb/transport/UsbHidTransport.ts @@ -0,0 +1,28 @@ +import { Either } from "purify-ts"; +import { Observable } from "rxjs"; + +import { DeviceId } from "@internal/device-model/model/DeviceModel"; +import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; +import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; +import { ConnectError } from "@internal/usb/model/Errors"; + +/** + * Transport interface representing a USB HID communication + */ +export interface UsbHidTransport { + isSupported(): boolean; + + startDiscovering(): Observable; + + stopDiscovering(): void; + + /** + * Enables communication with the device by connecting to it. + * + * @param params containing + * - id: the device id from the DTO discovered device + */ + connect(params: { + deviceId: DeviceId; + }): Promise>; +} diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts new file mode 100644 index 000000000..b94467f30 --- /dev/null +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -0,0 +1,365 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +import { Left } from "purify-ts"; + +import { StaticDeviceModelDataSource } from "@internal/device-model/data/StaticDeviceModelDataSource"; +import { DeviceModelId } from "@internal/device-model/model/DeviceModel"; +import { + DeviceNotRecognizedError, + NoAccessibleDeviceError, + OpeningConnectionError, + UnknownDeviceError, + UsbHidTransportNotSupportedError, +} from "@internal/usb/model/Errors"; + +import { WebUsbHidTransport } from "./WebUsbHidTransport"; + +// Our StaticDeviceModelDataSource can directly be used in our unit tests +const usbDeviceModelDataSource = new StaticDeviceModelDataSource(); +const stubDevice = { + opened: false, + productId: 0x4011, + vendorId: 0x2c97, + productName: "Ledger Nano X", + collections: [], + open: jest.fn(), +}; + +describe("WebUsbHidTransport", () => { + describe("When WebHID API is not supported", () => { + test("isSupported should return false", () => { + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + expect(transport.isSupported()).toBe(false); + }); + + test("startDiscovering should emit an error", (done) => { + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + transport.startDiscovering().subscribe({ + next: () => { + done("Should not emit any value"); + }, + error: (error) => { + expect(error).toBeInstanceOf(UsbHidTransportNotSupportedError); + done(); + }, + }); + }); + }); + + describe("When WebHID API is supported", () => { + const mockedGetDevices = jest.fn(); + const mockedRequestDevice = jest.fn(); + + beforeAll(() => { + global.navigator = { + hid: { + getDevices: mockedGetDevices, + requestDevice: mockedRequestDevice, + addEventListener: jest.fn(), + }, + } as any; + }); + + afterAll(() => { + jest.restoreAllMocks(); + global.navigator = undefined as any; + }); + + it("isSupported should return true", () => { + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + expect(transport.isSupported()).toBe(true); + }); + + describe("startDiscovering", () => { + test("If the user grant us access to a device, we should emit it", (done) => { + mockedRequestDevice.mockResolvedValueOnce([stubDevice]); + + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + transport.startDiscovering().subscribe({ + next: (discoveredDevice) => { + try { + expect(discoveredDevice).toEqual( + expect.objectContaining({ + deviceModel: expect.objectContaining({ + id: DeviceModelId.NANO_X, + productName: "Ledger Nano X", + usbProductId: 0x40, + }), + }), + ); + + done(); + } catch (expectError) { + done(expectError); + } + }, + error: (error) => { + done(error); + }, + }); + }); + + // It does not seem possible for a user to select several devices on the browser popup. + // But if it was possible, we should emit them + test("If the user grant us access to several devices, we should emit them", (done) => { + mockedRequestDevice.mockResolvedValueOnce([ + stubDevice, + { + ...stubDevice, + productId: 0x5011, + productName: "Ledger Nano S Plus", + }, + ]); + + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + + let count = 0; + transport.startDiscovering().subscribe({ + next: (discoveredDevice) => { + console.log("🦄 discoveredDevice", discoveredDevice); + try { + switch (count) { + case 0: + expect(discoveredDevice).toEqual( + expect.objectContaining({ + deviceModel: expect.objectContaining({ + id: DeviceModelId.NANO_X, + productName: "Ledger Nano X", + usbProductId: 0x40, + }), + }), + ); + break; + case 1: + expect(discoveredDevice).toEqual( + expect.objectContaining({ + deviceModel: expect.objectContaining({ + id: DeviceModelId.NANO_SP, + productName: "Ledger Nano S Plus", + usbProductId: 0x50, + }), + }), + ); + + done(); + break; + } + + count++; + } catch (expectError) { + done(expectError); + } + }, + error: (error) => { + done(error); + }, + }); + }); + + test("If the device is not recognized, we should throw a DeviceNotRecognizedError", (done) => { + mockedRequestDevice.mockResolvedValueOnce([ + { + ...stubDevice, + productId: 0x4242, + }, + ]); + + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + transport.startDiscovering().subscribe({ + next: () => { + done("should not return a device"); + }, + error: (error) => { + expect(error).toBeInstanceOf(DeviceNotRecognizedError); + done(); + }, + }); + }); + + test("If the request device is in error, we should return it", (done) => { + const message = "request device error"; + mockedRequestDevice.mockImplementationOnce(() => { + throw new Error(message); + }); + + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + transport.startDiscovering().subscribe({ + next: () => { + done("should not return a device"); + }, + error: (error) => { + expect(error).toBeInstanceOf(NoAccessibleDeviceError); + expect(error).toStrictEqual( + new NoAccessibleDeviceError(new Error(message)), + ); + done(); + }, + }); + }); + + // [ASK] Is this the behavior we want when the user does not select any device ? + test("If the user did not grant us access to a device (clicking on cancel on the browser popup for ex), we should emit an error", (done) => { + // When the user does not select any device, the `requestDevice` will return an empty array + mockedRequestDevice.mockResolvedValueOnce([]); + + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + transport.startDiscovering().subscribe({ + next: (discoveredDevice) => { + done( + `Should not emit any value, but emitted ${JSON.stringify( + discoveredDevice, + )}`, + ); + }, + error: (error) => { + try { + expect(error).toBeInstanceOf(NoAccessibleDeviceError); + done(); + } catch (expectError) { + done(expectError); + } + }, + }); + }); + }); + + describe("stopDiscovering", () => { + test("If the discovery process is halted, we should stop monitoring connections.", () => { + const abortSpy = jest.spyOn(AbortController.prototype, "abort"); + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + + transport.stopDiscovering(); + + expect(abortSpy).toHaveBeenCalled(); + }); + }); + + // [SHOULD] Unit tests connect + // eslint-disable-next-line @typescript-eslint/no-empty-function + describe("connect", () => { + test("If no internal device, should throw UnknownDeviceError", async () => { + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const device = { deviceId: "fake" }; + + const connect = await transport.connect(device); + + expect(connect).toStrictEqual( + Left(new UnknownDeviceError(new Error("Unknown device fake"))), + ); + }); + + test("If the device is already opened, should throw OpeningConnectionError", async () => { + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const device = { deviceId: "fake" }; + + const connect = await transport.connect(device); + + expect(connect).toStrictEqual( + Left(new UnknownDeviceError(new Error("Unknown device fake"))), + ); + }); + + test("If the device cannot be opened, should throw OpeningConnexionError", (done) => { + const message = "cannot be opened"; + mockedRequestDevice.mockResolvedValueOnce([ + { + ...stubDevice, + open: () => { + throw new Error(message); + }, + }, + ]); + + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + transport.startDiscovering().subscribe({ + next: (discoveredDevice) => { + transport + .connect({ deviceId: discoveredDevice.id }) + .then((value) => { + expect(value).toStrictEqual( + Left(new OpeningConnectionError(new Error(message))), + ); + done(); + }) + .catch((error) => { + done(error); + }); + }, + error: (error) => { + done(error); + }, + }); + }); + + test("If the device is already opened, return it", (done) => { + mockedRequestDevice.mockResolvedValueOnce([ + { + ...stubDevice, + opened: true, + open: () => { + throw new DOMException("already opened", "InvalidStateError"); + }, + }, + ]); + + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + + transport.startDiscovering().subscribe({ + next: (discoveredDevice) => { + transport + .connect({ deviceId: discoveredDevice.id }) + .then((connectedDevice) => { + connectedDevice + .ifRight((device) => { + expect(device).toEqual( + expect.objectContaining({ id: discoveredDevice.id }), + ); + done(); + }) + .ifLeft(() => { + done(connectedDevice); + }); + }) + .catch((error) => { + done(error); + }); + }, + error: (error) => { + done(error); + }, + }); + }); + + test("If the device is available, return it", (done) => { + mockedRequestDevice.mockResolvedValueOnce([stubDevice]); + + const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + + transport.startDiscovering().subscribe({ + next: (discoveredDevice) => { + transport + .connect({ deviceId: discoveredDevice.id }) + .then((connectedDevice) => { + connectedDevice + .ifRight((device) => { + expect(device).toEqual( + expect.objectContaining({ id: discoveredDevice.id }), + ); + done(); + }) + .ifLeft(() => { + done(connectedDevice); + }); + }) + .catch((error) => { + done(error); + }); + }, + error: (error) => { + done(error); + }, + }); + }); + }); + }); +}); diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts new file mode 100644 index 000000000..1bb9ef2c8 --- /dev/null +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -0,0 +1,281 @@ +import { inject, injectable } from "inversify"; +import { Either, EitherAsync, Left, Right } from "purify-ts"; +import { from, Observable, switchMap } from "rxjs"; +import { v4 as uuid } from "uuid"; + +import type { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; +import { deviceModelDiTypes } from "@internal/device-model/di/deviceModelDiTypes"; +import { DeviceId } from "@internal/device-model/model/DeviceModel"; +import { ledgerVendorId } from "@internal/usb/data/UsbHidConfig"; +import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; +import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; +import { + ConnectError, + DeviceNotRecognizedError, + NoAccessibleDeviceError, + OpeningConnectionError, + type PromptDeviceAccessError, + UnknownDeviceError, + UsbHidTransportNotSupportedError, +} from "@internal/usb/model/Errors"; + +import { UsbHidTransport } from "./UsbHidTransport"; + +// An attempt to manage the state of several devices with one transport. Not final. +type WebHidInternalDevice = { + id: DeviceId; + hidDevice: HIDDevice; + discoveredDevice: DiscoveredDevice; + connectedDevice?: ConnectedDevice; +}; + +@injectable() +export class WebUsbHidTransport implements UsbHidTransport { + // Maps uncoupled DiscoveredDevice and WebHID's HIDDevice WebHID + private internalDevicesById: Map; + + private connectionListenersAbortController: AbortController; + + constructor( + @inject(deviceModelDiTypes.DeviceModelDataSource) + private deviceModelDataSource: DeviceModelDataSource, + ) { + this.internalDevicesById = new Map(); + this.connectionListenersAbortController = new AbortController(); + } + + /** + * @returns `Either` an error if the WebHID API is not supported, or the WebHID API itself + */ + private hidApi = (): Either => { + if (this.isSupported()) { + return Right(navigator.hid); + } + + return Left( + new UsbHidTransportNotSupportedError(new Error("WebHID not supported")), + ); + }; + + isSupported(): boolean { + try { + const result = !!navigator?.hid; + console.log(`isSupported: ${result}`); + return result; + } catch (error) { + console.error(`isSupported: error`, error); + return false; + } + } + + /** + * Currently: as there is no way to uniquely identify a device, we might need to always update the internal mapping + * of devices when prompting for device access. + * + * Also, we cannot trust hidApi.getDevices() as 2 devices of the same models (even on the same USB port) will be recognized + * as the same devices. + */ + // private async promptDeviceAccess(): Promise> { + private async promptDeviceAccess(): Promise< + Either + > { + return EitherAsync.liftEither(this.hidApi()) + .map(async (hidApi) => { + // `requestDevice` returns an array. but normally the user can select only one device at a time. + let hidDevices: HIDDevice[] = []; + + try { + hidDevices = await hidApi.requestDevice({ + filters: [{ vendorId: ledgerVendorId }], + }); + } catch (error) { + console.error(`promptDeviceAccess: error requesting device`, error); + throw new NoAccessibleDeviceError(error as Error); + } + + console.log("promptDeviceAccess: hidDevices len", hidDevices.length); + + // Granted access to 0 device (by clicking on cancel for ex) results in an error + if (hidDevices.length === 0) { + console.warn("No device was selected"); + throw new NoAccessibleDeviceError(new Error("No selected device")); + } + + const discoveredHidDevices: HIDDevice[] = []; + + for (const hidDevice of hidDevices) { + discoveredHidDevices.push(hidDevice); + + console.log(`promptDeviceAccess: selected device`, hidDevice); + } + + return discoveredHidDevices; + }) + .run(); + } + + /** + * For WebHID, the client can only discover devices for which the user granted access to. + * + * The issue is that once a user grant access to a device of a model/productId A, any other model/productId A device will be accessible. + * Even if plugged on another USB port. + * So we cannot rely on the `hid.getDevices` to get the list of accessible devices, because it is not possible to differentiate + * between 2 devices of the same model. + * Neither on `connect` and `disconnect` events. + * We can only rely on the `hid.requestDevice` because it is the user who will select the device that we can access. + * + * 2 possible implementations: + * - only `hid.requestDevice` and return the one selected device + * - `hid.getDevices` first to get the previously accessible devices, then a `hid.requestDevice` to get any new one + * + * [ASK] Should we also subscribe to hid events `connect` and `disconnect` ? + * + * [ASK] For the 2nd option: the DiscoveredDevice could have a `isSelected` property ? + * So the consumer can directly select this device. + */ + startDiscovering(): Observable { + console.log("startDiscovering"); + + // Logs the connection and disconnection events + this.startListeningToConnectionEvents(); + + // There is no unique identifier for the device from the USB/HID connection, + // so the previously known accessible devices list cannot be trusted. + this.internalDevicesById.clear(); + + return from(this.promptDeviceAccess()).pipe( + switchMap((either) => { + return either.caseOf({ + Left: (error) => { + console.error("Error while getting accessible device", error); + throw error; + }, + Right: (hidDevices) => { + console.log(`Got access to ${hidDevices.length} HID devices:`); + + const discoveredDevices = hidDevices.map((hidDevice) => { + const usbProductId = this.getHidUsbProductId(hidDevice.productId); + const deviceModels = + this.deviceModelDataSource.filterDeviceModels({ usbProductId }); + + if (deviceModels.length === 1 && deviceModels[0]) { + const id = uuid(); + + const discoveredDevice = { + id, + deviceModel: deviceModels[0], + }; + + const internalDevice: WebHidInternalDevice = { + id, + hidDevice, + discoveredDevice, + }; + + console.log( + `Discovered device ${id} ${discoveredDevice.deviceModel.productName}`, + ); + this.internalDevicesById.set(id, internalDevice); + + return discoveredDevice; + } else { + // [ASK] Or we just ignore the not recognized device ? And log them + console.warn( + `Device not recognized: 0x${usbProductId.toString(16)}`, + ); + throw new DeviceNotRecognizedError( + new Error( + `Device not recognized: 0x${usbProductId.toString(16)}`, + ), + ); + } + }); + return from(discoveredDevices); + }, + }); + }), + ); + } + + stopDiscovering(): void { + console.log("stopDiscovering"); + + this.stopListeningToConnectionEvents(); + } + + /** + * Logs `connect` and `disconnect` events for already accessible devices + */ + private startListeningToConnectionEvents(): void { + console.log("startListeningToConnectionEvents"); + + this.hidApi().map((hidApi) => { + hidApi.addEventListener( + "connect", + (event) => { + console.log("connection event", event); + }, + { signal: this.connectionListenersAbortController.signal }, + ); + + hidApi.addEventListener( + "disconnect", + (event) => { + console.log("disconnect event", event); + }, + { signal: this.connectionListenersAbortController.signal }, + ); + }); + } + + private stopListeningToConnectionEvents(): void { + console.log("stopListeningToConnectionEvents"); + this.connectionListenersAbortController.abort(); + } + + /** + * Connect to a HID USB device and update the internal state of the associated device + */ + async connect({ + deviceId, + }: { + deviceId: DeviceId; + }): Promise> { + console.log("connect", { deviceId }); + + const internalDevice = this.internalDevicesById.get(deviceId); + + if (!internalDevice) { + console.error(`Unknown device ${deviceId}`); + return Left( + new UnknownDeviceError(new Error(`Unknown device ${deviceId}`)), + ); + } + + try { + await internalDevice.hidDevice.open(); + } catch (error) { + if (error instanceof DOMException && error.name === "InvalidStateError") { + console.info(`Device ${deviceId} is already opened`); + } else { + console.error(`Error while opening device: ${deviceId}`, error); + return Left(new OpeningConnectionError(error as Error)); + } + } + + internalDevice.connectedDevice = { + id: deviceId, + deviceModel: internalDevice.discoveredDevice.deviceModel, + }; + + // TODO: return a device session USB + return Right(internalDevice.connectedDevice); + } + + /** + * The USB/HID product id is represented by only the 2nd byte + */ + private getHidUsbProductId(productId: number): number { + return productId >> 8; + } +} diff --git a/packages/core/src/internal/usb/transport/__mocks__/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/__mocks__/WebUsbHidTransport.ts new file mode 100644 index 000000000..74b3391de --- /dev/null +++ b/packages/core/src/internal/usb/transport/__mocks__/WebUsbHidTransport.ts @@ -0,0 +1,20 @@ +import { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; + +export class WebUsbHidTransport implements UsbHidTransport { + isSupported = jest.fn(); + connect = jest.fn(); + startDiscovering = jest.fn(); + stopDiscovering = jest.fn(); +} + +export function usbHidTransportMockBuilder( + props: Partial = {}, +): UsbHidTransport { + return { + isSupported: jest.fn(), + startDiscovering: jest.fn(), + stopDiscovering: jest.fn(), + connect: jest.fn(), + ...props, + }; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c38440832..0d37bfefc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -168,6 +168,15 @@ importers: reflect-metadata: specifier: ^0.2.1 version: 0.2.1 + rxjs: + specifier: ^7.8.1 + version: 7.8.1 + semver: + specifier: ^7.5.4 + version: 7.5.4 + uuid: + specifier: ^9.0.1 + version: 9.0.1 devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -181,6 +190,15 @@ importers: '@ledgerhq/tsconfig-dsdk': specifier: workspace:* version: link:../config/typescript + '@types/semver': + specifier: ^7.5.6 + version: 7.5.6 + '@types/uuid': + specifier: ^9.0.8 + version: 9.0.8 + '@types/w3c-web-hid': + specifier: ^1.0.6 + version: 1.0.6 concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -1992,6 +2010,14 @@ packages: csstype: 3.1.3 dev: true + /@types/uuid@9.0.8: + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + dev: true + + /@types/w3c-web-hid@1.0.6: + resolution: {integrity: sha512-IWyssXmRDo6K7s31dxf+U+x/XUWuVsl9qUIYbJmpUHPcTv/COfBCKw/F0smI45+gPV34brjyP30BFcIsHgYWLA==} + dev: true + /@types/which@3.0.3: resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} dev: true @@ -6283,7 +6309,6 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true /lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} @@ -7455,7 +7480,6 @@ packages: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: tslib: 2.6.2 - dev: true /safe-array-concat@1.0.1: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} @@ -7511,7 +7535,6 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true /sentence-case@2.1.1: resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} @@ -8506,6 +8529,11 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: false + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true @@ -8746,7 +8774,6 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} From 77d61efec6fdd43da82c98f8a2a37a5d9ffd6f13 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 10:12:47 +0100 Subject: [PATCH 088/253] =?UTF-8?q?=E2=9A=97=EF=B8=8F=20(sample):=20Simple?= =?UTF-8?q?=20demo=20of=20device=20sdk=20usage=20in=20sample=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sample/src/components/MainView/index.tsx | 51 ++++++++++++++++++- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/apps/sample/src/components/MainView/index.tsx b/apps/sample/src/components/MainView/index.tsx index d99223db5..641333eb3 100644 --- a/apps/sample/src/components/MainView/index.tsx +++ b/apps/sample/src/components/MainView/index.tsx @@ -1,8 +1,11 @@ -import React from "react"; +import React, { useCallback, useEffect, useState } from "react"; +import type { DiscoveredDevice } from "@ledgerhq/device-sdk-core"; import { Button, Flex, Icons, Text } from "@ledgerhq/react-ui"; import Image from "next/image"; import styled, { DefaultTheme } from "styled-components"; +import { useSdk } from "@/providers/DeviceSdkProvider"; + const Root = styled(Flex)` flex-direction: column; flex: 1; @@ -41,6 +44,45 @@ const NanoLogo = styled(Image).attrs({ mb: 8 })` `; export const MainView: React.FC = () => { + const sdk = useSdk(); + const [discoveredDevice, setDiscoveredDevice] = + useState(null); + + // Example starting the discovery on a user action + const onSelectDeviceClicked = useCallback(() => { + sdk.startDiscovering().subscribe({ + next: (device) => { + console.log(`🦖 Discovered device: `, device); + setDiscoveredDevice(device); + }, + error: (error) => { + console.error(error); + }, + }); + }, [sdk]); + + useEffect(() => { + return () => { + // Example cleaning up the discovery + sdk.stopDiscovering(); + }; + }, [sdk]); + + useEffect(() => { + if (discoveredDevice) { + sdk.connect({ deviceId: discoveredDevice.id }).subscribe({ + next: (connectedDevice) => { + console.log( + `🦖 Response from connect: ${JSON.stringify(connectedDevice)} 🎉`, + ); + }, + error: (error) => { + console.error(`Error from connection or get-version`, error); + }, + }); + } + }, [sdk, discoveredDevice]); + return (
    @@ -72,7 +114,12 @@ export const MainView: React.FC = () => { Use this application to test Ledger hardware device features. - From ac368a3e12303818890781aeec87c0d3478ca7f6 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 10:13:21 +0100 Subject: [PATCH 089/253] =?UTF-8?q?=F0=9F=94=A5=20(core):=20Remove=20templ?= =?UTF-8?q?ate=20transport=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/index.ts | 1 - packages/core/src/transport/Transport.ts | 5 ----- packages/core/src/transport/ble/BleTransport.ts | 8 -------- packages/core/src/transport/ble/index.ts | 1 - packages/core/src/transport/index.ts | 3 --- packages/core/src/transport/model/Response.ts | 1 - packages/core/src/transport/model/index.ts | 1 - 7 files changed, 20 deletions(-) delete mode 100644 packages/core/src/transport/Transport.ts delete mode 100644 packages/core/src/transport/ble/BleTransport.ts delete mode 100644 packages/core/src/transport/ble/index.ts delete mode 100644 packages/core/src/transport/index.ts delete mode 100644 packages/core/src/transport/model/Response.ts delete mode 100644 packages/core/src/transport/model/index.ts diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 72b13356e..8102d6ec4 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,4 +1,3 @@ import "reflect-metadata"; export * from "./api"; -export * from "./transport"; diff --git a/packages/core/src/transport/Transport.ts b/packages/core/src/transport/Transport.ts deleted file mode 100644 index 071f1dc40..000000000 --- a/packages/core/src/transport/Transport.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Response } from "./model"; - -export interface Transport { - send(apduHex: string): Response | undefined; -} diff --git a/packages/core/src/transport/ble/BleTransport.ts b/packages/core/src/transport/ble/BleTransport.ts deleted file mode 100644 index 7512788a4..000000000 --- a/packages/core/src/transport/ble/BleTransport.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Response } from "@root/src/transport/model"; -import { Transport } from "@root/src/transport/Transport"; - -export class BleTransport implements Transport { - send(_apduHex: string): Response | undefined { - return undefined; - } -} diff --git a/packages/core/src/transport/ble/index.ts b/packages/core/src/transport/ble/index.ts deleted file mode 100644 index 78fc74e22..000000000 --- a/packages/core/src/transport/ble/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { BleTransport } from "./BleTransport"; diff --git a/packages/core/src/transport/index.ts b/packages/core/src/transport/index.ts deleted file mode 100644 index bbefb1fe2..000000000 --- a/packages/core/src/transport/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./ble"; -export * from "./model"; -export type { Transport } from "./Transport"; diff --git a/packages/core/src/transport/model/Response.ts b/packages/core/src/transport/model/Response.ts deleted file mode 100644 index 4c0b2b92a..000000000 --- a/packages/core/src/transport/model/Response.ts +++ /dev/null @@ -1 +0,0 @@ -export class Response {} diff --git a/packages/core/src/transport/model/index.ts b/packages/core/src/transport/model/index.ts deleted file mode 100644 index 2f4d82263..000000000 --- a/packages/core/src/transport/model/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Response } from "./Response"; From 8933ec19d18be65037a5e719d90a5d6dbb55552e Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 10:17:03 +0100 Subject: [PATCH 090/253] =?UTF-8?q?=F0=9F=9A=A8=20(core,lint):=20Move=20es?= =?UTF-8?q?lint=20mjs=20override=20in=20core=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit avoid lint errors in sample when using core imports --- packages/config/eslint/index.js | 37 --------------------------------- packages/core/.eslintrc.js | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index 5032fc334..38fc037f9 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -81,42 +81,5 @@ module.exports = { ], }, }, - { - files: ["**/*.mjs"], - env: { - es6: true, - node: true, - }, - globals: { - log: true, - $: true, - argv: true, - cd: true, - chalk: true, - echo: true, - expBackoff: true, - fs: true, - glob: true, - globby: true, - nothrow: true, - os: true, - path: true, - question: true, - quiet: true, - quote: true, - quotePowerShell: true, - retry: true, - sleep: true, - spinner: true, - ssh: true, - stdin: true, - which: true, - within: true, - }, - parserOptions: { - ecmaVersion: 2018, - sourceType: "module", - }, - }, ], }; diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index 134e640d6..681118d22 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -13,5 +13,42 @@ module.exports = { "@typescript-eslint/unbound-method": 0, }, }, + { + files: ["**/*.mjs"], + env: { + es6: true, + node: true, + }, + globals: { + log: true, + $: true, + argv: true, + cd: true, + chalk: true, + echo: true, + expBackoff: true, + fs: true, + glob: true, + globby: true, + nothrow: true, + os: true, + path: true, + question: true, + quiet: true, + quote: true, + quotePowerShell: true, + retry: true, + sleep: true, + spinner: true, + ssh: true, + stdin: true, + which: true, + within: true, + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: "module", + }, + }, ], }; From f488afe3ae55764a5dd75acad92f91a91fda4092 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 10:19:03 +0100 Subject: [PATCH 091/253] =?UTF-8?q?=F0=9F=94=A8=20(core):=20Remove=20src?= =?UTF-8?q?=20folder=20from=20test=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/package.json b/packages/core/package.json index 1331e56c0..dd3806d0a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -14,7 +14,7 @@ "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", - "test": "jest src", + "test": "jest", "test:watch": "pnpm test -- --watch", "test:coverage": "pnpm test -- --coverage", "typecheck": "tsc --noEmit", From fddc24332c709f309ad145d4ae22ed4208ce6f23 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 11:40:39 +0100 Subject: [PATCH 092/253] =?UTF-8?q?=F0=9F=90=9B=20(chore):=20Add=20build?= =?UTF-8?q?=20dependency=20to=20lint=20job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- turbo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/turbo.json b/turbo.json index 8269c3c03..c279a56ff 100644 --- a/turbo.json +++ b/turbo.json @@ -7,7 +7,7 @@ "inputs": ["src/**/*.ts"] }, "lint": { - "dependsOn": ["^lint"] + "dependsOn": ["build", "^lint"] }, "lint:fix": { "dependsOn": ["^lint:fix"] From 5b4e22b61cf73923202303553a9d2e0ea711e769 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 11:56:46 +0100 Subject: [PATCH 093/253] =?UTF-8?q?=F0=9F=92=9A=20(packages):=20Fix=20pret?= =?UTF-8?q?tier=20CI=20job=20by=20adding=20prettierignore=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/signer/.prettierignore | 1 + packages/trusted-apps/.prettierignore | 1 + packages/ui/.prettierignore | 1 + 3 files changed, 3 insertions(+) create mode 100644 packages/signer/.prettierignore create mode 100644 packages/trusted-apps/.prettierignore create mode 100644 packages/ui/.prettierignore diff --git a/packages/signer/.prettierignore b/packages/signer/.prettierignore new file mode 100644 index 000000000..4eb56dc37 --- /dev/null +++ b/packages/signer/.prettierignore @@ -0,0 +1 @@ +lib/* \ No newline at end of file diff --git a/packages/trusted-apps/.prettierignore b/packages/trusted-apps/.prettierignore new file mode 100644 index 000000000..4eb56dc37 --- /dev/null +++ b/packages/trusted-apps/.prettierignore @@ -0,0 +1 @@ +lib/* \ No newline at end of file diff --git a/packages/ui/.prettierignore b/packages/ui/.prettierignore new file mode 100644 index 000000000..4eb56dc37 --- /dev/null +++ b/packages/ui/.prettierignore @@ -0,0 +1 @@ +lib/* \ No newline at end of file From 1cf310e22d811b9540d50568f61436222b20424d Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 20 Feb 2024 21:30:09 +0100 Subject: [PATCH 094/253] :tada: (core): Scaffold DeviceSession module --- .../di/deviceSessionModule.test.ts | 20 +++++++++++++++++++ .../device-session/di/deviceSessionModule.ts | 13 ++++++++++++ .../device-session/di/deviceSessionTypes.ts | 3 +++ .../DefaultDeviceSessionService.test.ts | 13 ++++++++++++ .../service/DefaultDeviceSessionService.ts | 8 ++++++++ .../service/DeviceSessionService.ts | 1 + 6 files changed, 58 insertions(+) create mode 100644 packages/core/src/internal/device-session/di/deviceSessionModule.test.ts create mode 100644 packages/core/src/internal/device-session/di/deviceSessionModule.ts create mode 100644 packages/core/src/internal/device-session/di/deviceSessionTypes.ts create mode 100644 packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts create mode 100644 packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts create mode 100644 packages/core/src/internal/device-session/service/DeviceSessionService.ts diff --git a/packages/core/src/internal/device-session/di/deviceSessionModule.test.ts b/packages/core/src/internal/device-session/di/deviceSessionModule.test.ts new file mode 100644 index 000000000..800c0d386 --- /dev/null +++ b/packages/core/src/internal/device-session/di/deviceSessionModule.test.ts @@ -0,0 +1,20 @@ +import { Container } from "inversify"; + +import deviceSessionModuleFactory from "./deviceSessionModule"; +import { types } from "./deviceSessionTypes"; + +describe("deviceSessionModuleFactory", () => { + describe("Default", () => { + let container: Container; + let mod: ReturnType; + beforeEach(() => { + mod = deviceSessionModuleFactory(); + container = new Container(); + container.load(mod); + }); + + it("should return the config module", () => { + expect(mod).toBeDefined(); + }); + }); +}); \ No newline at end of file diff --git a/packages/core/src/internal/device-session/di/deviceSessionModule.ts b/packages/core/src/internal/device-session/di/deviceSessionModule.ts new file mode 100644 index 000000000..f5435aa64 --- /dev/null +++ b/packages/core/src/internal/device-session/di/deviceSessionModule.ts @@ -0,0 +1,13 @@ +import { ContainerModule } from "inversify"; + +import { DefaultDeviceSessionService } from "../service/DefaultDeviceSessionService"; +import { types } from "./deviceSessionTypes"; + +type FactoryProps = {}; + +const deviceSessionModuleFactory = ({}: Partial = {}) => + new ContainerModule((bind, _unbind, _isBound, _rebind, _unbindAsync, _onActivation, _onDeactivation) => { + bind(types.DeviceSessionService).to(DefaultDeviceSessionService); + }); + +export default deviceSessionModuleFactory; \ No newline at end of file diff --git a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts new file mode 100644 index 000000000..2d406c5d3 --- /dev/null +++ b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts @@ -0,0 +1,3 @@ +export const types = { + DeviceSessionService: Symbol.for("DeviceSessionService"), +}; \ No newline at end of file diff --git a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts new file mode 100644 index 000000000..a0e9289e1 --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts @@ -0,0 +1,13 @@ +import { DefaultDeviceSessionService } from "./DefaultDeviceSessionService"; +import { DeviceSessionService } from "./DeviceSessionService"; + +let service: DeviceSessionService; +describe("DeviceSessionService", () => { + beforeEach(() => { + service = new DefaultDeviceSessionService(); + }); + + it("should be defined", () => { + expect(service).toBeDefined(); + }); +}); diff --git a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts new file mode 100644 index 000000000..9ca8651cd --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts @@ -0,0 +1,8 @@ +import { injectable } from "inversify"; + +import { DeviceSessionService } from "./DeviceSessionService"; + +@injectable() +export class DefaultDeviceSessionService implements DeviceSessionService { + constructor() {} +} diff --git a/packages/core/src/internal/device-session/service/DeviceSessionService.ts b/packages/core/src/internal/device-session/service/DeviceSessionService.ts new file mode 100644 index 000000000..2dcb2b286 --- /dev/null +++ b/packages/core/src/internal/device-session/service/DeviceSessionService.ts @@ -0,0 +1 @@ +export interface DeviceSessionService {} From e63e743e3420555b69bd89e4cb0598ec8c305e6b Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 20 Feb 2024 21:34:19 +0100 Subject: [PATCH 095/253] :truck: (test): Move ts-jest dependency in root --- package.json | 1 + packages/config/jest/package.json | 1 - packages/core/jest.config.ts | 2 +- packages/signer/jest.config.ts | 2 +- packages/trusted-apps/jest.config.ts | 2 +- packages/ui/jest.config.ts | 2 +- pnpm-lock.yaml | 135 +++------------------------ 7 files changed, 19 insertions(+), 126 deletions(-) diff --git a/package.json b/package.json index c3e29d965..6894cfae1 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "rimraf": "^5.0.5", "turbo": "^1.12.3", "typescript": "^5.3.3", + "ts-jest": "^29.1.1", "zx": "^7.2.3" }, "lint-staged": { diff --git a/packages/config/jest/package.json b/packages/config/jest/package.json index 654b91e80..e2601b633 100644 --- a/packages/config/jest/package.json +++ b/packages/config/jest/package.json @@ -5,7 +5,6 @@ "types": "node_modules/ts-jest/dist/index.d.ts", "private": true, "devDependencies": { - "ts-jest": "^29.1.1", "ts-node": "^10.9.2" } } diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index 5c7f9b398..0d000e5f9 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -1,5 +1,5 @@ /* eslint no-restricted-syntax: 0 */ -import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; +import type { JestConfigWithTsJest } from "ts-jest"; const config: JestConfigWithTsJest = { preset: "@ledgerhq/jest-config-dsdk", diff --git a/packages/signer/jest.config.ts b/packages/signer/jest.config.ts index 62a1facb2..3959085f2 100644 --- a/packages/signer/jest.config.ts +++ b/packages/signer/jest.config.ts @@ -1,4 +1,4 @@ -import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; +import type { JestConfigWithTsJest } from "ts-jest"; const config: JestConfigWithTsJest = { preset: "@ledgerhq/jest-config-dsdk", diff --git a/packages/trusted-apps/jest.config.ts b/packages/trusted-apps/jest.config.ts index 62a1facb2..3959085f2 100644 --- a/packages/trusted-apps/jest.config.ts +++ b/packages/trusted-apps/jest.config.ts @@ -1,4 +1,4 @@ -import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; +import type { JestConfigWithTsJest } from "ts-jest"; const config: JestConfigWithTsJest = { preset: "@ledgerhq/jest-config-dsdk", diff --git a/packages/ui/jest.config.ts b/packages/ui/jest.config.ts index 62a1facb2..3959085f2 100644 --- a/packages/ui/jest.config.ts +++ b/packages/ui/jest.config.ts @@ -1,4 +1,4 @@ -import type { JestConfigWithTsJest } from "@ledgerhq/jest-config-dsdk"; +import type { JestConfigWithTsJest } from "ts-jest"; const config: JestConfigWithTsJest = { preset: "@ledgerhq/jest-config-dsdk", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d37bfefc..d0795c2da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,9 @@ importers: rimraf: specifier: ^5.0.5 version: 5.0.5 + ts-jest: + specifier: ^29.1.1 + version: 29.1.1(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3) turbo: specifier: ^1.12.3 version: 1.12.3 @@ -126,9 +129,6 @@ importers: packages/config/jest: devDependencies: - ts-jest: - specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3) ts-node: specifier: ^10.9.2 version: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) @@ -1171,7 +1171,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core@29.7.0(ts-node@10.9.2): + /@jest/core@29.7.0: resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1192,7 +1192,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.6) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -3175,26 +3175,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - - /create-jest@29.7.0(@types/node@20.11.16)(ts-node@10.9.2): - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.6) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5555,42 +5536,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 create-jest: 29.7.0(@types/node@20.10.6) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.10.6)(ts-node@10.9.2) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - - /jest-cli@29.7.0(@types/node@20.11.16)(ts-node@10.9.2): - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.6) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5601,7 +5554,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.10.6)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.10.6): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5636,48 +5589,6 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - dev: true - - /jest-config@29.7.0(@types/node@20.11.16)(ts-node@10.9.2): - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.16 - babel-jest: 29.7.0(@babel/core@7.23.6) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -5976,7 +5887,7 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.1.0 jest-cli: 29.7.0(@types/node@20.10.6) @@ -5987,27 +5898,6 @@ packages: - ts-node dev: true - /jest@29.7.0(@types/node@20.11.16)(ts-node@10.9.2): - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2) - '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true @@ -6309,6 +6199,7 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 + dev: true /lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} @@ -7535,6 +7426,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true /sentence-case@2.1.1: resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} @@ -8173,7 +8065,7 @@ packages: '@babel/core': 7.23.9 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.10.6) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -8774,6 +8666,7 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} From b55d7ca4d416912fd2a00f8f2aee631544ce2073 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Wed, 21 Feb 2024 17:56:43 +0100 Subject: [PATCH 096/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Create=20FramerSe?= =?UTF-8?q?rvice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/di.ts | 2 + .../device-session/data/FramerDataSource.ts | 6 + .../di/deviceSessionModule.test.ts | 5 +- .../device-session/di/deviceSessionModule.ts | 25 +- .../device-session/di/deviceSessionTypes.ts | 4 +- .../internal/device-session/model/Frame.ts | 22 ++ .../device-session/model/FrameHeader.ts | 44 ++++ .../DefaultDeviceSessionService.test.ts | 13 - .../service/DefaultDeviceSessionService.ts | 8 - .../service/DefaultFramerService.test.ts | 223 ++++++++++++++++++ .../service/DefaultFramerService.ts | 148 ++++++++++++ .../service/DeviceSessionService.ts | 1 - .../device-session/service/FramerService.ts | 5 + 13 files changed, 471 insertions(+), 35 deletions(-) create mode 100644 packages/core/src/internal/device-session/data/FramerDataSource.ts create mode 100644 packages/core/src/internal/device-session/model/Frame.ts create mode 100644 packages/core/src/internal/device-session/model/FrameHeader.ts delete mode 100644 packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts delete mode 100644 packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts create mode 100644 packages/core/src/internal/device-session/service/DefaultFramerService.test.ts create mode 100644 packages/core/src/internal/device-session/service/DefaultFramerService.ts delete mode 100644 packages/core/src/internal/device-session/service/DeviceSessionService.ts create mode 100644 packages/core/src/internal/device-session/service/FramerService.ts diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 3fd1a0e31..a6c733816 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -4,6 +4,7 @@ import { Container } from "inversify"; // import { makeLoggerMiddleware } from "inversify-logger-middleware"; import { configModuleFactory } from "@internal/config/di/configModule"; import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelModule"; +import { deviceSessionModuleFactory } from "@internal/device-session/di/deviceSessionModule"; import { discoveryModuleFactory } from "@internal/discovery/di/discoveryModule"; import { loggerModuleFactory } from "@internal/logger/di/loggerModule"; import { LoggerSubscriber } from "@internal/logger/service/Log"; @@ -32,6 +33,7 @@ export const makeContainer = ({ usbModuleFactory({ stub }), discoveryModuleFactory({ stub }), loggerModuleFactory({ subscribers: loggers }), + deviceSessionModuleFactory(), // modules go here ); diff --git a/packages/core/src/internal/device-session/data/FramerDataSource.ts b/packages/core/src/internal/device-session/data/FramerDataSource.ts new file mode 100644 index 000000000..1f4bb62e3 --- /dev/null +++ b/packages/core/src/internal/device-session/data/FramerDataSource.ts @@ -0,0 +1,6 @@ +export const HEAD_TAG = 0x05; +export const HEAD_TAG_SIZE = 1; +export const CHANNEL_SIZE = 2; +export const INDEX_SIZE = 2; +export const APDU_COMMAND_SIZE = 5; +export const APDU_DATA_SIZE = 2; diff --git a/packages/core/src/internal/device-session/di/deviceSessionModule.test.ts b/packages/core/src/internal/device-session/di/deviceSessionModule.test.ts index 800c0d386..087d9d976 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionModule.test.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionModule.test.ts @@ -1,7 +1,6 @@ import { Container } from "inversify"; -import deviceSessionModuleFactory from "./deviceSessionModule"; -import { types } from "./deviceSessionTypes"; +import { deviceSessionModuleFactory } from "./deviceSessionModule"; describe("deviceSessionModuleFactory", () => { describe("Default", () => { @@ -17,4 +16,4 @@ describe("deviceSessionModuleFactory", () => { expect(mod).toBeDefined(); }); }); -}); \ No newline at end of file +}); diff --git a/packages/core/src/internal/device-session/di/deviceSessionModule.ts b/packages/core/src/internal/device-session/di/deviceSessionModule.ts index f5435aa64..6251092c6 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionModule.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionModule.ts @@ -1,13 +1,20 @@ import { ContainerModule } from "inversify"; -import { DefaultDeviceSessionService } from "../service/DefaultDeviceSessionService"; -import { types } from "./deviceSessionTypes"; - -type FactoryProps = {}; +import { DefaultFramerService } from "@internal/device-session/service/DefaultFramerService"; -const deviceSessionModuleFactory = ({}: Partial = {}) => - new ContainerModule((bind, _unbind, _isBound, _rebind, _unbindAsync, _onActivation, _onDeactivation) => { - bind(types.DeviceSessionService).to(DefaultDeviceSessionService); - }); +import { types } from "./deviceSessionTypes"; -export default deviceSessionModuleFactory; \ No newline at end of file +export const deviceSessionModuleFactory = () => + new ContainerModule( + ( + bind, + _unbind, + _isBound, + _rebind, + _unbindAsync, + _onActivation, + _onDeactivation, + ) => { + bind(types.DeviceSessionService).to(DefaultFramerService); + }, + ); diff --git a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts index 2d406c5d3..a52b948b0 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts @@ -1,3 +1,5 @@ export const types = { DeviceSessionService: Symbol.for("DeviceSessionService"), -}; \ No newline at end of file + UsbFramerService: Symbol.for("UsbFramerService"), + BleFramerService: Symbol.for("BleFramerService"), +}; diff --git a/packages/core/src/internal/device-session/model/Frame.ts b/packages/core/src/internal/device-session/model/Frame.ts new file mode 100644 index 000000000..d7d318ad3 --- /dev/null +++ b/packages/core/src/internal/device-session/model/Frame.ts @@ -0,0 +1,22 @@ +import { FrameHeader } from "@internal/device-session/model/FrameHeader"; + +type FrameConstructorArgs = { + header: FrameHeader; + data: Uint8Array; +}; + +export class Frame { + header: FrameHeader; + data: Uint8Array; + constructor({ header, data }: FrameConstructorArgs) { + this.header = header; + this.data = data; + } + toString(): string { + return JSON.stringify( + { header: this.header.toString(), data: this.data.toString() }, + null, + 2, + ); + } +} diff --git a/packages/core/src/internal/device-session/model/FrameHeader.ts b/packages/core/src/internal/device-session/model/FrameHeader.ts new file mode 100644 index 000000000..a8bb9336e --- /dev/null +++ b/packages/core/src/internal/device-session/model/FrameHeader.ts @@ -0,0 +1,44 @@ +import { Either } from "purify-ts"; + +type FrameHeaderConstructorArgs = { + uuid: string; + channel?: Uint8Array; + headTag: Uint8Array; + index: Uint8Array; + length: number; + dataSize: Either; +}; + +export class FrameHeader { + uuid: string; + channel: Uint8Array; + headTag: Uint8Array; + index: Uint8Array; + length: number; + dataSize: Either; + constructor({ + uuid, + dataSize, + index, + headTag, + length, + channel = new Uint8Array([]), + }: FrameHeaderConstructorArgs) { + this.uuid = uuid; + this.dataSize = dataSize; + this.index = index; + this.headTag = headTag; + this.length = length; + this.channel = channel; + } + toString(): string { + return JSON.stringify({ + uuid: this.uuid.toString(), + dataSize: this.dataSize?.toString() ?? "", + index: this.index.toString(), + headTag: this.headTag.toString(), + length: this.length.toString(), + channel: this.channel.toString(), + }); + } +} diff --git a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts deleted file mode 100644 index a0e9289e1..000000000 --- a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { DefaultDeviceSessionService } from "./DefaultDeviceSessionService"; -import { DeviceSessionService } from "./DeviceSessionService"; - -let service: DeviceSessionService; -describe("DeviceSessionService", () => { - beforeEach(() => { - service = new DefaultDeviceSessionService(); - }); - - it("should be defined", () => { - expect(service).toBeDefined(); - }); -}); diff --git a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts deleted file mode 100644 index 9ca8651cd..000000000 --- a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { injectable } from "inversify"; - -import { DeviceSessionService } from "./DeviceSessionService"; - -@injectable() -export class DefaultDeviceSessionService implements DeviceSessionService { - constructor() {} -} diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts b/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts new file mode 100644 index 000000000..6b6cb446e --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts @@ -0,0 +1,223 @@ +import * as uuid from "uuid"; +jest.mock("uuid"); + +import { Left, Right } from "purify-ts"; + +import { Frame } from "@internal/device-session/model/Frame"; +import { FrameHeader } from "@internal/device-session/model/FrameHeader"; + +import { DefaultFramerService } from "./DefaultFramerService"; + +describe("DefaultFramerService", () => { + beforeEach(() => { + jest.spyOn(uuid, "v4").mockReturnValue("42"); + }); + it("should return 1 frame with padding, channel and bigger packetSize", () => { + // given + const channel = new Uint8Array([0x12, 0x34]); + const framerService = new DefaultFramerService({ + packetSize: 64, + padding: true, + channel, + }); + // getVersion APDU + const apdu = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); + + // when + const frames = framerService.getFrames(apdu); + + // then + console.log(frames); + expect(frames).toEqual([ + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: new Uint8Array([0x12, 0x34]), + headTag: new Uint8Array([0x05]), + dataSize: Right(new Uint8Array([0, 0x05])), + index: new Uint8Array([0, 0]), + length: 7, + }), + data: new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + ]), + }), + ]); + }); + + it("should return 2 frames with padding, channel and bigger packetSize", () => { + // given + const channel = new Uint8Array([0x12, 0x34]); + const framerService = new DefaultFramerService({ + packetSize: 64, + padding: true, + channel, + }); + const apdu = new Uint8Array([ + // editDeviceName APDU + 0xe0, 0xd4, 0x00, 0x00, 0x40, + // editDeviceNameData + 0x54, 0x6f, 0x66, 0x75, 0x49, 0x73, 0x4e, 0x75, 0x74, 0x72, 0x69, 0x74, + 0x69, 0x6f, 0x75, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x72, 0x69, 0x6e, 0x67, + 0x73, 0x4a, 0x6f, 0x79, 0x44, 0x65, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x48, 0x61, + 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x49, 0x6e, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x42, 0x69, 0x74, 0x65, + ]); + console.log(apdu); + + // when + const frames = framerService.getFrames(apdu); + + // then + expect(frames).toEqual([ + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: new Uint8Array([0x12, 0x34]), + headTag: new Uint8Array([0x05]), + dataSize: Right(new Uint8Array([0x00, 0x45])), + index: new Uint8Array([0x00, 0x00]), + length: 7, + }), + data: new Uint8Array([ + 0xe0, 0xd4, 0x00, 0x00, 0x40, 0x54, 0x6f, 0x66, 0x75, 0x49, 0x73, + 0x4e, 0x75, 0x74, 0x72, 0x69, 0x74, 0x69, 0x6f, 0x75, 0x73, 0x41, + 0x6e, 0x64, 0x42, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x6f, 0x79, + 0x44, 0x65, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x48, 0x61, 0x72, 0x6d, + 0x6f, 0x6e, + ]), + }), + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: new Uint8Array([0x12, 0x34]), + headTag: new Uint8Array([0x05]), + index: new Uint8Array([0x00, 0x01]), + length: 5, + dataSize: Left(undefined), + }), + data: new Uint8Array([ + 0x79, 0x49, 0x6e, 0x45, 0x76, 0x65, 0x72, 0x79, 0x42, 0x69, 0x74, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + ]), + }), + ]); + }); + + it("should return 1 frame without padding nor channel, with bigger packetSize", () => { + // given + const framerService = new DefaultFramerService({ + packetSize: 64, + channel: new Uint8Array([0x12, 0x34]), + }); + const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); + + // when + const frames = framerService.getFrames(command); + + // then + expect(frames).toEqual([ + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: new Uint8Array([0x12, 0x34]), + headTag: new Uint8Array([0x05]), + dataSize: Right(new Uint8Array([0, 5])), + index: new Uint8Array([0, 0]), + length: 7, + }), + data: new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]), + }), + ]); + }); + + it("should return 2 frames without padding nor channel, with smaller packet size", () => { + // given + const framerService = new DefaultFramerService({ + packetSize: 10, + }); + const command = new Uint8Array([ + 0x01, 0x05, 0x4f, 0x4c, 0x4f, 0x53, 0x00, 0x07, 0x2e, 0x32, 0x2e, 0x34, + 0x2d, 0x32, 0x00, 0x90, 0x00, + ]); + + // when + const frames = framerService.getFrames(command); + + // then + expect(frames).toEqual([ + new Frame({ + header: new FrameHeader({ + uuid: "42", + headTag: new Uint8Array([0x05]), + index: new Uint8Array([0, 0]), + dataSize: Right(new Uint8Array([0, 0x11])), + length: 5, + }), + data: new Uint8Array([0x01, 0x05, 0x4f, 0x4c, 0x4f]), + }), + new Frame({ + header: new FrameHeader({ + uuid: "42", + headTag: new Uint8Array([0x05]), + dataSize: Left(undefined), + index: new Uint8Array([0, 0x01]), + length: 3, + }), + data: new Uint8Array([0x53, 0x00, 0x07, 0x2e, 0x32, 0x2e, 0x34]), + }), + new Frame({ + header: new FrameHeader({ + uuid: "42", + headTag: new Uint8Array([0x05]), + dataSize: Left(undefined), + index: new Uint8Array([0, 0x02]), + length: 3, + }), + data: new Uint8Array([0x2d, 0x32, 0x00, 0x90, 0x00]), + }), + ]); + }); + + it("should return empty if packet size smaller than header size", () => { + const framerService = new DefaultFramerService({ + packetSize: Math.random() & 4, + channel: new Uint8Array([0x12, 0x34]), + }); + const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); + + // when + const frames = framerService.getFrames(command); + + // then + expect(frames).toBe(new Uint8Array([])); + }); + + it("should return empty if no apdu length", () => { + const framerService = new DefaultFramerService({ + // random packetSize < 0xff + packetSize: Math.random() & 0xff, + // random padding boolean + padding: Math.random() > 0.5, + channel: new Uint8Array([0x12, 0x34]), + }); + const command = new Uint8Array([]); + + // when + const frames = framerService.getFrames(command); + + // then + expect(frames).toBe(new Uint8Array([])); + }); +}); diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.ts b/packages/core/src/internal/device-session/service/DefaultFramerService.ts new file mode 100644 index 000000000..a532b7d6b --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultFramerService.ts @@ -0,0 +1,148 @@ +import { Either, Left, Right } from "purify-ts"; +import { v4 } from "uuid"; + +import { + APDU_DATA_SIZE, + HEAD_TAG, + HEAD_TAG_SIZE, + INDEX_SIZE, +} from "@internal/device-session/data/FramerDataSource"; +import { Frame } from "@internal/device-session/model/Frame"; +import { FrameHeader } from "@internal/device-session/model/FrameHeader"; + +import { FramerService } from "./FramerService"; + +export type ApduFramerServiceConstructorArgs = { + packetSize: number; + channel?: Uint8Array; + padding?: boolean; +}; + +export class DefaultFramerService implements FramerService { + protected packetSize: number; + protected channel: Uint8Array; + protected padding: boolean; + + constructor({ + packetSize, + channel = new Uint8Array([]), + padding = false, + }: ApduFramerServiceConstructorArgs) { + this.packetSize = packetSize; + this.channel = channel; + this.padding = padding; + } + + /** + * Get frame header size + * @private + * @param frameIndex + */ + private getFrameHeaderSizeFromIndex(frameIndex: number): number { + return ( + this.channel.length + + INDEX_SIZE + + HEAD_TAG_SIZE + + (frameIndex === 0 ? APDU_DATA_SIZE : 0) + ); + } + + /** + * Get frame offset + * First frame has more bytes of header + * Padding append means a 0 bytes is added at the end of each frame + * @private + * @param frameIndex + */ + private getHeaderSizeSumFrom(frameIndex: number): number { + let sum = this.getFrameHeaderSizeFromIndex(0); + let i = 1; + while (i < frameIndex) { + sum += this.getFrameHeaderSizeFromIndex(i); + i += 1; + } + return sum; + } + + /** + * Get frame header + * @param frameIndex + * @param apduSize + * @private + */ + private getFrameHeader(frameIndex: number, apduSize: number): FrameHeader { + const header = new FrameHeader({ + uuid: v4(), + channel: this.channel, + headTag: new Uint8Array([HEAD_TAG]), + index: new Uint8Array([Math.floor(frameIndex / 0xff), frameIndex & 0xff]), + length: this.getFrameHeaderSizeFromIndex(frameIndex), + dataSize: Left(undefined), + }); + if (frameIndex === 0) { + header.dataSize = Right( + new Uint8Array([Math.floor(apduSize / 0xff), apduSize & 0xff]), + ); + } + return header; + } + + /** + * Get next apdu frame + * Split every {{PACKET_SIZE}} bytes of data + * @param apdu + * @param frameIndex + * @private + */ + private getFrameAtIndex( + apdu: Uint8Array, + frameIndex: number, + ): Either { + const header = this.getFrameHeader(frameIndex, apdu.length); + const frameOffset = + frameIndex * this.packetSize - this.getHeaderSizeSumFrom(frameIndex); + + if (frameOffset > apdu.length) { + return Left(null); + } + if (header.length > this.packetSize) { + return Left(null); + } + const frameDataMaxSize = this.packetSize - header.length; + const frame = new Frame({ + header, + data: this.padding + ? new Uint8Array(frameDataMaxSize).fill(0) + : new Uint8Array( + apdu.length < frameDataMaxSize ? apdu.length : frameDataMaxSize, + ), + }); + frame.data.set( + apdu.slice( + frameIndex === 0 ? 0 : frameOffset, + frameIndex === 0 + ? frameDataMaxSize + : frameOffset + this.packetSize - header.length, + ), + 0, + ); + return Right(frame); + } + + /** + * Get frames from apdu and data (optional) + * + * @param apdu + */ + getFrames(apdu: Uint8Array): Frame[] { + const frames: Frame[] = []; + let count = 0; + let frame = this.getFrameAtIndex(apdu, count); + while (frame.isRight()) { + frames.push(frame.extract()); + count += 1; + frame = this.getFrameAtIndex(apdu, count); + } + return frames; + } +} diff --git a/packages/core/src/internal/device-session/service/DeviceSessionService.ts b/packages/core/src/internal/device-session/service/DeviceSessionService.ts deleted file mode 100644 index 2dcb2b286..000000000 --- a/packages/core/src/internal/device-session/service/DeviceSessionService.ts +++ /dev/null @@ -1 +0,0 @@ -export interface DeviceSessionService {} diff --git a/packages/core/src/internal/device-session/service/FramerService.ts b/packages/core/src/internal/device-session/service/FramerService.ts new file mode 100644 index 000000000..dc295ae3b --- /dev/null +++ b/packages/core/src/internal/device-session/service/FramerService.ts @@ -0,0 +1,5 @@ +import { Frame } from "@internal/device-session/model/Frame"; + +export interface FramerService { + getFrames: (apdu: Uint8Array) => Frame[]; +} From 8b21f801544098490f0bec872fd24f93ed7d7625 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 22 Feb 2024 09:20:50 +0100 Subject: [PATCH 097/253] :white_check_mark: (core): Pass DefaultFramerService tests --- .../device-session/di/deviceSessionModule.ts | 2 +- .../device-session/di/deviceSessionTypes.ts | 4 +- .../internal/device-session/model/Frame.ts | 5 +- .../device-session/model/FrameHeader.ts | 16 +- .../service/DefaultFramerService.test.ts | 392 +++++++++--------- .../service/DefaultFramerService.ts | 77 ++-- 6 files changed, 251 insertions(+), 245 deletions(-) diff --git a/packages/core/src/internal/device-session/di/deviceSessionModule.ts b/packages/core/src/internal/device-session/di/deviceSessionModule.ts index 6251092c6..700b332f2 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionModule.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionModule.ts @@ -15,6 +15,6 @@ export const deviceSessionModuleFactory = () => _onActivation, _onDeactivation, ) => { - bind(types.DeviceSessionService).to(DefaultFramerService); + bind(types.FramerService).to(DefaultFramerService); }, ); diff --git a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts index a52b948b0..6425b0cbb 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts @@ -1,5 +1,3 @@ export const types = { - DeviceSessionService: Symbol.for("DeviceSessionService"), - UsbFramerService: Symbol.for("UsbFramerService"), - BleFramerService: Symbol.for("BleFramerService"), + FramerService: Symbol.for("FramerService"), }; diff --git a/packages/core/src/internal/device-session/model/Frame.ts b/packages/core/src/internal/device-session/model/Frame.ts index d7d318ad3..4b1a4a088 100644 --- a/packages/core/src/internal/device-session/model/Frame.ts +++ b/packages/core/src/internal/device-session/model/Frame.ts @@ -14,7 +14,10 @@ export class Frame { } toString(): string { return JSON.stringify( - { header: this.header.toString(), data: this.data.toString() }, + { + header: this.header.toString(), + data: this.data.toString(), + }, null, 2, ); diff --git a/packages/core/src/internal/device-session/model/FrameHeader.ts b/packages/core/src/internal/device-session/model/FrameHeader.ts index a8bb9336e..3642739af 100644 --- a/packages/core/src/internal/device-session/model/FrameHeader.ts +++ b/packages/core/src/internal/device-session/model/FrameHeader.ts @@ -1,28 +1,28 @@ -import { Either } from "purify-ts"; +import { Maybe } from "purify-ts"; type FrameHeaderConstructorArgs = { uuid: string; - channel?: Uint8Array; + channel: Maybe; headTag: Uint8Array; index: Uint8Array; length: number; - dataSize: Either; + dataSize: Maybe; }; export class FrameHeader { uuid: string; - channel: Uint8Array; + channel: Maybe; headTag: Uint8Array; index: Uint8Array; length: number; - dataSize: Either; + dataSize: Maybe; constructor({ uuid, dataSize, index, headTag, length, - channel = new Uint8Array([]), + channel, }: FrameHeaderConstructorArgs) { this.uuid = uuid; this.dataSize = dataSize; @@ -34,11 +34,11 @@ export class FrameHeader { toString(): string { return JSON.stringify({ uuid: this.uuid.toString(), - dataSize: this.dataSize?.toString() ?? "", + dataSize: this.dataSize.extract()?.toString(), index: this.index.toString(), headTag: this.headTag.toString(), length: this.length.toString(), - channel: this.channel.toString(), + channel: this.channel.extract()?.toString(), }); } } diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts b/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts index 6b6cb446e..eaac9f302 100644 --- a/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts @@ -1,7 +1,7 @@ import * as uuid from "uuid"; jest.mock("uuid"); -import { Left, Right } from "purify-ts"; +import { Maybe } from "purify-ts"; import { Frame } from "@internal/device-session/model/Frame"; import { FrameHeader } from "@internal/device-session/model/FrameHeader"; @@ -9,215 +9,223 @@ import { FrameHeader } from "@internal/device-session/model/FrameHeader"; import { DefaultFramerService } from "./DefaultFramerService"; describe("DefaultFramerService", () => { - beforeEach(() => { + beforeAll(() => { jest.spyOn(uuid, "v4").mockReturnValue("42"); }); - it("should return 1 frame with padding, channel and bigger packetSize", () => { - // given - const channel = new Uint8Array([0x12, 0x34]); - const framerService = new DefaultFramerService({ - packetSize: 64, - padding: true, - channel, - }); - // getVersion APDU - const apdu = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); - - // when - const frames = framerService.getFrames(apdu); - - // then - console.log(frames); - expect(frames).toEqual([ - new Frame({ - header: new FrameHeader({ - uuid: "42", - channel: new Uint8Array([0x12, 0x34]), - headTag: new Uint8Array([0x05]), - dataSize: Right(new Uint8Array([0, 0x05])), - index: new Uint8Array([0, 0]), - length: 7, + describe("[USB] With padding and channel", () => { + it("should return 1 frame", () => { + // given + const channel = Maybe.of(new Uint8Array([0x12, 0x34])); + const framerService = new DefaultFramerService({ + frameSize: 64, + padding: true, + channel, + }); + // getVersion APDU + const apdu = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); + + // when + const frames = framerService.getFrames(apdu); + + // then + expect(frames).toEqual([ + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: Maybe.of(new Uint8Array([0x12, 0x34])), + headTag: new Uint8Array([0x05]), + dataSize: Maybe.of(new Uint8Array([0, 0x05])), + index: new Uint8Array([0, 0]), + length: 7, + }), + data: new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + ]), }), - data: new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - ]), - }), - ]); - }); - - it("should return 2 frames with padding, channel and bigger packetSize", () => { - // given - const channel = new Uint8Array([0x12, 0x34]); - const framerService = new DefaultFramerService({ - packetSize: 64, - padding: true, - channel, + ]); }); - const apdu = new Uint8Array([ - // editDeviceName APDU - 0xe0, 0xd4, 0x00, 0x00, 0x40, - // editDeviceNameData - 0x54, 0x6f, 0x66, 0x75, 0x49, 0x73, 0x4e, 0x75, 0x74, 0x72, 0x69, 0x74, - 0x69, 0x6f, 0x75, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x72, 0x69, 0x6e, 0x67, - 0x73, 0x4a, 0x6f, 0x79, 0x44, 0x65, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x48, 0x61, - 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x49, 0x6e, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x42, 0x69, 0x74, 0x65, - ]); - console.log(apdu); - - // when - const frames = framerService.getFrames(apdu); - - // then - expect(frames).toEqual([ - new Frame({ - header: new FrameHeader({ - uuid: "42", - channel: new Uint8Array([0x12, 0x34]), - headTag: new Uint8Array([0x05]), - dataSize: Right(new Uint8Array([0x00, 0x45])), - index: new Uint8Array([0x00, 0x00]), - length: 7, + + it("should return 2 frames", () => { + // given + const channel = Maybe.of(new Uint8Array([0x12, 0x34])); + const framerService = new DefaultFramerService({ + frameSize: 64, + padding: true, + channel, + }); + const apdu = new Uint8Array([ + // editDeviceName APDU + 0xe0, 0xd4, 0x00, 0x00, 0x40, + // editDeviceNameData + 0x54, 0x6f, 0x66, 0x75, 0x49, 0x73, 0x4e, 0x75, 0x74, 0x72, 0x69, 0x74, + 0x69, 0x6f, 0x75, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x72, 0x69, 0x6e, 0x67, + 0x73, 0x4a, 0x6f, 0x79, 0x44, 0x65, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x48, 0x61, + 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x49, 0x6e, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x42, 0x69, 0x74, 0x65, + ]); + + // when + const frames = framerService.getFrames(apdu); + + // then + expect(frames).toEqual([ + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: Maybe.of(new Uint8Array([0x12, 0x34])), + headTag: new Uint8Array([0x05]), + dataSize: Maybe.of(new Uint8Array([0x00, 0x45])), + index: new Uint8Array([0x00, 0x00]), + length: 7, + }), + data: new Uint8Array([ + 0xe0, 0xd4, 0x00, 0x00, 0x40, 0x54, 0x6f, 0x66, 0x75, 0x49, 0x73, + 0x4e, 0x75, 0x74, 0x72, 0x69, 0x74, 0x69, 0x6f, 0x75, 0x73, 0x41, + 0x6e, 0x64, 0x42, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x6f, 0x79, + 0x44, 0x65, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x48, 0x61, 0x72, 0x6d, + 0x6f, 0x6e, + ]), }), - data: new Uint8Array([ - 0xe0, 0xd4, 0x00, 0x00, 0x40, 0x54, 0x6f, 0x66, 0x75, 0x49, 0x73, - 0x4e, 0x75, 0x74, 0x72, 0x69, 0x74, 0x69, 0x6f, 0x75, 0x73, 0x41, - 0x6e, 0x64, 0x42, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x6f, 0x79, - 0x44, 0x65, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x48, 0x61, 0x72, 0x6d, - 0x6f, 0x6e, - ]), - }), - new Frame({ - header: new FrameHeader({ - uuid: "42", - channel: new Uint8Array([0x12, 0x34]), - headTag: new Uint8Array([0x05]), - index: new Uint8Array([0x00, 0x01]), - length: 5, - dataSize: Left(undefined), + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: Maybe.of(new Uint8Array([0x12, 0x34])), + headTag: new Uint8Array([0x05]), + index: new Uint8Array([0x00, 0x01]), + length: 5, + dataSize: Maybe.zero(), + }), + data: new Uint8Array([ + 0x79, 0x49, 0x6e, 0x45, 0x76, 0x65, 0x72, 0x79, 0x42, 0x69, 0x74, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + ]), }), - data: new Uint8Array([ - 0x79, 0x49, 0x6e, 0x45, 0x76, 0x65, 0x72, 0x79, 0x42, 0x69, 0x74, - 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - ]), - }), - ]); - }); - - it("should return 1 frame without padding nor channel, with bigger packetSize", () => { - // given - const framerService = new DefaultFramerService({ - packetSize: 64, - channel: new Uint8Array([0x12, 0x34]), + ]); }); - const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); - - // when - const frames = framerService.getFrames(command); - - // then - expect(frames).toEqual([ - new Frame({ - header: new FrameHeader({ - uuid: "42", - channel: new Uint8Array([0x12, 0x34]), - headTag: new Uint8Array([0x05]), - dataSize: Right(new Uint8Array([0, 5])), - index: new Uint8Array([0, 0]), - length: 7, - }), - data: new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]), - }), - ]); }); - it("should return 2 frames without padding nor channel, with smaller packet size", () => { - // given - const framerService = new DefaultFramerService({ - packetSize: 10, + describe("[BLE] Without padding nor channel", () => { + it("should return 1 frame", () => { + // given + const framerService = new DefaultFramerService({ + frameSize: 123, + }); + const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); + + // when + const frames = framerService.getFrames(command); + + // then + expect(frames).toEqual([ + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: Maybe.zero(), + headTag: new Uint8Array([0x05]), + dataSize: Maybe.of(new Uint8Array([0, 5])), + index: new Uint8Array([0, 0]), + length: 5, + }), + data: new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]), + }), + ]); }); - const command = new Uint8Array([ - 0x01, 0x05, 0x4f, 0x4c, 0x4f, 0x53, 0x00, 0x07, 0x2e, 0x32, 0x2e, 0x34, - 0x2d, 0x32, 0x00, 0x90, 0x00, - ]); - - // when - const frames = framerService.getFrames(command); - - // then - expect(frames).toEqual([ - new Frame({ - header: new FrameHeader({ - uuid: "42", - headTag: new Uint8Array([0x05]), - index: new Uint8Array([0, 0]), - dataSize: Right(new Uint8Array([0, 0x11])), - length: 5, + + it("should return 3 frames", () => { + // given + const framerService = new DefaultFramerService({ + frameSize: 10, + }); + const command = new Uint8Array([ + 0x01, 0x05, 0x4f, 0x4c, 0x4f, 0x53, 0x00, 0x07, 0x2e, 0x32, 0x2e, 0x34, + 0x2d, 0x32, 0x00, 0x90, 0x00, + ]); + + // when + const frames = framerService.getFrames(command); + + // then + expect(frames).toEqual([ + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: Maybe.zero(), + headTag: new Uint8Array([0x05]), + index: new Uint8Array([0, 0]), + dataSize: Maybe.of(new Uint8Array([0, 0x11])), + length: 5, + }), + data: new Uint8Array([0x01, 0x05, 0x4f, 0x4c, 0x4f]), }), - data: new Uint8Array([0x01, 0x05, 0x4f, 0x4c, 0x4f]), - }), - new Frame({ - header: new FrameHeader({ - uuid: "42", - headTag: new Uint8Array([0x05]), - dataSize: Left(undefined), - index: new Uint8Array([0, 0x01]), - length: 3, + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: Maybe.zero(), + headTag: new Uint8Array([0x05]), + dataSize: Maybe.zero(), + index: new Uint8Array([0, 0x01]), + length: 3, + }), + data: new Uint8Array([0x53, 0x00, 0x07, 0x2e, 0x32, 0x2e, 0x34]), }), - data: new Uint8Array([0x53, 0x00, 0x07, 0x2e, 0x32, 0x2e, 0x34]), - }), - new Frame({ - header: new FrameHeader({ - uuid: "42", - headTag: new Uint8Array([0x05]), - dataSize: Left(undefined), - index: new Uint8Array([0, 0x02]), - length: 3, + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: Maybe.zero(), + headTag: new Uint8Array([0x05]), + dataSize: Maybe.zero(), + index: new Uint8Array([0, 0x02]), + length: 3, + }), + data: new Uint8Array([0x2d, 0x32, 0x00, 0x90, 0x00]), }), - data: new Uint8Array([0x2d, 0x32, 0x00, 0x90, 0x00]), - }), - ]); + ]); + }); }); - it("should return empty if packet size smaller than header size", () => { - const framerService = new DefaultFramerService({ - packetSize: Math.random() & 4, - channel: new Uint8Array([0x12, 0x34]), - }); - const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); + describe("Errors", () => { + it("should return empty if packet size smaller than header size", () => { + // given + const framerService = new DefaultFramerService({ + frameSize: Math.random() & 4, + channel: Maybe.of(new Uint8Array([0x12, 0x34])), + }); + const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); - // when - const frames = framerService.getFrames(command); + // when + const frames = framerService.getFrames(command); - // then - expect(frames).toBe(new Uint8Array([])); - }); - - it("should return empty if no apdu length", () => { - const framerService = new DefaultFramerService({ - // random packetSize < 0xff - packetSize: Math.random() & 0xff, - // random padding boolean - padding: Math.random() > 0.5, - channel: new Uint8Array([0x12, 0x34]), + // then + expect(frames.length).toEqual(0); }); - const command = new Uint8Array([]); - - // when - const frames = framerService.getFrames(command); - // then - expect(frames).toBe(new Uint8Array([])); + it("should return empty if no apdu length", () => { + // given + const framerService = new DefaultFramerService({ + // random frameSize < 0xff + frameSize: Math.random() & 0xff, + // random padding boolean + padding: Math.random() > 0.5, + channel: Maybe.of(new Uint8Array([0x12, 0x34])), + }); + const command = new Uint8Array([]); + + // when + const frames = framerService.getFrames(command); + + // then + expect(frames.length).toEqual(0); + }); }); }); diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.ts b/packages/core/src/internal/device-session/service/DefaultFramerService.ts index a532b7d6b..804c4a27b 100644 --- a/packages/core/src/internal/device-session/service/DefaultFramerService.ts +++ b/packages/core/src/internal/device-session/service/DefaultFramerService.ts @@ -1,8 +1,9 @@ -import { Either, Left, Right } from "purify-ts"; +import { Maybe } from "purify-ts"; import { v4 } from "uuid"; import { APDU_DATA_SIZE, + CHANNEL_SIZE, HEAD_TAG, HEAD_TAG_SIZE, INDEX_SIZE, @@ -12,23 +13,23 @@ import { FrameHeader } from "@internal/device-session/model/FrameHeader"; import { FramerService } from "./FramerService"; -export type ApduFramerServiceConstructorArgs = { - packetSize: number; - channel?: Uint8Array; +export type DefaultFramerServiceConstructorArgs = { + frameSize: number; + channel?: Maybe; padding?: boolean; }; export class DefaultFramerService implements FramerService { - protected packetSize: number; - protected channel: Uint8Array; + protected frameSize: number; + protected channel: Maybe; protected padding: boolean; constructor({ - packetSize, - channel = new Uint8Array([]), + frameSize, + channel = Maybe.zero(), padding = false, - }: ApduFramerServiceConstructorArgs) { - this.packetSize = packetSize; + }: DefaultFramerServiceConstructorArgs) { + this.frameSize = frameSize; this.channel = channel; this.padding = padding; } @@ -40,7 +41,10 @@ export class DefaultFramerService implements FramerService { */ private getFrameHeaderSizeFromIndex(frameIndex: number): number { return ( - this.channel.length + + this.channel.caseOf({ + Just: () => CHANNEL_SIZE, + Nothing: () => 0, + }) + INDEX_SIZE + HEAD_TAG_SIZE + (frameIndex === 0 ? APDU_DATA_SIZE : 0) @@ -77,10 +81,10 @@ export class DefaultFramerService implements FramerService { headTag: new Uint8Array([HEAD_TAG]), index: new Uint8Array([Math.floor(frameIndex / 0xff), frameIndex & 0xff]), length: this.getFrameHeaderSizeFromIndex(frameIndex), - dataSize: Left(undefined), + dataSize: Maybe.zero(), }); if (frameIndex === 0) { - header.dataSize = Right( + header.dataSize = Maybe.of( new Uint8Array([Math.floor(apduSize / 0xff), apduSize & 0xff]), ); } @@ -88,49 +92,42 @@ export class DefaultFramerService implements FramerService { } /** - * Get next apdu frame - * Split every {{PACKET_SIZE}} bytes of data + * Get apdu frame at index + * Split every {{PACKET_SIZE - HEADER_SIZE}} bytes of apdu * @param apdu * @param frameIndex * @private */ - private getFrameAtIndex( - apdu: Uint8Array, - frameIndex: number, - ): Either { + private getFrameAtIndex(apdu: Uint8Array, frameIndex: number): Maybe { const header = this.getFrameHeader(frameIndex, apdu.length); const frameOffset = - frameIndex * this.packetSize - this.getHeaderSizeSumFrom(frameIndex); + frameIndex * this.frameSize - this.getHeaderSizeSumFrom(frameIndex); if (frameOffset > apdu.length) { - return Left(null); + return Maybe.zero(); } - if (header.length > this.packetSize) { - return Left(null); + if (header.length > this.frameSize) { + return Maybe.zero(); } - const frameDataMaxSize = this.packetSize - header.length; + const dataMaxSize = this.frameSize - header.length; + const data = apdu.slice( + frameIndex === 0 ? 0 : frameOffset, + frameIndex === 0 + ? dataMaxSize + : frameOffset + this.frameSize - header.length, + ); const frame = new Frame({ header, data: this.padding - ? new Uint8Array(frameDataMaxSize).fill(0) - : new Uint8Array( - apdu.length < frameDataMaxSize ? apdu.length : frameDataMaxSize, - ), + ? new Uint8Array(dataMaxSize).fill(0) + : new Uint8Array(data.length < dataMaxSize ? data.length : dataMaxSize), }); - frame.data.set( - apdu.slice( - frameIndex === 0 ? 0 : frameOffset, - frameIndex === 0 - ? frameDataMaxSize - : frameOffset + this.packetSize - header.length, - ), - 0, - ); - return Right(frame); + frame.data.set(data, 0); + return Maybe.of(frame); } /** - * Get frames from apdu and data (optional) + * Get frames from apdu * * @param apdu */ @@ -138,7 +135,7 @@ export class DefaultFramerService implements FramerService { const frames: Frame[] = []; let count = 0; let frame = this.getFrameAtIndex(apdu, count); - while (frame.isRight()) { + while (frame.isJust()) { frames.push(frame.extract()); count += 1; frame = this.getFrameAtIndex(apdu, count); From 9f9f7f263fec0c4bc7a09c572620a5aa25d653a3 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 15:12:56 +0100 Subject: [PATCH 098/253] =?UTF-8?q?=F0=9F=91=B7=20(chore):=20Add=20Danger?= =?UTF-8?q?=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 16 + danger/dangerfile.ts | 26 ++ package.json | 1 + pnpm-lock.yaml | 714 ++++++++++++++++++++++++++++- 4 files changed, 756 insertions(+), 1 deletion(-) create mode 100644 danger/dangerfile.ts diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 52ac5a5d3..d404d1a91 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -9,7 +9,23 @@ concurrency: cancel-in-progress: true jobs: + danger: + runs-on: [device-sdk-4xlarge-linux] + steps: + - uses: actions/checkout@v4 + + - uses: ./actions/setup-toolchain-composite + + - name: Danger + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Workaround when using custom runners + # https://github.com/danger/danger-js/issues/1374 + DANGER_GITHUB_API_BASE_URL: "https://api.github.com" + run: pnpm danger ci --dangerfile danger/dangerfile.ts --failOnErrors + health-check: + needs: [danger] runs-on: [device-sdk-4xlarge-linux] steps: - uses: actions/checkout@v4 diff --git a/danger/dangerfile.ts b/danger/dangerfile.ts new file mode 100644 index 000000000..55bc2110a --- /dev/null +++ b/danger/dangerfile.ts @@ -0,0 +1,26 @@ +import { danger, fail } from "danger"; + +if (danger.github.pr.assignee === null) { + fail( + "Please assign someone to merge this PR, and optionally include people who should review." + ); +} + +const branchRegex = + /^(feature|bugfix|support|chore|doc)\/(DSDK-[0-9]+|NO-ISSUE)\-.*/; +if (!branchRegex.test(danger.github.pr.head.ref)) { + fail("Please fix the PR branch name to match the convention"); +} + +const titleRegex = /^.+ \([a-z]+\) \[(DSDK-[0-9]+|NO-ISSUE)\]: [A-Z].*/; +if (!titleRegex.test(danger.github.pr.title)) { + fail("Please fix the PR title to match the convention."); +} + +const commitRegex = /^.+ \([a-z]+\): [A-Z].*/; +for (let { commit } of danger.github.commits) { + if (!commitRegex.test(commit.message)) { + fail("One or more commit message does not match the convention."); + break; + } +} diff --git a/package.json b/package.json index c3e29d965..4f49559a3 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@changesets/cli": "^2.27.1", "@types/jest": "^29.5.11", "@types/node": "^20.10.6", + "danger": "^11.3.1", "eslint": "^8.56.0", "gitmoji-cli": "^9.1.0", "husky": "^9.0.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d37bfefc..a66ae9ead 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@types/node': specifier: ^20.10.6 version: 20.10.6 + danger: + specifier: ^11.3.1 + version: 11.3.1 eslint: specifier: ^8.56.0 version: 8.56.0 @@ -1111,6 +1114,39 @@ packages: resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} dev: false + /@gitbeaker/core@35.8.1: + resolution: {integrity: sha512-KBrDykVKSmU9Q9Gly8KeHOgdc0lZSa435srECxuO0FGqqBcUQ82hPqUc13YFkkdOI9T1JRA3qSFajg8ds0mZKA==} + engines: {node: '>=14.2.0'} + dependencies: + '@gitbeaker/requester-utils': 35.8.1 + form-data: 4.0.0 + li: 1.3.0 + mime: 3.0.0 + query-string: 7.1.3 + xcase: 2.0.1 + dev: true + + /@gitbeaker/node@35.8.1: + resolution: {integrity: sha512-g6rX853y61qNhzq9cWtxIEoe2KDeFBtXAeWMGWJnc3nz3WRump2pIICvJqw/yobLZqmTNt+ea6w3/n92Mnbn3g==} + engines: {node: '>=14.2.0'} + deprecated: Please use its successor @gitbeaker/rest + dependencies: + '@gitbeaker/core': 35.8.1 + '@gitbeaker/requester-utils': 35.8.1 + delay: 5.0.0 + got: 11.8.6 + xcase: 2.0.1 + dev: true + + /@gitbeaker/requester-utils@35.8.1: + resolution: {integrity: sha512-MFzdH+Z6eJaCZA5ruWsyvm6SXRyrQHjYVR6aY8POFraIy7ceIHOprWCs1R+0ydDZ8KtBnd8OTHjlJ0sLtSFJCg==} + engines: {node: '>=14.2.0'} + dependencies: + form-data: 4.0.0 + qs: 6.11.2 + xcase: 2.0.1 + dev: true + /@humanwhocodes/config-array@0.11.13: resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} @@ -1633,6 +1669,113 @@ packages: fastq: 1.15.0 dev: true + /@octokit/auth-token@2.5.0: + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + dependencies: + '@octokit/types': 6.41.0 + dev: true + + /@octokit/core@3.6.0: + resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + dependencies: + '@octokit/auth-token': 2.5.0 + '@octokit/graphql': 4.8.0 + '@octokit/request': 5.6.3 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: true + + /@octokit/endpoint@6.0.12: + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + dependencies: + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.1 + dev: true + + /@octokit/graphql@4.8.0: + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + dependencies: + '@octokit/request': 5.6.3 + '@octokit/types': 6.41.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: true + + /@octokit/openapi-types@12.11.0: + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + dev: true + + /@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0): + resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} + peerDependencies: + '@octokit/core': '>=2' + dependencies: + '@octokit/core': 3.6.0 + '@octokit/types': 6.41.0 + dev: true + + /@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0): + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 3.6.0 + dev: true + + /@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0): + resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 3.6.0 + '@octokit/types': 6.41.0 + deprecation: 2.3.1 + dev: true + + /@octokit/request-error@2.1.0: + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + dependencies: + '@octokit/types': 6.41.0 + deprecation: 2.3.1 + once: 1.4.0 + dev: true + + /@octokit/request@5.6.3: + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + dependencies: + '@octokit/endpoint': 6.0.12 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + node-fetch: 2.7.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: true + + /@octokit/rest@18.12.0: + resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} + dependencies: + '@octokit/core': 3.6.0 + '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) + '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0) + '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) + transitivePeerDependencies: + - encoding + dev: true + + /@octokit/types@6.41.0: + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + dependencies: + '@octokit/openapi-types': 12.11.0 + dev: true + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1685,6 +1828,11 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true + /@sindresorhus/is@4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + dev: true + /@sindresorhus/is@5.6.0: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} @@ -1785,6 +1933,13 @@ packages: tslib: 2.6.2 dev: false + /@szmarczak/http-timer@4.0.6: + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + dependencies: + defer-to-connect: 2.0.1 + dev: true + /@szmarczak/http-timer@5.0.1: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -1803,6 +1958,11 @@ packages: tippy.js: 6.3.7 dev: false + /@tootallnate/once@2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + dev: true + /@tootallnate/quickjs-emscripten@0.23.0: resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} dev: true @@ -1856,6 +2016,15 @@ packages: '@babel/types': 7.23.6 dev: true + /@types/cacheable-request@6.0.3: + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 20.11.16 + '@types/responselike': 1.0.3 + dev: true + /@types/eslint@8.56.0: resolution: {integrity: sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==} dependencies: @@ -1927,6 +2096,12 @@ packages: '@types/node': 20.10.6 dev: true + /@types/keyv@3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 20.11.16 + dev: true + /@types/minimist@1.2.5: resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} dev: true @@ -1991,6 +2166,12 @@ packages: '@types/scheduler': 0.16.8 csstype: 3.1.3 + /@types/responselike@1.0.3: + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + dependencies: + '@types/node': 20.11.16 + dev: true + /@types/scheduler@0.16.8: resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} @@ -2295,6 +2476,15 @@ packages: hasBin: true dev: true + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + dev: true + /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} @@ -2512,6 +2702,12 @@ packages: tslib: 2.6.2 dev: true + /async-retry@1.2.3: + resolution: {integrity: sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==} + dependencies: + retry: 0.12.0 + dev: true + /async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true @@ -2522,6 +2718,10 @@ packages: has-symbols: 1.0.3 dev: true + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + /atomically@2.0.2: resolution: {integrity: sha512-Xfmb4q5QV7uqTlVdMSTtO5eF4DCHfNOdaPyKlbFShkzeNP+3lj3yjjcbdjSmEY4+pDBKJ9g26aP+ImTe88UHoQ==} dependencies: @@ -2670,6 +2870,10 @@ packages: engines: {node: '>=10.0.0'} dev: true + /before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + dev: true + /better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -2765,6 +2969,10 @@ packages: node-int64: 0.4.0 dev: true + /buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true @@ -2795,6 +3003,11 @@ packages: streamsearch: 1.1.0 dev: false + /cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + dev: true + /cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -2813,6 +3026,19 @@ packages: responselike: 3.0.0 dev: true + /cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + dev: true + /call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: @@ -3028,6 +3254,12 @@ packages: wrap-ansi: 7.0.0 dev: true + /clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + dependencies: + mimic-response: 1.0.1 + dev: true + /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -3078,11 +3310,27 @@ packages: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true + /colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + /commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} dev: true + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + /commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} @@ -3155,6 +3403,11 @@ packages: /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + /core-js@3.36.0: + resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==} + requiresBuild: true + dev: true + /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -3274,6 +3527,54 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true + /danger@11.3.1: + resolution: {integrity: sha512-+slkGnbf0czY7g4LSuYpYkKJgFrb9YIXFJvV5JAuLLF39CXLlUw0iebgeL3ASK1t6RDb8xe+Rk2F5ilh2Hdv2w==} + engines: {node: '>=14.13.1'} + hasBin: true + dependencies: + '@gitbeaker/core': 35.8.1 + '@gitbeaker/node': 35.8.1 + '@octokit/rest': 18.12.0 + async-retry: 1.2.3 + chalk: 2.4.2 + commander: 2.20.3 + core-js: 3.36.0 + debug: 4.3.4(supports-color@5.5.0) + fast-json-patch: 3.1.1 + get-stdin: 6.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + hyperlinker: 1.0.0 + json5: 2.2.3 + jsonpointer: 5.0.1 + jsonwebtoken: 9.0.2 + lodash.find: 4.6.0 + lodash.includes: 4.3.0 + lodash.isobject: 3.0.2 + lodash.keys: 4.2.0 + lodash.mapvalues: 4.6.0 + lodash.memoize: 4.1.2 + memfs-or-file-map-to-github-branch: 1.2.1 + micromatch: 4.0.5 + node-cleanup: 2.1.2 + node-fetch: 2.7.0 + override-require: 1.1.1 + p-limit: 2.3.0 + parse-diff: 0.7.1 + parse-git-config: 2.0.3 + parse-github-url: 1.0.2 + parse-link-header: 2.0.0 + pinpoint: 1.1.0 + prettyjson: 1.2.5 + readline-sync: 1.4.10 + regenerator-runtime: 0.13.11 + require-from-string: 2.0.2 + supports-hyperlinks: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -3338,6 +3639,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true + /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -3435,6 +3741,20 @@ packages: hasBin: true dev: true + /delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + + /deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: true + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -3536,6 +3856,12 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true + /ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /ejs@3.1.9: resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} @@ -3564,6 +3890,12 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + /enhanced-resolve@5.15.0: resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} @@ -4308,6 +4640,13 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + dependencies: + homedir-polyfill: 1.0.3 + dev: true + /expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4319,6 +4658,13 @@ packages: jest-util: 29.7.0 dev: true + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true + /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true @@ -4347,6 +4693,10 @@ packages: micromatch: 4.0.5 dev: true + /fast-json-patch@3.1.1: + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} + dev: true + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true @@ -4410,6 +4760,11 @@ packages: to-regex-range: 5.0.1 dev: true + /filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + dev: true + /find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: false @@ -4469,6 +4824,15 @@ packages: engines: {node: '>= 14.17'} dev: true + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + /formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -4490,6 +4854,11 @@ packages: js-yaml: 3.14.1 dev: true + /fs-exists-sync@0.1.0: + resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==} + engines: {node: '>=0.10.0'} + dev: true + /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -4593,11 +4962,23 @@ packages: engines: {node: '>=8.0.0'} dev: true + /get-stdin@6.0.0: + resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} + engines: {node: '>=4'} + dev: true + /get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} engines: {node: '>=12'} dev: true + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -4634,6 +5015,15 @@ packages: - supports-color dev: true + /git-config-path@1.0.1: + resolution: {integrity: sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + fs-exists-sync: 0.1.0 + homedir-polyfill: 1.0.3 + dev: true + /git-hooks-list@3.1.0: resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} dev: true @@ -4766,6 +5156,23 @@ packages: get-intrinsic: 1.2.2 dev: true + /got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + dev: true + /got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} @@ -4810,7 +5217,6 @@ packages: /has-flag@2.0.0: resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} engines: {node: '>=0.10.0'} - dev: false /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -4862,6 +5268,13 @@ packages: dependencies: react-is: 16.13.1 + /homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + dependencies: + parse-passwd: 1.0.0 + dev: true + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -4874,6 +5287,17 @@ packages: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true + /http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + dev: true + /http-proxy-agent@7.0.1: resolution: {integrity: sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==} engines: {node: '>= 14'} @@ -4884,6 +5308,14 @@ packages: - supports-color dev: true + /http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: true + /http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -4892,6 +5324,16 @@ packages: resolve-alpn: 1.2.1 dev: true + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + dev: true + /https-proxy-agent@7.0.3: resolution: {integrity: sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==} engines: {node: '>= 14'} @@ -4949,6 +5391,11 @@ packages: - supports-color dev: true + /hyperlinker@1.0.0: + resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} + engines: {node: '>=4'} + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -5169,6 +5616,11 @@ packages: hasBin: true dev: true + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -5300,6 +5752,11 @@ packages: engines: {node: '>=12'} dev: true + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: true + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -6099,6 +6556,27 @@ packages: graceful-fs: 4.2.11 dev: true + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: true + + /jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.5.4 + dev: true + /jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -6109,6 +6587,21 @@ packages: object.values: 1.1.7 dev: true + /jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: true + + /jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + dev: true + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -6161,6 +6654,10 @@ packages: type-check: 0.4.0 dev: true + /li@1.3.0: + resolution: {integrity: sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw==} + dev: true + /lilconfig@3.0.0: resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} engines: {node: '>=14'} @@ -6224,6 +6721,46 @@ packages: p-locate: 5.0.0 dev: true + /lodash.find@4.6.0: + resolution: {integrity: sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==} + dev: true + + /lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + dev: true + + /lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + dev: true + + /lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + dev: true + + /lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + dev: true + + /lodash.isobject@3.0.2: + resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==} + dev: true + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true + + /lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + dev: true + + /lodash.keys@4.2.0: + resolution: {integrity: sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ==} + dev: true + + /lodash.mapvalues@4.6.0: + resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==} + dev: true + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true @@ -6232,6 +6769,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + dev: true + /lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true @@ -6282,6 +6823,11 @@ packages: resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} dev: true + /lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + dev: true + /lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6346,6 +6892,14 @@ packages: resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} dev: true + /memfs-or-file-map-to-github-branch@1.2.1: + resolution: {integrity: sha512-I/hQzJ2a/pCGR8fkSQ9l5Yx+FQ4e7X6blNHyWBm2ojeFLT3GVzGkTj7xnyWpdclrr7Nq4dmx3xrvu70m3ypzAQ==} + dependencies: + '@octokit/rest': 18.12.0 + transitivePeerDependencies: + - encoding + dev: true + /memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} dev: false @@ -6393,6 +6947,24 @@ packages: picomatch: 2.3.1 dev: true + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: true + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -6403,6 +6975,11 @@ packages: engines: {node: '>=12'} dev: true + /mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: true + /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -6542,6 +7119,10 @@ packages: lower-case: 1.1.4 dev: true + /node-cleanup@2.1.2: + resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} + dev: true + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -6603,6 +7184,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: true + /normalize-url@8.0.0: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} @@ -6769,6 +7355,15 @@ packages: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} dev: true + /override-require@1.1.1: + resolution: {integrity: sha512-eoJ9YWxFcXbrn2U8FKT6RV+/Kj7fiGAB1VvHzbYKt8xM5ZuKZgCGvnHzDxmreEjcBH28ejg5MiOH4iyY1mQnkg==} + dev: true + + /p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + dev: true + /p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -6865,6 +7460,25 @@ packages: dependencies: callsites: 3.1.0 + /parse-diff@0.7.1: + resolution: {integrity: sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg==} + dev: true + + /parse-git-config@2.0.3: + resolution: {integrity: sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A==} + engines: {node: '>=6'} + dependencies: + expand-tilde: 2.0.2 + git-config-path: 1.0.1 + ini: 1.3.8 + dev: true + + /parse-github-url@1.0.2: + resolution: {integrity: sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==} + engines: {node: '>=0.10.0'} + hasBin: true + dev: true + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -6874,6 +7488,17 @@ packages: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + /parse-link-header@2.0.0: + resolution: {integrity: sha512-xjU87V0VyHZybn2RrCX5TIFGxTVZE6zqqZWMPlIKiSKuWh/X5WZdt+w1Ki1nXB+8L/KtL+nZ4iq+sfI6MrhhMw==} + dependencies: + xtend: 4.0.2 + dev: true + + /parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + dev: true + /pascal-case@2.0.1: resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} dependencies: @@ -6951,6 +7576,10 @@ packages: engines: {node: '>=6'} dev: true + /pinpoint@1.1.0: + resolution: {integrity: sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg==} + dev: true + /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -7045,6 +7674,14 @@ packages: react-is: 18.2.0 dev: true + /prettyjson@1.2.5: + resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==} + hasBin: true + dependencies: + colors: 1.4.0 + minimist: 1.2.8 + dev: true + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -7096,6 +7733,13 @@ packages: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -7118,6 +7762,23 @@ packages: '@types/json-schema': 7.0.15 dev: false + /qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + + /query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + dev: true + /queue-lit@1.5.2: resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==} engines: {node: '>=12'} @@ -7277,6 +7938,11 @@ packages: picomatch: 2.3.1 dev: true + /readline-sync@1.4.10: + resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} + engines: {node: '>= 0.8.0'} + dev: true + /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -7301,6 +7967,10 @@ packages: which-builtin-type: 1.1.3 dev: true + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -7406,6 +8076,12 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + dependencies: + lowercase-keys: 2.0.0 + dev: true + /responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} @@ -7429,6 +8105,11 @@ packages: signal-exit: 3.0.7 dev: true + /retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + dev: true + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -7765,6 +8446,11 @@ packages: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true + /split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + dev: true + /split@0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} dependencies: @@ -7808,6 +8494,11 @@ packages: engines: {node: '>=10.0.0'} dev: false + /strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + dev: true + /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -8040,6 +8731,14 @@ packages: has-flag: 4.0.0 dev: true + /supports-hyperlinks@1.0.1: + resolution: {integrity: sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==} + engines: {node: '>=4'} + dependencies: + has-flag: 2.0.0 + supports-color: 5.5.0 + dev: true + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -8453,6 +9152,10 @@ packages: crypto-random-string: 4.0.0 dev: true + /universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + dev: true + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -8751,11 +9454,20 @@ packages: signal-exit: 3.0.7 dev: true + /xcase@2.0.1: + resolution: {integrity: sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==} + dev: true + /xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} dev: true + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true From a353c992c4af1f92f9d6d4b7f5c21a9e0755ece6 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 12:43:39 +0100 Subject: [PATCH 099/253] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20(chore):=20Remove?= =?UTF-8?q?=20lint=20dependency=20for=20test=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- turbo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/turbo.json b/turbo.json index 78da05a7b..f58c258dd 100644 --- a/turbo.json +++ b/turbo.json @@ -24,7 +24,7 @@ "persistent": true }, "test": { - "dependsOn": ["build", "lint"], + "dependsOn": ["build"], "outputs": [], "inputs": ["src/**/*.ts", "tests/**/*.ts"] }, From fe15d3143fd2005b5653938329796247f04ac606 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 22 Feb 2024 16:05:10 +0100 Subject: [PATCH 100/253] :art: (core): Reviews --- .../{FramerDataSource.ts => FramerConst.ts} | 1 - .../internal/device-session/model/Errors.ts | 20 ++ .../internal/device-session/model/Frame.ts | 20 +- .../device-session/model/FrameHeader.ts | 57 +++-- .../service/DefaultFramerService.ts | 205 +++++++++++------- .../device-session/utils/FramerUtils.ts | 10 + 6 files changed, 204 insertions(+), 109 deletions(-) rename packages/core/src/internal/device-session/data/{FramerDataSource.ts => FramerConst.ts} (81%) create mode 100644 packages/core/src/internal/device-session/model/Errors.ts create mode 100644 packages/core/src/internal/device-session/utils/FramerUtils.ts diff --git a/packages/core/src/internal/device-session/data/FramerDataSource.ts b/packages/core/src/internal/device-session/data/FramerConst.ts similarity index 81% rename from packages/core/src/internal/device-session/data/FramerDataSource.ts rename to packages/core/src/internal/device-session/data/FramerConst.ts index 1f4bb62e3..c95f66951 100644 --- a/packages/core/src/internal/device-session/data/FramerDataSource.ts +++ b/packages/core/src/internal/device-session/data/FramerConst.ts @@ -2,5 +2,4 @@ export const HEAD_TAG = 0x05; export const HEAD_TAG_SIZE = 1; export const CHANNEL_SIZE = 2; export const INDEX_SIZE = 2; -export const APDU_COMMAND_SIZE = 5; export const APDU_DATA_SIZE = 2; diff --git a/packages/core/src/internal/device-session/model/Errors.ts b/packages/core/src/internal/device-session/model/Errors.ts new file mode 100644 index 000000000..9eb5a2369 --- /dev/null +++ b/packages/core/src/internal/device-session/model/Errors.ts @@ -0,0 +1,20 @@ +import { SdkError } from "@root/src/api/Error"; + +export class FramerOverflowError implements SdkError { + readonly _tag = "FramerOverflowError"; + originalError?: Error; + constructor() { + this.originalError = new Error( + "Frame header length is greater than frame size", + ); + } +} + +export class FramerApduError implements SdkError { + readonly _tag = "FramerApduError"; + originalError?: Error; + + constructor() { + this.originalError = new Error("Frame offset is greater than apdu length"); + } +} diff --git a/packages/core/src/internal/device-session/model/Frame.ts b/packages/core/src/internal/device-session/model/Frame.ts index 4b1a4a088..e327168b4 100644 --- a/packages/core/src/internal/device-session/model/Frame.ts +++ b/packages/core/src/internal/device-session/model/Frame.ts @@ -6,20 +6,28 @@ type FrameConstructorArgs = { }; export class Frame { - header: FrameHeader; - data: Uint8Array; + protected _header: FrameHeader; + protected _data: Uint8Array; constructor({ header, data }: FrameConstructorArgs) { - this.header = header; - this.data = data; + this._header = header; + this._data = data; } toString(): string { return JSON.stringify( { - header: this.header.toString(), - data: this.data.toString(), + header: this._header.toString(), + data: this._data.toString(), }, null, 2, ); } + getRawData(): Uint8Array { + const headerRaw = this._header.getRawData(); + const raw = new Uint8Array(headerRaw.length + this._data.length); + + raw.set(headerRaw, 0); + raw.set(this._data, headerRaw.length); + return raw; + } } diff --git a/packages/core/src/internal/device-session/model/FrameHeader.ts b/packages/core/src/internal/device-session/model/FrameHeader.ts index 3642739af..a386a9923 100644 --- a/packages/core/src/internal/device-session/model/FrameHeader.ts +++ b/packages/core/src/internal/device-session/model/FrameHeader.ts @@ -10,12 +10,12 @@ type FrameHeaderConstructorArgs = { }; export class FrameHeader { - uuid: string; - channel: Maybe; - headTag: Uint8Array; - index: Uint8Array; - length: number; - dataSize: Maybe; + protected _uuid: string; + protected _channel: Maybe; + protected _headTag: Uint8Array; + protected _index: Uint8Array; + protected _length: number; + protected _dataSize: Maybe; constructor({ uuid, dataSize, @@ -24,21 +24,42 @@ export class FrameHeader { length, channel, }: FrameHeaderConstructorArgs) { - this.uuid = uuid; - this.dataSize = dataSize; - this.index = index; - this.headTag = headTag; - this.length = length; - this.channel = channel; + this._uuid = uuid; + this._dataSize = dataSize; + this._index = index; + this._headTag = headTag; + this._length = length; + this._channel = channel; + } + setDataSize(dataSize: Maybe): FrameHeader { + this._dataSize = dataSize; + return this; + } + getLength(): number { + return this._length; } toString(): string { return JSON.stringify({ - uuid: this.uuid.toString(), - dataSize: this.dataSize.extract()?.toString(), - index: this.index.toString(), - headTag: this.headTag.toString(), - length: this.length.toString(), - channel: this.channel.extract()?.toString(), + uuid: this._uuid.toString(), + dataSize: this._dataSize.extract()?.toString(), + index: this._index.toString(), + headTag: this._headTag.toString(), + length: this._length.toString(), + channel: this._channel.extract()?.toString(), }); } + getRawData(): Uint8Array { + return new Uint8Array([ + ...this._channel.caseOf({ + Just: (channel) => [...channel], + Nothing: () => [], + }), + ...this._headTag, + ...this._index, + ...this._dataSize.caseOf({ + Just: (dataSize) => [...dataSize], + Nothing: () => [], + }), + ]); + } } diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.ts b/packages/core/src/internal/device-session/service/DefaultFramerService.ts index 804c4a27b..010826b1a 100644 --- a/packages/core/src/internal/device-session/service/DefaultFramerService.ts +++ b/packages/core/src/internal/device-session/service/DefaultFramerService.ts @@ -1,4 +1,5 @@ -import { Maybe } from "purify-ts"; +import { inject, injectable } from "inversify"; +import { Either, Left, Maybe, Right } from "purify-ts"; import { v4 } from "uuid"; import { @@ -7,11 +8,20 @@ import { HEAD_TAG, HEAD_TAG_SIZE, INDEX_SIZE, -} from "@internal/device-session/data/FramerDataSource"; +} from "@internal/device-session/data/FramerConst"; +import { + FramerApduError, + FramerOverflowError, +} from "@internal/device-session/model/Errors"; import { Frame } from "@internal/device-session/model/Frame"; import { FrameHeader } from "@internal/device-session/model/FrameHeader"; +import { FramerUtils } from "@internal/device-session/utils/FramerUtils"; +import { types as loggerTypes } from "@internal/logger/di/loggerTypes"; +import { LogBuilder } from "@internal/logger/service/LogBuilder"; +import type { LoggerService } from "@internal/logger/service/LoggerService"; +import { SdkError } from "@root/src/api/Error"; -import { FramerService } from "./FramerService"; +import type { FramerService } from "./FramerService"; export type DefaultFramerServiceConstructorArgs = { frameSize: number; @@ -19,53 +29,91 @@ export type DefaultFramerServiceConstructorArgs = { padding?: boolean; }; +@injectable() export class DefaultFramerService implements FramerService { - protected frameSize: number; - protected channel: Maybe; - protected padding: boolean; + protected _frameSize: number; + protected _channel: Maybe; + protected _padding: boolean; + private _logger: LoggerService; - constructor({ - frameSize, - channel = Maybe.zero(), - padding = false, - }: DefaultFramerServiceConstructorArgs) { - this.frameSize = frameSize; - this.channel = channel; - this.padding = padding; + constructor( + { + frameSize, + channel = Maybe.zero(), + padding = false, + }: DefaultFramerServiceConstructorArgs, + @inject(loggerTypes.LoggerService) logger: LoggerService, + ) { + this._frameSize = frameSize; + this._channel = channel; + this._padding = padding; + this._logger = logger; } /** - * Get frame header size - * @private - * @param frameIndex + * Get frames from apdu + * + * @param apdu */ - private getFrameHeaderSizeFromIndex(frameIndex: number): number { - return ( - this.channel.caseOf({ - Just: () => CHANNEL_SIZE, - Nothing: () => 0, - }) + - INDEX_SIZE + - HEAD_TAG_SIZE + - (frameIndex === 0 ? APDU_DATA_SIZE : 0) - ); + public getFrames(apdu: Uint8Array): Frame[] { + const frames: Frame[] = []; + let count = 0; + let frame = this.getFrameAtIndex(apdu, count); + + while (frame.isRight()) { + frames.push(frame.extract()); + count += 1; + frame = this.getFrameAtIndex(apdu, count).mapLeft((error) => { + if (error instanceof FramerOverflowError) { + this._logger.debug( + LogBuilder.build({ type: "framer" }, { count }, `Frames parsed.`), + ); + } else { + this._logger.error(LogBuilder.buildFromError(error)); + } + return error; + }); + } + return frames; } /** - * Get frame offset - * First frame has more bytes of header - * Padding append means a 0 bytes is added at the end of each frame - * @private + * Get apdu frame at index + * Split every {{PACKET_SIZE - HEADER_SIZE}} bytes of apdu + * @param apdu * @param frameIndex + * @private */ - private getHeaderSizeSumFrom(frameIndex: number): number { - let sum = this.getFrameHeaderSizeFromIndex(0); - let i = 1; - while (i < frameIndex) { - sum += this.getFrameHeaderSizeFromIndex(i); - i += 1; + private getFrameAtIndex( + apdu: Uint8Array, + frameIndex: number, + ): Either { + const header = this.getFrameHeaderFrom(frameIndex, apdu.length); + const frameOffset = + frameIndex * this._frameSize - this.getHeaderSizeSumFrom(frameIndex); + + if (frameOffset > apdu.length) { + return Left(new FramerOverflowError()); } - return sum; + if (header.getLength() > this._frameSize) { + return Left(new FramerApduError()); + } + const dataMaxSize = this._frameSize - header.getLength(); + const data = apdu.slice( + frameIndex === 0 ? 0 : frameOffset, + frameIndex === 0 + ? dataMaxSize + : frameOffset + this._frameSize - header.getLength(), + ); + const frameData = this._padding + ? new Uint8Array(dataMaxSize).fill(0) + : new Uint8Array(data.length < dataMaxSize ? data.length : dataMaxSize); + frameData.set(data, 0); + const frame = new Frame({ + header, + data: frameData, + }); + return Right(frame); } /** @@ -74,72 +122,61 @@ export class DefaultFramerService implements FramerService { * @param apduSize * @private */ - private getFrameHeader(frameIndex: number, apduSize: number): FrameHeader { + private getFrameHeaderFrom( + frameIndex: number, + apduSize: number, + ): FrameHeader { const header = new FrameHeader({ uuid: v4(), - channel: this.channel, + channel: this._channel.map((channel) => + FramerUtils.getLastBytesFrom(channel, CHANNEL_SIZE), + ), headTag: new Uint8Array([HEAD_TAG]), index: new Uint8Array([Math.floor(frameIndex / 0xff), frameIndex & 0xff]), length: this.getFrameHeaderSizeFromIndex(frameIndex), dataSize: Maybe.zero(), }); if (frameIndex === 0) { - header.dataSize = Maybe.of( - new Uint8Array([Math.floor(apduSize / 0xff), apduSize & 0xff]), + header.setDataSize( + Maybe.of( + new Uint8Array([Math.floor(apduSize / 0xff), apduSize & 0xff]), + ), ); } return header; } /** - * Get apdu frame at index - * Split every {{PACKET_SIZE - HEADER_SIZE}} bytes of apdu - * @param apdu - * @param frameIndex + * Get frame offset + * First frame has more bytes of header + * Padding append means a 0 bytes is added at the end of each frame * @private + * @param frameIndex */ - private getFrameAtIndex(apdu: Uint8Array, frameIndex: number): Maybe { - const header = this.getFrameHeader(frameIndex, apdu.length); - const frameOffset = - frameIndex * this.frameSize - this.getHeaderSizeSumFrom(frameIndex); - - if (frameOffset > apdu.length) { - return Maybe.zero(); - } - if (header.length > this.frameSize) { - return Maybe.zero(); + private getHeaderSizeSumFrom(frameIndex: number): number { + let sum = this.getFrameHeaderSizeFromIndex(0); + let i = 1; + while (i < frameIndex) { + sum += this.getFrameHeaderSizeFromIndex(i); + i += 1; } - const dataMaxSize = this.frameSize - header.length; - const data = apdu.slice( - frameIndex === 0 ? 0 : frameOffset, - frameIndex === 0 - ? dataMaxSize - : frameOffset + this.frameSize - header.length, - ); - const frame = new Frame({ - header, - data: this.padding - ? new Uint8Array(dataMaxSize).fill(0) - : new Uint8Array(data.length < dataMaxSize ? data.length : dataMaxSize), - }); - frame.data.set(data, 0); - return Maybe.of(frame); + return sum; } /** - * Get frames from apdu - * - * @param apdu + * Get frame header size + * @private + * @param frameIndex */ - getFrames(apdu: Uint8Array): Frame[] { - const frames: Frame[] = []; - let count = 0; - let frame = this.getFrameAtIndex(apdu, count); - while (frame.isJust()) { - frames.push(frame.extract()); - count += 1; - frame = this.getFrameAtIndex(apdu, count); - } - return frames; + private getFrameHeaderSizeFromIndex(frameIndex: number): number { + return ( + this._channel.caseOf({ + Just: () => CHANNEL_SIZE, + Nothing: () => 0, + }) + + INDEX_SIZE + + HEAD_TAG_SIZE + + (frameIndex === 0 ? APDU_DATA_SIZE : 0) + ); } } diff --git a/packages/core/src/internal/device-session/utils/FramerUtils.ts b/packages/core/src/internal/device-session/utils/FramerUtils.ts new file mode 100644 index 000000000..6d55b6105 --- /dev/null +++ b/packages/core/src/internal/device-session/utils/FramerUtils.ts @@ -0,0 +1,10 @@ +export const FramerUtils = { + /* + * Get last bytes of Uint8Array + * + * @param Uint8Array + */ + getLastBytesFrom(array: Uint8Array, size: number): Uint8Array { + return new Uint8Array(array.slice(-size)); + }, +}; From aac9d50aff670f96e9e1ee7b32bc42bd9c89c323 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 22 Feb 2024 16:06:27 +0100 Subject: [PATCH 101/253] :white_check_mark: (core): Add & improve framer tests --- .../service/DefaultFramerService.test.ts | 155 +++++++++++++++--- .../device-session/utils/FramerUtils.test.ts | 33 ++++ 2 files changed, 161 insertions(+), 27 deletions(-) create mode 100644 packages/core/src/internal/device-session/utils/FramerUtils.test.ts diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts b/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts index eaac9f302..490efec7b 100644 --- a/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts @@ -5,22 +5,29 @@ import { Maybe } from "purify-ts"; import { Frame } from "@internal/device-session/model/Frame"; import { FrameHeader } from "@internal/device-session/model/FrameHeader"; +import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; import { DefaultFramerService } from "./DefaultFramerService"; +const loggerService = new DefaultLoggerService([console]); + describe("DefaultFramerService", () => { beforeAll(() => { jest.spyOn(uuid, "v4").mockReturnValue("42"); }); + describe("[USB] With padding and channel", () => { it("should return 1 frame", () => { // given const channel = Maybe.of(new Uint8Array([0x12, 0x34])); - const framerService = new DefaultFramerService({ - frameSize: 64, - padding: true, - channel, - }); + const framerService = new DefaultFramerService( + { + frameSize: 64, + padding: true, + channel, + }, + loggerService, + ); // getVersion APDU const apdu = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); @@ -48,16 +55,29 @@ describe("DefaultFramerService", () => { ]), }), ]); + expect(frames.map((fr) => fr.getRawData())).toEqual([ + new Uint8Array([ + 0x12, 0x34, 0x05, 0x00, 0x00, 0x00, 0x05, 0xe0, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ]), + ]); }); it("should return 2 frames", () => { // given const channel = Maybe.of(new Uint8Array([0x12, 0x34])); - const framerService = new DefaultFramerService({ - frameSize: 64, - padding: true, - channel, - }); + const framerService = new DefaultFramerService( + { + frameSize: 64, + padding: true, + channel, + }, + loggerService, + ); const apdu = new Uint8Array([ // editDeviceName APDU 0xe0, 0xd4, 0x00, 0x00, 0x40, @@ -112,15 +132,36 @@ describe("DefaultFramerService", () => { ]), }), ]); + expect(frames.map((fr) => fr.getRawData())).toEqual([ + new Uint8Array([ + 0x12, 0x34, 0x05, 0x00, 0x00, 0x00, 0x45, 0xe0, 0xd4, 0x00, 0x00, + 0x40, 0x54, 0x6f, 0x66, 0x75, 0x49, 0x73, 0x4e, 0x75, 0x74, 0x72, + 0x69, 0x74, 0x69, 0x6f, 0x75, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x72, + 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x6f, 0x79, 0x44, 0x65, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x73, 0x48, 0x61, 0x72, 0x6d, 0x6f, 0x6e, + ]), + new Uint8Array([ + 0x12, 0x34, 0x05, 0x00, 0x01, 0x79, 0x49, 0x6e, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x42, 0x69, 0x74, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ]), + ]); }); }); describe("[BLE] Without padding nor channel", () => { it("should return 1 frame", () => { // given - const framerService = new DefaultFramerService({ - frameSize: 123, - }); + const framerService = new DefaultFramerService( + { + frameSize: 123, + }, + loggerService, + ); const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); // when @@ -140,13 +181,21 @@ describe("DefaultFramerService", () => { data: new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]), }), ]); + expect(frames.map((fr) => fr.getRawData())).toEqual([ + new Uint8Array([ + 0x05, 0x00, 0x00, 0x00, 0x05, 0xe0, 0x01, 0x00, 0x00, 0x00, + ]), + ]); }); it("should return 3 frames", () => { // given - const framerService = new DefaultFramerService({ - frameSize: 10, - }); + const framerService = new DefaultFramerService( + { + frameSize: 10, + }, + loggerService, + ); const command = new Uint8Array([ 0x01, 0x05, 0x4f, 0x4c, 0x4f, 0x53, 0x00, 0x07, 0x2e, 0x32, 0x2e, 0x34, 0x2d, 0x32, 0x00, 0x90, 0x00, @@ -191,16 +240,65 @@ describe("DefaultFramerService", () => { data: new Uint8Array([0x2d, 0x32, 0x00, 0x90, 0x00]), }), ]); + expect(frames.map((fr) => fr.getRawData())).toEqual([ + new Uint8Array([ + 0x05, 0x00, 0x00, 0x00, 0x11, 0x01, 0x05, 0x4f, 0x4c, 0x4f, + ]), + new Uint8Array([ + 0x05, 0x00, 0x01, 0x53, 0x00, 0x07, 0x2e, 0x32, 0x2e, 0x34, + ]), + new Uint8Array([0x05, 0x00, 0x02, 0x2d, 0x32, 0x00, 0x90, 0x00]), + ]); }); }); describe("Errors", () => { + it("should return a well formatted header with very big channel", () => { + // given + const framerService = new DefaultFramerService( + { + frameSize: 64, + channel: Maybe.of( + new Uint8Array([0x123434, 0x34444, 0x56454, 0x7844, 0x90444]), + ), + }, + loggerService, + ); + const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); + + // when + const frames = framerService.getFrames(command); + + // then + expect(frames).toEqual([ + new Frame({ + header: new FrameHeader({ + uuid: "42", + channel: Maybe.of(new Uint8Array([0x44, 0x44])), + headTag: new Uint8Array([0x05]), + dataSize: Maybe.of(new Uint8Array([0, 0x05])), + index: new Uint8Array([0, 0]), + length: 7, + }), + data: new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]), + }), + ]); + expect(frames.map((fr) => fr.getRawData())).toEqual([ + new Uint8Array([ + 0x44, 0x44, 0x05, 0x00, 0x00, 0x00, 0x05, 0xe0, 0x01, 0x00, 0x00, + 0x00, + ]), + ]); + }); it("should return empty if packet size smaller than header size", () => { // given - const framerService = new DefaultFramerService({ - frameSize: Math.random() & 4, - channel: Maybe.of(new Uint8Array([0x12, 0x34])), - }); + const framerService = new DefaultFramerService( + { + frameSize: Math.random() & 4, + channel: Maybe.of(new Uint8Array([0x12, 0x34])), + }, + loggerService, + ); const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); // when @@ -212,13 +310,16 @@ describe("DefaultFramerService", () => { it("should return empty if no apdu length", () => { // given - const framerService = new DefaultFramerService({ - // random frameSize < 0xff - frameSize: Math.random() & 0xff, - // random padding boolean - padding: Math.random() > 0.5, - channel: Maybe.of(new Uint8Array([0x12, 0x34])), - }); + const framerService = new DefaultFramerService( + { + // random frameSize < 0xff + frameSize: Math.random() & 0xff, + // random padding boolean + padding: Math.random() > 0.5, + channel: Maybe.of(new Uint8Array([0x12, 0x34])), + }, + loggerService, + ); const command = new Uint8Array([]); // when diff --git a/packages/core/src/internal/device-session/utils/FramerUtils.test.ts b/packages/core/src/internal/device-session/utils/FramerUtils.test.ts new file mode 100644 index 000000000..8517d9c4c --- /dev/null +++ b/packages/core/src/internal/device-session/utils/FramerUtils.test.ts @@ -0,0 +1,33 @@ +import { FramerUtils } from "./FramerUtils"; + +describe("FramerUtils", () => { + describe("getLastBytesFrom", () => { + it("should return 2 same bytes of Uint8Array", () => { + // Arrange + const array = new Uint8Array([0x67, 0x89]); + const size = 2; + // Act + const result = FramerUtils.getLastBytesFrom(array, size); + // Assert + expect(result).toEqual(new Uint8Array([0x67, 0x89])); + }); + it("should return 2 last bytes of Uint8Array", () => { + // Arrange + const array = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + const size = 2; + // Act + const result = FramerUtils.getLastBytesFrom(array, size); + // Assert + expect(result).toEqual(new Uint8Array([9, 10])); + }); + it("should return empty Uint8Array", () => { + // Arrange + const array = new Uint8Array([]); + const size = 2; + // Act + const result = FramerUtils.getLastBytesFrom(array, size); + // Assert + expect(result).toEqual(new Uint8Array([])); + }); + }); +}); From 0661e96032d9b6bc0ff7e884a4a00217044da919 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Fri, 23 Feb 2024 09:17:47 +0100 Subject: [PATCH 102/253] =?UTF-8?q?=F0=9F=A9=B9=20(chore):=20Add=20case=20?= =?UTF-8?q?insensitive=20for=20branch=20regex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- danger/dangerfile.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/danger/dangerfile.ts b/danger/dangerfile.ts index 55bc2110a..84e2b9cfd 100644 --- a/danger/dangerfile.ts +++ b/danger/dangerfile.ts @@ -7,7 +7,7 @@ if (danger.github.pr.assignee === null) { } const branchRegex = - /^(feature|bugfix|support|chore|doc)\/(DSDK-[0-9]+|NO-ISSUE)\-.*/; + /^(feature|bugfix|support|chore|doc)\/((DSDK|dsdk)-[0-9]+|NO-ISSUE|no-issue)\-.*/; if (!branchRegex.test(danger.github.pr.head.ref)) { fail("Please fix the PR branch name to match the convention"); } From f6214fbdcbcedf1ea7ebac81508fe0b163c5d23a Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Fri, 23 Feb 2024 09:21:55 +0100 Subject: [PATCH 103/253] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(chore):=20Add=20l?= =?UTF-8?q?ink=20to=20the=20documentation=20in=20case=20of=20danger=20fail?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- danger/dangerfile.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/danger/dangerfile.ts b/danger/dangerfile.ts index 84e2b9cfd..fe0d79d60 100644 --- a/danger/dangerfile.ts +++ b/danger/dangerfile.ts @@ -9,18 +9,24 @@ if (danger.github.pr.assignee === null) { const branchRegex = /^(feature|bugfix|support|chore|doc)\/((DSDK|dsdk)-[0-9]+|NO-ISSUE|no-issue)\-.*/; if (!branchRegex.test(danger.github.pr.head.ref)) { - fail("Please fix the PR branch name to match the convention"); + fail( + "Please fix the PR branch name to match the convention, see [this documentation](https://ledgerhq.atlassian.net/wiki/spaces/WXP/pages/4527358147/DSDK+TS+Git+-+Github+conventions)" + ); } const titleRegex = /^.+ \([a-z]+\) \[(DSDK-[0-9]+|NO-ISSUE)\]: [A-Z].*/; if (!titleRegex.test(danger.github.pr.title)) { - fail("Please fix the PR title to match the convention."); + fail( + "Please fix the PR title to match the convention, see [this documentation](https://ledgerhq.atlassian.net/wiki/spaces/WXP/pages/4527358147/DSDK+TS+Git+-+Github+conventions)" + ); } const commitRegex = /^.+ \([a-z]+\): [A-Z].*/; for (let { commit } of danger.github.commits) { if (!commitRegex.test(commit.message)) { - fail("One or more commit message does not match the convention."); + fail( + "One or more commit message does not match the convention, see [this documentation](https://ledgerhq.atlassian.net/wiki/spaces/WXP/pages/4527358147/DSDK+TS+Git+-+Github+conventions)." + ); break; } } From ce8d9260e1d49346d674971644e5bfd77794a0d3 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Fri, 23 Feb 2024 09:24:04 +0100 Subject: [PATCH 104/253] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(chore):=20Change?= =?UTF-8?q?=20Danger=20job=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index d404d1a91..11a27149b 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -10,6 +10,7 @@ concurrency: jobs: danger: + name: Pass Danger check runs-on: [device-sdk-4xlarge-linux] steps: - uses: actions/checkout@v4 From fff6290d9f1c0addac73cd9ba41641bff0a66f96 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 23 Feb 2024 10:17:29 +0100 Subject: [PATCH 105/253] =?UTF-8?q?=F0=9F=9A=A8=20(repo):=20Make=20eslint?= =?UTF-8?q?=20not=20fail=20on=20warnings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 2 +- apps/sample/package.json | 2 +- packages/core/package.json | 2 +- packages/signer/package.json | 2 +- packages/trusted-apps/package.json | 2 +- packages/ui/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 52ac5a5d3..62c947fe3 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -26,7 +26,7 @@ jobs: run: pnpm typecheck - name: Test - run: pnpm test:coverage + run: pnpm test:coverage -- --max-warnings=0 - uses: sonarsource/sonarqube-scan-action@master env: diff --git a/apps/sample/package.json b/apps/sample/package.json index e7698bf93..15e9d2235 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -6,7 +6,7 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint --max-warnings=0", + "lint": "next lint", "lint:fix": "next lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/core/package.json b/packages/core/package.json index dd3806d0a..c74e59fa0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "rimraf lib && tsc -p tsconfig.prod.json && tsc-alias -p tsconfig.prod.json", "dev": "tsc && (concurrently \"tsc -w -p tsconfig.prod.json\" \"tsc-alias -w -p tsconfig.prod.json\")", - "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", + "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/signer/package.json b/packages/signer/package.json index 0a347e8e2..0bd507f48 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "rimraf lib && tsc", "dev": "tsc --watch", - "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", + "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 7f3fb6015..43ff257b3 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -9,7 +9,7 @@ ], "scripts": { "build": "rimraf lib && tsc", - "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", + "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/ui/package.json b/packages/ui/package.json index e302e07ff..1307b80de 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "rimraf lib && tsc", "dev": "tsc --watch", - "lint": "eslint --cache --ext .ts \"src\" --max-warnings=0", + "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", From c860c5c6209aa416dd6ce74a5e8aabf9638a03b4 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 26 Feb 2024 10:24:02 +0100 Subject: [PATCH 106/253] =?UTF-8?q?=F0=9F=9A=B8=20(other):=20Pull=20reques?= =?UTF-8?q?t=20flow=20triggers=20updated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 0f7243268..1622fffeb 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,5 +1,7 @@ name: pull_request -on: [pull_request] +on: + pull_request: + types: [opened, synchronize, reopened, edited] env: FORCE_COLOR: "1" From aa315cbe70e1d961716219e2c6213f1dbbcf42e7 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 23 Feb 2024 16:27:12 +0100 Subject: [PATCH 107/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20ConnectU?= =?UTF-8?q?seCase=20now=20returns=20a=20promise?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sample/src/components/MainView/index.tsx | 12 ++--- .../discovery/use-case/ConnectUseCase.test.ts | 45 +++++++------------ .../discovery/use-case/ConnectUseCase.ts | 22 ++++----- 3 files changed, 29 insertions(+), 50 deletions(-) diff --git a/apps/sample/src/components/MainView/index.tsx b/apps/sample/src/components/MainView/index.tsx index 641333eb3..9dbe2d5ab 100644 --- a/apps/sample/src/components/MainView/index.tsx +++ b/apps/sample/src/components/MainView/index.tsx @@ -70,16 +70,16 @@ export const MainView: React.FC = () => { useEffect(() => { if (discoveredDevice) { - sdk.connect({ deviceId: discoveredDevice.id }).subscribe({ - next: (connectedDevice) => { + sdk + .connect({ deviceId: discoveredDevice.id }) + .then((connectedDevice) => { console.log( `🦖 Response from connect: ${JSON.stringify(connectedDevice)} 🎉`, ); - }, - error: (error) => { + }) + .catch((error) => { console.error(`Error from connection or get-version`, error); - }, - }); + }); } }, [sdk, discoveredDevice]); diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts index 6a040aadb..33d94bfa1 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts @@ -24,41 +24,26 @@ describe("ConnectUseCase", () => { jest.restoreAllMocks(); }); - test("If connect use case encounter an error, return it", (done) => { - jest.spyOn(transport, "connect").mockImplementation(() => { - return Promise.resolve(Left(new UnknownDeviceError())); - }); - const usecase = new ConnectUseCase(transport); + test("If connect use case encounter an error, return it", async () => { + jest + .spyOn(transport, "connect") + .mockResolvedValue(Left(new UnknownDeviceError())); - const connect = usecase.execute({ deviceId: "" }); + const usecase = new ConnectUseCase(transport); - connect.subscribe({ - next: (connectedDevice) => { - done(connectedDevice); - }, - error: (error) => { - expect(error).toBeInstanceOf(UnknownDeviceError); - done(); - }, - }); + await expect(usecase.execute({ deviceId: "" })).rejects.toBeInstanceOf( + UnknownDeviceError, + ); }); - test("If connect is in success, return an observable connected device object", (done) => { - jest.spyOn(transport, "connect").mockImplementation(() => { - return Promise.resolve(Right(stubConnectedDevice)); - }); - const usecase = new ConnectUseCase(transport); + test("If connect is in success, return an observable connected device object", async () => { + jest + .spyOn(transport, "connect") + .mockResolvedValue(Promise.resolve(Right(stubConnectedDevice))); - const connect = usecase.execute({ deviceId: "" }); + const usecase = new ConnectUseCase(transport); - connect.subscribe({ - next: (connectedDevice) => { - expect(connectedDevice).toBe(stubConnectedDevice); - done(); - }, - error: (error) => { - done(error); - }, - }); + const connectedDevice = await usecase.execute({ deviceId: "" }); + expect(connectedDevice).toBe(stubConnectedDevice); }); }); diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts index 64cc98f62..a21836a0c 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -1,5 +1,4 @@ import { inject, injectable } from "inversify"; -import { from, Observable, of, switchMap } from "rxjs"; import { DeviceId } from "@internal/device-model/model/DeviceModel"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; @@ -21,18 +20,13 @@ export class ConnectUseCase { // Later: @inject(usbDiTypes.BleTransport) private bleTransport: BleTransport, ) {} - execute({ deviceId }: ConnectUseCaseArgs): Observable { - return from(this.usbHidTransport.connect({ deviceId })).pipe( - switchMap((either) => { - return either.caseOf({ - Left: (error) => { - throw error; - }, - Right: (connectedDevice) => { - return of(connectedDevice); - }, - }); - }), - ); + async execute({ deviceId }: ConnectUseCaseArgs): Promise { + const either = await this.usbHidTransport.connect({ deviceId }); + return either.caseOf({ + Left: (error) => { + throw error; + }, + Right: (connectedDevice) => connectedDevice, + }); } } From 9764634b39554132713cfb4a2f2dcd76df188a73 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 26 Feb 2024 10:59:37 +0100 Subject: [PATCH 108/253] =?UTF-8?q?=F0=9F=91=B7=20(devx):=20Update=20actio?= =?UTF-8?q?ns=20to=20latest=20versions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- actions/setup-toolchain-composite/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/actions/setup-toolchain-composite/action.yml b/actions/setup-toolchain-composite/action.yml index 02ee807d5..c1fc106a5 100644 --- a/actions/setup-toolchain-composite/action.yml +++ b/actions/setup-toolchain-composite/action.yml @@ -9,7 +9,7 @@ runs: with: node-version: 20 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v3 name: Install pnpm - name: Get pnpm store directory @@ -17,7 +17,7 @@ runs: run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - uses: actions/cache@v3 + - uses: actions/cache@v4 name: Setup pnpm cache with: path: ${{ env.STORE_PATH }} From 23b09ee0601f2c8665f7114b54d61757ce2bb268 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 26 Feb 2024 11:23:27 +0100 Subject: [PATCH 109/253] =?UTF-8?q?=F0=9F=91=B7=20(devx):=20Assign=20autho?= =?UTF-8?q?r=20+=20remove=20check=20in=20dangerjs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 4 +++- danger/dangerfile.ts | 6 ------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 1622fffeb..8b9388b2f 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -13,12 +13,14 @@ concurrency: jobs: danger: name: Pass Danger check - runs-on: [device-sdk-4xlarge-linux] + runs-on: [ubuntu-latest] steps: - uses: actions/checkout@v4 - uses: ./actions/setup-toolchain-composite + - uses: toshimaru/auto-author-assign@v2.1.0 + - name: Danger env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/danger/dangerfile.ts b/danger/dangerfile.ts index fe0d79d60..523916421 100644 --- a/danger/dangerfile.ts +++ b/danger/dangerfile.ts @@ -1,11 +1,5 @@ import { danger, fail } from "danger"; -if (danger.github.pr.assignee === null) { - fail( - "Please assign someone to merge this PR, and optionally include people who should review." - ); -} - const branchRegex = /^(feature|bugfix|support|chore|doc)\/((DSDK|dsdk)-[0-9]+|NO-ISSUE|no-issue)\-.*/; if (!branchRegex.test(danger.github.pr.head.ref)) { From 629f6412187137e3bd85b9645d2fc9488b52b57c Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 21 Feb 2024 16:04:43 +0100 Subject: [PATCH 110/253] =?UTF-8?q?=F0=9F=8E=A8=20(core):=20Add=20@api=20a?= =?UTF-8?q?lias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/config/eslint/index.js | 2 +- packages/core/jest.config.ts | 1 + packages/core/tsconfig.json | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index 38fc037f9..243cc86e6 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -58,7 +58,7 @@ module.exports = { // Packages. `react` related packages come first. ["^react", "^@?\\w"], // Internal packages. - ["^(@|@internal|@root)(/.*|$)"], + ["^(@|@api|@internal|@root)(/.*|$)"], // Other relative imports. Put same-folder imports and `.` last. ["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"], // Style imports. diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index 0d000e5f9..da6381a71 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -12,6 +12,7 @@ const config: JestConfigWithTsJest = { "!src/api/index.ts", ], moduleNameMapper: { + "^@api/(.*)$": "/src/api/$1", "^@internal/(.*)$": "/src/internal/$1", "^@root/(.*)$": "/$1", }, diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 0631edecd..60095c963 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -4,6 +4,7 @@ "outDir": "./lib", "baseUrl": ".", "paths": { + "@api/*": ["src/api/*"], "@internal/*": ["src/internal/*"], "@root/*": ["./*"] } From 8621a5453e6156e63152c86ed7f3164153320128 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 22 Feb 2024 15:45:23 +0100 Subject: [PATCH 111/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Replace?= =?UTF-8?q?=20Log=20object=20with=20optional=20LogOptions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/ConsoleLogger.test.ts | 85 +++----------- packages/core/src/api/ConsoleLogger.ts | 40 ++----- .../config/service/DefaultConfigService.ts | 19 +--- .../service/DefaultLoggerService.test.ts | 53 +++------ .../logger/service/DefaultLoggerService.ts | 22 ++-- .../src/internal/logger/service/Log.test.ts | 37 ------- .../core/src/internal/logger/service/Log.ts | 30 +---- .../logger/service/LogBuilder.test.ts | 104 ------------------ .../src/internal/logger/service/LogBuilder.ts | 50 --------- .../internal/logger/service/LoggerService.ts | 10 +- 10 files changed, 66 insertions(+), 384 deletions(-) delete mode 100644 packages/core/src/internal/logger/service/Log.test.ts delete mode 100644 packages/core/src/internal/logger/service/LogBuilder.test.ts delete mode 100644 packages/core/src/internal/logger/service/LogBuilder.ts diff --git a/packages/core/src/api/ConsoleLogger.test.ts b/packages/core/src/api/ConsoleLogger.test.ts index 86b8b6f47..fceaec42b 100644 --- a/packages/core/src/api/ConsoleLogger.test.ts +++ b/packages/core/src/api/ConsoleLogger.test.ts @@ -1,6 +1,6 @@ -import { LogBuilder } from "@internal/logger/service/LogBuilder"; +import { LogLevel, LogOptions } from "@internal/logger/service/Log"; -import { ConsoleLogger, Log, LogLevel } from "./ConsoleLogger"; +import { ConsoleLogger } from "./ConsoleLogger"; const warn = jest.spyOn(console, "warn").mockImplementation(jest.fn()); const info = jest.spyOn(console, "info").mockImplementation(jest.fn()); @@ -8,33 +8,15 @@ const debug = jest.spyOn(console, "debug").mockImplementation(jest.fn()); const error = jest.spyOn(console, "error").mockImplementation(jest.fn()); const log = jest.spyOn(console, "log").mockImplementation(jest.fn()); -class CustomError { - _tag = "CustomError"; - originalError?: Error; - constructor(originalError?: Error) { - this.originalError = originalError; - } -} - let logger: ConsoleLogger; -let logObject: Log; -describe("ConsoleLogger", () => { - describe("exports", () => { - it("Log", () => { - const lgg = new Log({ - messages: [], - data: {}, - context: {}, - }); - expect(lgg).toBeInstanceOf(Log); - }); - }); +const options: LogOptions = { data: { key: "value" } }; +const message = "message"; +describe("ConsoleLogger", () => { describe("log", () => { beforeEach(() => { jest.clearAllMocks(); logger = new ConsoleLogger(); - logObject = LogBuilder.build({}, {}, "test"); }); afterAll(() => { @@ -42,63 +24,28 @@ describe("ConsoleLogger", () => { }); it("should log Info level", () => { - logger.log(LogLevel.Info, logObject); - expect(info).toHaveBeenCalledWith("[LOGGER]", "test"); + logger.log(LogLevel.Info, message, options); + expect(info).toHaveBeenCalledWith("[LOGGER]", message); }); it("should log Warn level", () => { - logger.log(LogLevel.Warning, logObject); - expect(warn).toHaveBeenCalledWith("[LOGGER]", "test"); + logger.log(LogLevel.Warning, message, options); + expect(warn).toHaveBeenCalledWith("[LOGGER]", message); }); it("should log Debug level", () => { - logger.log(LogLevel.Debug, logObject); - expect(debug).toHaveBeenCalledWith("[LOGGER]", "test"); + logger.log(LogLevel.Debug, message, options); + expect(debug).toHaveBeenCalledWith("[LOGGER]", message); }); it("should default to Log level if none present", () => { - // @ts-expect-error disable for tests - logger.log(null, logObject); - expect(log).toHaveBeenCalledWith("[LOGGER]", "test"); + logger.log(LogLevel.Fatal, message, options); + expect(log).toHaveBeenCalledWith("[LOGGER]", message); }); - describe("error", () => { - it("should log Error level", () => { - const err = new Error("test"); - logObject = LogBuilder.buildFromError(err); - logger.log(LogLevel.Error, logObject); - expect(warn).toHaveBeenCalledWith("[LOGGER]", "test"); - expect(error).toHaveBeenCalledWith(err); - }); - - it("should log Error level with custom error and original error", () => { - const originalError = new Error("test error"); - const err = new CustomError(originalError); - logObject = LogBuilder.buildFromError(err); - logger.log(LogLevel.Error, logObject); - expect(logObject.context.tag).toBe("CustomError"); - expect(warn).toHaveBeenCalledWith("[LOGGER]", "test error"); - expect(error).toHaveBeenCalledWith(originalError); - }); - - it("should log Error level with custom error and no original error", () => { - const err = new CustomError(); - logObject = LogBuilder.buildFromError(err); - logger.log(LogLevel.Error, logObject); - expect(logObject.context.tag).toBe("CustomError"); - expect(warn).toHaveBeenCalledWith("[LOGGER]", "CustomError"); - expect(error).toHaveBeenCalledWith(err); - }); - - it("should log Warn level if no error type in context", () => { - logObject = LogBuilder.build({ type: "test" }, {}, "test"); - logger.log(LogLevel.Error, logObject); - expect(warn).toHaveBeenCalledWith( - "[LOGGER]", - "[type !== 'error']", - "test", - ); - }); + it("should log Error level", () => { + logger.log(LogLevel.Error, message, options); + expect(error).toHaveBeenCalledWith("[LOGGER]", message); }); }); }); diff --git a/packages/core/src/api/ConsoleLogger.ts b/packages/core/src/api/ConsoleLogger.ts index c07985c3a..5f3497f00 100644 --- a/packages/core/src/api/ConsoleLogger.ts +++ b/packages/core/src/api/ConsoleLogger.ts @@ -1,49 +1,27 @@ -import { Log, LoggerSubscriber, LogLevel } from "@internal/logger/service/Log"; - -import { SdkError } from "./Error"; - -export { Log, LogLevel }; -export type { - LogContext, - LogData, +import { LoggerSubscriber, - LogMessage, + LogLevel, + LogOptions, } from "@internal/logger/service/Log"; export class ConsoleLogger implements LoggerSubscriber { - log(level: LogLevel, log: Log): void { + log(level: LogLevel, message: string, _options: LogOptions): void { switch (level) { case LogLevel.Info: - console.info("[LOGGER]", ...log.messages); + console.info("[LOGGER]", message); break; case LogLevel.Warning: - console.warn("[LOGGER]", ...log.messages); + console.warn("[LOGGER]", message); break; case LogLevel.Debug: - console.debug("[LOGGER]", ...log.messages); + console.debug("[LOGGER]", message); break; case LogLevel.Error: { - const { type, tag } = log.context; - if (type === "error" && tag) { - const { error } = log.data as { error: SdkError }; - const { originalError } = error; - console.warn("[LOGGER]", ...log.messages); - console.error(originalError ?? error); - break; - } - - if (type === "error" && !tag) { - const { error } = log.data as { error: Error }; - console.warn("[LOGGER]", ...log.messages); - console.error(error); - break; - } - - console.warn("[LOGGER]", "[type !== 'error']", ...log.messages); + console.error("[LOGGER]", message); break; } default: - console.log("[LOGGER]", ...log.messages); + console.log("[LOGGER]", message); } } } diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index 1134f406b..a639670b9 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -7,7 +7,6 @@ import type { import { types as configTypes } from "@internal/config/di/configTypes"; import { Config } from "@internal/config/model/Config"; import { types as loggerTypes } from "@internal/logger/di/loggerTypes"; -import { LogBuilder } from "@internal/logger/service/LogBuilder"; import type { LoggerService } from "@internal/logger/service/LoggerService"; import { ConfigService } from "./ConfigService"; @@ -29,29 +28,21 @@ export class DefaultConfigService implements ConfigService { async getSdkConfig(): Promise { // Returns an Either - const localConfig = this._local.getConfig().ifLeft((err) => { - const log = LogBuilder.buildFromError(err); - log.addMessage("Local config not available"); - this._logger.error(log); + const localConfig = this._local.getConfig().ifLeft((error) => { + this._logger.error("Local config not available", { data: { error } }); }); if (localConfig.isRight()) { const val = localConfig.extract(); - const log = LogBuilder.build({ type: "config" }, { config: val }); - log.addMessage("Local config available"); - log.addMessage(val.version); - log.addMessage(val.name); - this._logger.info(log); + this._logger.info("Local config available", { data: { config: val } }); return val; } return this._remote.getConfig().then((config) => { return config - .mapLeft((err) => { + .mapLeft((error) => { // Here we handle the error and return a default value - const log = LogBuilder.buildFromError(err); - log.addMessage("Remote config not available"); - this._logger.error(log); + this._logger.error("Local config available", { data: { error } }); return { name: "DeadSdk", version: "0.0.0-dead.1" }; }) .extract(); diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts index 0c5e7a4ba..37d9a9a4f 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts @@ -1,13 +1,13 @@ import { ConsoleLogger } from "../../../api/ConsoleLogger"; import { DefaultLoggerService } from "./DefaultLoggerService"; import { LogLevel } from "./Log"; -import { LogBuilder } from "./LogBuilder"; jest.mock("../../../api/ConsoleLogger"); let service: DefaultLoggerService; - let subscriber: jest.Mocked; +const message = "message"; +const options = { data: { key: "value" } }; describe("LoggerService", () => { beforeEach(() => { @@ -17,71 +17,50 @@ describe("LoggerService", () => { }); it("should call subscriber.log with the correct log object", () => { - const log = LogBuilder.build({ type: "test" }, { key: "value" }, "message"); - service.info(log); - expect(subscriber.log).toHaveBeenCalledWith(LogLevel.Info, log); + service.info(message, options); + expect(subscriber.log).toHaveBeenCalledWith( + LogLevel.Info, + message, + options, + ); }); describe("info", () => { it("should call _log with the correct LogLevel", () => { - const log = LogBuilder.build( - { type: "test" }, - { key: "value" }, - "message", - ); - const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - service.info(log); - expect(spy).toHaveBeenCalledWith(LogLevel.Info, log); + service.info(message, options); + expect(spy).toHaveBeenCalledWith(LogLevel.Info, message, options); spy.mockRestore(); }); }); describe("debug", () => { it("should have the correct LogLevel", () => { - const log = LogBuilder.build( - { type: "test" }, - { key: "value" }, - "message", - ); - const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - service.debug(log); - expect(spy).toHaveBeenCalledWith(LogLevel.Debug, log); + service.debug(message, options); + expect(spy).toHaveBeenCalledWith(LogLevel.Debug, message, options); spy.mockRestore(); }); }); describe("warn", () => { it("should have the correct LogLevel", () => { - const log = LogBuilder.build( - { type: "test" }, - { key: "value" }, - "message", - ); - const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - service.warn(log); - expect(spy).toHaveBeenCalledWith(LogLevel.Warning, log); + service.warn(message, options); + expect(spy).toHaveBeenCalledWith(LogLevel.Warning, message, options); spy.mockRestore(); }); }); describe("error", () => { it("should have the correct LogLevel", () => { - const log = LogBuilder.buildFromError( - new Error("test"), - { type: "test" }, - { key: "value" }, - ); - const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - service.error(log); - expect(spy).toHaveBeenCalledWith(LogLevel.Error, log); + service.error(message, options); + expect(spy).toHaveBeenCalledWith(LogLevel.Error, message, options); spy.mockRestore(); }); }); diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.ts index 9b028c6ea..2cf82d5b1 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.ts @@ -1,6 +1,6 @@ import { injectable } from "inversify"; -import { Log, LoggerSubscriber, LogLevel } from "./Log"; +import { LoggerSubscriber, LogLevel,LogOptions } from "./Log"; import { LoggerService } from "./LoggerService"; @injectable() @@ -10,25 +10,25 @@ export class DefaultLoggerService implements LoggerService { this.subscribers = subscribers; } - _log(level: LogLevel, log: Log): void { + _log(level: LogLevel, message: string, options?: LogOptions): void { this.subscribers.forEach((subscriber) => { - subscriber.log(level, log); + subscriber.log(level, message, options); }); } - info(log: Log): void { - this._log(LogLevel.Info, log); + info(message: string, options?: LogOptions): void { + this._log(LogLevel.Info, message, options); } - warn(log: Log): void { - this._log(LogLevel.Warning, log); + warn(message: string, options?: LogOptions): void { + this._log(LogLevel.Warning, message, options); } - debug(log: Log): void { - this._log(LogLevel.Debug, log); + debug(message: string, options?: LogOptions): void { + this._log(LogLevel.Debug, message, options); } - error(log: Log): void { - this._log(LogLevel.Error, log); + error(message: string, options?: LogOptions): void { + this._log(LogLevel.Error, message, options); } } diff --git a/packages/core/src/internal/logger/service/Log.test.ts b/packages/core/src/internal/logger/service/Log.test.ts deleted file mode 100644 index 49a5dca0f..000000000 --- a/packages/core/src/internal/logger/service/Log.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Log } from "./Log"; - -const d = jest.spyOn(Date, "now").mockReturnValue(12346); - -describe("Log", () => { - beforeEach(() => { - d.mockClear(); - }); - - it("should create a Log instance", () => { - const log = new Log({ - messages: ["test"], - data: {}, - context: {}, - }); - expect(log).toBeInstanceOf(Log); - }); - - it("should have the correct timestamp", () => { - const log = new Log({ - messages: ["test"], - data: {}, - context: {}, - }); - expect(log.timestamp).toBe(12346); - }); - - it("should add a message", () => { - const log = new Log({ - messages: ["test"], - data: {}, - context: {}, - }); - log.addMessage("test2"); - expect(log.messages).toEqual(["test", "test2"]); - }); -}); diff --git a/packages/core/src/internal/logger/service/Log.ts b/packages/core/src/internal/logger/service/Log.ts index bfc7d1d44..a64815ed4 100644 --- a/packages/core/src/internal/logger/service/Log.ts +++ b/packages/core/src/internal/logger/service/Log.ts @@ -14,34 +14,12 @@ export type LogContext = Partial<{ export type LogData = Record; -export type LogMessage = string; - -export type LogContructorArgs = { - messages: LogMessage[]; - data: LogData; - context: LogContext; +export type LogOptions = { + data?: LogData; + context?: LogContext; timestamp?: number; }; export interface LoggerSubscriber { - log(level: LogLevel, log: Log): void; -} - -export class Log { - messages: LogMessage[]; - data: Record = {}; // use Maybe type for null/undefined ? - context: LogContext = {}; // use Maybe type for null/undefined ? - timestamp: number = Date.now(); - - constructor({ messages, data, context, timestamp }: LogContructorArgs) { - this.messages = messages; - this.data = data; - this.context = context; - this.timestamp = timestamp ?? this.timestamp; - } - - addMessage(message: string) { - this.messages.push(message); - return this; - } + log(level: LogLevel, message: string, options?: LogOptions): void; } diff --git a/packages/core/src/internal/logger/service/LogBuilder.test.ts b/packages/core/src/internal/logger/service/LogBuilder.test.ts deleted file mode 100644 index cd10cb0a7..000000000 --- a/packages/core/src/internal/logger/service/LogBuilder.test.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Log } from "./Log"; -import { LogBuilder } from "./LogBuilder"; - -class CustomError { - _tag = "CustomError"; - originalError?: Error; - - constructor(originalError?: Error) { - this.originalError = originalError; - } -} - -let log: Log; -const d = jest.spyOn(Date, "now").mockReturnValue(12345); - -describe("LogBuilder", () => { - beforeEach(() => { - d.mockClear(); - }); - - describe("build", () => { - it("should create a Log instance with context and data", () => { - log = LogBuilder.build( - { - type: "test", - }, - { - key: "value", - }, - "test", - "test2", - ); - - expect(log).toBeInstanceOf(Log); - expect(log.context).toEqual({ type: "test" }); - expect(log.data).toEqual({ key: "value" }); - expect(log.messages).toEqual(["test", "test2"]); - }); - - it("should create a Log instance with an empty context and data", () => { - log = LogBuilder.build(undefined, undefined, "test"); - expect(log.context).toEqual({}); - expect(log.data).toEqual({}); - expect(log.messages).toEqual(["test"]); - }); - }); - - describe("buildWithTimestamp", () => { - it("should create a Log instance with a timestamp", () => { - log = LogBuilder.buildWithTimestamp( - { type: "test" }, - { key: "value" }, - 12345, - "test", - ); - - expect(log).toBeInstanceOf(Log); - expect(log.timestamp).toBe(12345); - expect(log.context).toEqual({ type: "test" }); - expect(log.data).toEqual({ key: "value" }); - expect(log.messages).toEqual(["test"]); - }); - - it("should create a Log instance with a timestamp and no context or data", () => { - log = LogBuilder.buildWithTimestamp(undefined, undefined, 12345, "test"); - expect(log.context).toEqual({}); - expect(log.data).toEqual({}); - expect(log.messages).toEqual(["test"]); - }); - }); - - describe("buildFromError", () => { - it("should create a Log instance with a normal Error", () => { - log = LogBuilder.buildFromError(new Error("test"), {}, { key: "value" }); - expect(log).toBeInstanceOf(Log); - expect(log.context).toEqual({ type: "error" }); - expect(log.messages).toEqual(["test"]); - }); - - describe("custom Error", () => { - it("with no originalError should create a Log", () => { - log = LogBuilder.buildFromError(new CustomError(), { type: "error" }); - expect(log).toBeInstanceOf(Log); - expect(log.context).toStrictEqual({ - type: "error", - tag: "CustomError", - }); - expect(log.messages).toEqual(["CustomError"]); - }); - - it("with originalError should create a Log", () => { - const err = new CustomError(new Error("test")); - log = LogBuilder.buildFromError( - err, - { type: "error" }, - { key: "value" }, - ); - expect(log).toBeInstanceOf(Log); - expect(log.messages).toEqual(["test"]); - expect(log.data).toEqual({ key: "value", error: err }); - }); - }); - }); -}); diff --git a/packages/core/src/internal/logger/service/LogBuilder.ts b/packages/core/src/internal/logger/service/LogBuilder.ts deleted file mode 100644 index a4fe133ea..000000000 --- a/packages/core/src/internal/logger/service/LogBuilder.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { SdkError } from "@root/src/api/Error"; - -import { Log, LogContext, LogData, LogMessage } from "./Log"; - -export class LogBuilder { - static build( - context: LogContext = {}, - data: LogData = {}, - ...messages: LogMessage[] - ) { - return new Log({ context, data, messages }); - } - - static buildWithTimestamp( - context: LogContext = {}, - data: LogData = {}, - timestamp: number, - ...messages: LogMessage[] - ) { - return new Log({ context, data, messages, timestamp }); - } - - static buildFromError( - error: SdkError | Error, - context: LogContext = { type: "error" }, - data: LogData = {}, - timestamp?: number, - ) { - const isSdkError = "_tag" in error; - const message = isSdkError - ? error.originalError - ? error.originalError.message - : error._tag - : error.message; - - return new Log({ - context: { - ...context, - type: "error", - tag: isSdkError ? error._tag : undefined, - }, - data: { - ...data, - error, - }, - messages: [message], - timestamp, - }); - } -} diff --git a/packages/core/src/internal/logger/service/LoggerService.ts b/packages/core/src/internal/logger/service/LoggerService.ts index 9ca7697a9..ef6d8c38e 100644 --- a/packages/core/src/internal/logger/service/LoggerService.ts +++ b/packages/core/src/internal/logger/service/LoggerService.ts @@ -1,10 +1,10 @@ -import { Log, LoggerSubscriber } from "./Log"; +import { LoggerSubscriber,LogOptions } from "./Log"; export interface LoggerService { subscribers: LoggerSubscriber[]; - error(log: Log): void; - warn(log: Log): void; - info(log: Log): void; - debug(log: Log): void; + error(message: string, options?: LogOptions): void; + warn(message: string, options?: LogOptions): void; + info(message: string, options?: LogOptions): void; + debug(message: string, options?: LogOptions): void; } From 462b9bd7ebec956329e0c93c2ba133a1b3528efc Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 22 Feb 2024 17:50:57 +0100 Subject: [PATCH 112/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Move=20L?= =?UTF-8?q?oggerSubscriber=20in=20api=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/DeviceSdk.test.ts | 4 ++-- packages/core/src/api/DeviceSdkBuilder.test.ts | 4 ++-- packages/core/src/api/DeviceSdkBuilder.ts | 3 +-- packages/core/src/api/index.ts | 11 +++-------- .../__mocks__/ConsoleLogger.ts | 0 .../core/src/api/logger-subscriber/model/LogLevel.ts | 7 +++++++ .../logger-subscriber/model/LogOptions.ts} | 12 ------------ .../service}/ConsoleLogger.test.ts | 3 ++- .../{ => logger-subscriber/service}/ConsoleLogger.ts | 8 +++----- .../logger-subscriber/service/LoggerSubscriber.ts | 6 ++++++ packages/core/src/di.ts | 2 +- packages/core/src/internal/logger/di/loggerModule.ts | 2 +- .../logger/service/DefaultLoggerService.test.ts | 7 ++++--- .../internal/logger/service/DefaultLoggerService.ts | 5 ++++- .../src/internal/logger/service/LoggerService.ts | 3 ++- .../logger/service/__mocks__/DefaultLoggerService.ts | 4 ++-- 16 files changed, 40 insertions(+), 41 deletions(-) rename packages/core/src/api/{ => logger-subscriber}/__mocks__/ConsoleLogger.ts (100%) create mode 100644 packages/core/src/api/logger-subscriber/model/LogLevel.ts rename packages/core/src/{internal/logger/service/Log.ts => api/logger-subscriber/model/LogOptions.ts} (50%) rename packages/core/src/api/{ => logger-subscriber/service}/ConsoleLogger.test.ts (92%) rename packages/core/src/api/{ => logger-subscriber/service}/ConsoleLogger.ts (72%) create mode 100644 packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts index 7ff82e726..670da2eb9 100644 --- a/packages/core/src/api/DeviceSdk.test.ts +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -3,11 +3,11 @@ import { LocalConfigDataSource } from "@internal/config/data/ConfigDataSource"; import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; import { types as ConfigTypes } from "@internal/config/di/configTypes"; +import { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; import pkg from "../../package.json"; -import { ConsoleLogger } from "./ConsoleLogger"; import { DeviceSdk } from "./DeviceSdk"; -jest.mock("./ConsoleLogger"); +jest.mock("./logger-subscriber/service/ConsoleLogger"); let sdk: DeviceSdk; let logger: ConsoleLogger; diff --git a/packages/core/src/api/DeviceSdkBuilder.test.ts b/packages/core/src/api/DeviceSdkBuilder.test.ts index 7a89801fa..33bc480ab 100644 --- a/packages/core/src/api/DeviceSdkBuilder.test.ts +++ b/packages/core/src/api/DeviceSdkBuilder.test.ts @@ -1,8 +1,8 @@ -import { ConsoleLogger } from "./ConsoleLogger"; +import { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; import { DeviceSdk } from "./DeviceSdk"; import { LedgerDeviceSdkBuilder } from "./DeviceSdkBuilder"; -jest.mock("./ConsoleLogger"); +jest.mock("./logger-subscriber/service/ConsoleLogger"); let builder: LedgerDeviceSdkBuilder; let logger: ConsoleLogger; diff --git a/packages/core/src/api/DeviceSdkBuilder.ts b/packages/core/src/api/DeviceSdkBuilder.ts index ecb44de6d..9811c4269 100644 --- a/packages/core/src/api/DeviceSdkBuilder.ts +++ b/packages/core/src/api/DeviceSdkBuilder.ts @@ -1,5 +1,4 @@ -import { LoggerSubscriber } from "@internal/logger/service/Log"; - +import { LoggerSubscriber } from "./logger-subscriber/service/LoggerSubscriber"; import { DeviceSdk } from "./DeviceSdk"; export class LedgerDeviceSdkBuilder { diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index d20bedce4..6f19f06de 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -1,15 +1,10 @@ "use strict"; -export type { - LogContext, - LogData, - LoggerSubscriber, - LogLevel, - LogMessage, -} from "./ConsoleLogger"; -export { ConsoleLogger, Log } from "./ConsoleLogger"; export { DeviceSdk } from "./DeviceSdk"; export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; +export { LogLevel } from "./logger-subscriber/model/LogLevel"; +export type { LogOptions } from "./logger-subscriber/model/LogOptions"; +export { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; // [SHOULD] be exported from another file export type { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; diff --git a/packages/core/src/api/__mocks__/ConsoleLogger.ts b/packages/core/src/api/logger-subscriber/__mocks__/ConsoleLogger.ts similarity index 100% rename from packages/core/src/api/__mocks__/ConsoleLogger.ts rename to packages/core/src/api/logger-subscriber/__mocks__/ConsoleLogger.ts diff --git a/packages/core/src/api/logger-subscriber/model/LogLevel.ts b/packages/core/src/api/logger-subscriber/model/LogLevel.ts new file mode 100644 index 000000000..b18af6ab1 --- /dev/null +++ b/packages/core/src/api/logger-subscriber/model/LogLevel.ts @@ -0,0 +1,7 @@ +export enum LogLevel { + Fatal = "FATAL", + Error = "ERROR", + Warning = "WARNING", + Info = "INFO", + Debug = "DEBUG", +} diff --git a/packages/core/src/internal/logger/service/Log.ts b/packages/core/src/api/logger-subscriber/model/LogOptions.ts similarity index 50% rename from packages/core/src/internal/logger/service/Log.ts rename to packages/core/src/api/logger-subscriber/model/LogOptions.ts index a64815ed4..647ad6278 100644 --- a/packages/core/src/internal/logger/service/Log.ts +++ b/packages/core/src/api/logger-subscriber/model/LogOptions.ts @@ -1,11 +1,3 @@ -export enum LogLevel { - Fatal = "FATAL", - Error = "ERROR", - Warning = "WARNING", - Info = "INFO", - Debug = "DEBUG", -} - export type LogContext = Partial<{ type: string; tag: string; @@ -19,7 +11,3 @@ export type LogOptions = { context?: LogContext; timestamp?: number; }; - -export interface LoggerSubscriber { - log(level: LogLevel, message: string, options?: LogOptions): void; -} diff --git a/packages/core/src/api/ConsoleLogger.test.ts b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts similarity index 92% rename from packages/core/src/api/ConsoleLogger.test.ts rename to packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts index fceaec42b..dfbb9c9e5 100644 --- a/packages/core/src/api/ConsoleLogger.test.ts +++ b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts @@ -1,4 +1,5 @@ -import { LogLevel, LogOptions } from "@internal/logger/service/Log"; +import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; +import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; import { ConsoleLogger } from "./ConsoleLogger"; diff --git a/packages/core/src/api/ConsoleLogger.ts b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts similarity index 72% rename from packages/core/src/api/ConsoleLogger.ts rename to packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts index 5f3497f00..846cca463 100644 --- a/packages/core/src/api/ConsoleLogger.ts +++ b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts @@ -1,8 +1,6 @@ -import { - LoggerSubscriber, - LogLevel, - LogOptions, -} from "@internal/logger/service/Log"; +import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; +import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; +import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; export class ConsoleLogger implements LoggerSubscriber { log(level: LogLevel, message: string, _options: LogOptions): void { diff --git a/packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts b/packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts new file mode 100644 index 000000000..40361996c --- /dev/null +++ b/packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts @@ -0,0 +1,6 @@ +import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; +import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; + +export interface LoggerSubscriber { + log(level: LogLevel, message: string, options?: LogOptions): void; +} diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index a6c733816..8562e67e7 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -1,5 +1,6 @@ import { Container } from "inversify"; +import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; // Uncomment this line to enable the logger middleware // import { makeLoggerMiddleware } from "inversify-logger-middleware"; import { configModuleFactory } from "@internal/config/di/configModule"; @@ -7,7 +8,6 @@ import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelM import { deviceSessionModuleFactory } from "@internal/device-session/di/deviceSessionModule"; import { discoveryModuleFactory } from "@internal/discovery/di/discoveryModule"; import { loggerModuleFactory } from "@internal/logger/di/loggerModule"; -import { LoggerSubscriber } from "@internal/logger/service/Log"; import { usbModuleFactory } from "@internal/usb/di/usbModule"; // Uncomment this line to enable the logger middleware diff --git a/packages/core/src/internal/logger/di/loggerModule.ts b/packages/core/src/internal/logger/di/loggerModule.ts index b60ca374e..ee95c28b9 100644 --- a/packages/core/src/internal/logger/di/loggerModule.ts +++ b/packages/core/src/internal/logger/di/loggerModule.ts @@ -1,7 +1,7 @@ import { ContainerModule } from "inversify"; +import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; -import { LoggerSubscriber } from "@internal/logger/service/Log"; import { types } from "./loggerTypes"; diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts index 37d9a9a4f..ee7a3c8f6 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts @@ -1,8 +1,9 @@ -import { ConsoleLogger } from "../../../api/ConsoleLogger"; +import { LogLevel } from "@api/index"; +import { ConsoleLogger } from "@api/logger-subscriber/service/ConsoleLogger"; + import { DefaultLoggerService } from "./DefaultLoggerService"; -import { LogLevel } from "./Log"; -jest.mock("../../../api/ConsoleLogger"); +jest.mock("../../../api/logger-subscriber/service/ConsoleLogger"); let service: DefaultLoggerService; let subscriber: jest.Mocked; diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.ts index 2cf82d5b1..0636ef7c4 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.ts @@ -1,6 +1,9 @@ import { injectable } from "inversify"; -import { LoggerSubscriber, LogLevel,LogOptions } from "./Log"; +import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; +import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; +import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; + import { LoggerService } from "./LoggerService"; @injectable() diff --git a/packages/core/src/internal/logger/service/LoggerService.ts b/packages/core/src/internal/logger/service/LoggerService.ts index ef6d8c38e..4173d1e3c 100644 --- a/packages/core/src/internal/logger/service/LoggerService.ts +++ b/packages/core/src/internal/logger/service/LoggerService.ts @@ -1,4 +1,5 @@ -import { LoggerSubscriber,LogOptions } from "./Log"; +import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; +import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; export interface LoggerService { subscribers: LoggerSubscriber[]; diff --git a/packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts b/packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts index d395b51f8..e9b4bb3d7 100644 --- a/packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts +++ b/packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts @@ -1,5 +1,5 @@ -import { LoggerSubscriber } from "@internal/logger/service/Log"; -import { LoggerService } from "@internal/logger/service/LoggerService"; +import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; +import type { LoggerService } from "@internal/logger/service/LoggerService"; export class DefaultLoggerService implements LoggerService { subscribers: LoggerSubscriber[] = []; From cd5ae622b4a3780bef93adfd164e81103406ed59 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 22 Feb 2024 17:01:28 +0100 Subject: [PATCH 113/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Use=20Lo?= =?UTF-8?q?ggerService=20inside=20WebUsbHidTransport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../discovery/di/discoveryModule.test.ts | 2 + .../discovery/use-case/ConnectUseCase.test.ts | 6 +- .../use-case/StartDiscoveringUseCase.test.ts | 6 +- .../use-case/StopDiscoveringUseCase.test.ts | 6 +- .../src/internal/usb/di/usbModule.test.ts | 2 + .../usb/transport/WebUsbHidTransport.test.ts | 76 +++++++++++++++---- .../usb/transport/WebUsbHidTransport.ts | 57 +++++++++----- 7 files changed, 116 insertions(+), 39 deletions(-) diff --git a/packages/core/src/internal/discovery/di/discoveryModule.test.ts b/packages/core/src/internal/discovery/di/discoveryModule.test.ts index 016a9530a..cec95871c 100644 --- a/packages/core/src/internal/discovery/di/discoveryModule.test.ts +++ b/packages/core/src/internal/discovery/di/discoveryModule.test.ts @@ -4,6 +4,7 @@ import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelM import { ConnectUseCase } from "@internal/discovery/use-case/ConnectUseCase"; import { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; import { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; +import { loggerModuleFactory } from "@internal/logger/di/loggerModule"; import { usbModuleFactory } from "@internal/usb/di/usbModule"; import { discoveryDiTypes } from "./discoveryDiTypes"; @@ -18,6 +19,7 @@ describe("discoveryModuleFactory", () => { container.load( mod, // The following modules are injected into discovery module + loggerModuleFactory(), usbModuleFactory(), deviceModelModuleFactory(), ); diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts index 33d94bfa1..f243432a9 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts @@ -2,6 +2,8 @@ import { Left, Right } from "purify-ts"; import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { DeviceModel } from "@internal/device-model/model/DeviceModel"; +import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; +import { LoggerService } from "@internal/logger/service/LoggerService"; import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; import { UnknownDeviceError } from "@internal/usb/model/Errors"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; @@ -9,6 +11,7 @@ import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { ConnectUseCase } from "./ConnectUseCase"; let transport: WebUsbHidTransport; +let logger: LoggerService; describe("ConnectUseCase", () => { const stubConnectedDevice: ConnectedDevice = { @@ -17,7 +20,8 @@ describe("ConnectUseCase", () => { }; beforeAll(() => { - transport = new WebUsbHidTransport({} as DeviceModelDataSource); + logger = new DefaultLoggerService([]); + transport = new WebUsbHidTransport({} as DeviceModelDataSource, logger); }); afterAll(() => { diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts index 030363c12..fa8e44be9 100644 --- a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts @@ -2,12 +2,15 @@ import { of } from "rxjs"; import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { DeviceModel } from "@internal/device-model/model/DeviceModel"; +import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; +import { LoggerService } from "@internal/logger/service/LoggerService"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { DiscoveredDevice } from "@root/src"; import { StartDiscoveringUseCase } from "./StartDiscoveringUseCase"; let transport: WebUsbHidTransport; +let logger: LoggerService; describe("StartDiscoveringUseCase", () => { const stubDiscoveredDevice: DiscoveredDevice = { @@ -16,7 +19,8 @@ describe("StartDiscoveringUseCase", () => { }; beforeEach(() => { - transport = new WebUsbHidTransport({} as DeviceModelDataSource); + logger = new DefaultLoggerService([]); + transport = new WebUsbHidTransport({} as DeviceModelDataSource, logger); }); afterEach(() => { diff --git a/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts index 9cfc058e3..a8a1e64bf 100644 --- a/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts @@ -1,13 +1,17 @@ import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; +import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; +import { LoggerService } from "@internal/logger/service/LoggerService"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { StopDiscoveringUseCase } from "./StopDiscoveringUseCase"; let transport: WebUsbHidTransport; +let logger: LoggerService; describe("StopDiscoveringUseCase", () => { beforeEach(() => { - transport = new WebUsbHidTransport({} as DeviceModelDataSource); + logger = new DefaultLoggerService([]); + transport = new WebUsbHidTransport({} as DeviceModelDataSource, logger); }); afterEach(() => { diff --git a/packages/core/src/internal/usb/di/usbModule.test.ts b/packages/core/src/internal/usb/di/usbModule.test.ts index a26e2433c..fa809edf6 100644 --- a/packages/core/src/internal/usb/di/usbModule.test.ts +++ b/packages/core/src/internal/usb/di/usbModule.test.ts @@ -1,6 +1,7 @@ import { Container } from "inversify"; import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelModule"; +import { loggerModuleFactory } from "@internal/logger/di/loggerModule"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { usbDiTypes } from "./usbDiTypes"; @@ -12,6 +13,7 @@ describe("usbModuleFactory", () => { beforeEach(() => { mod = usbModuleFactory(); container = new Container(); + container.load(loggerModuleFactory()); container.load(mod, deviceModelModuleFactory()); }); diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index b94467f30..39589f286 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -4,6 +4,7 @@ import { Left } from "purify-ts"; import { StaticDeviceModelDataSource } from "@internal/device-model/data/StaticDeviceModelDataSource"; import { DeviceModelId } from "@internal/device-model/model/DeviceModel"; +import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; import { DeviceNotRecognizedError, NoAccessibleDeviceError, @@ -14,8 +15,12 @@ import { import { WebUsbHidTransport } from "./WebUsbHidTransport"; +jest.mock("../../../internal/logger/service/LoggerService"); + // Our StaticDeviceModelDataSource can directly be used in our unit tests const usbDeviceModelDataSource = new StaticDeviceModelDataSource(); +const logger = new DefaultLoggerService([]); + const stubDevice = { opened: false, productId: 0x4011, @@ -28,12 +33,18 @@ const stubDevice = { describe("WebUsbHidTransport", () => { describe("When WebHID API is not supported", () => { test("isSupported should return false", () => { - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); expect(transport.isSupported()).toBe(false); }); test("startDiscovering should emit an error", (done) => { - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); transport.startDiscovering().subscribe({ next: () => { done("Should not emit any value"); @@ -66,7 +77,10 @@ describe("WebUsbHidTransport", () => { }); it("isSupported should return true", () => { - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); expect(transport.isSupported()).toBe(true); }); @@ -74,7 +88,10 @@ describe("WebUsbHidTransport", () => { test("If the user grant us access to a device, we should emit it", (done) => { mockedRequestDevice.mockResolvedValueOnce([stubDevice]); - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); transport.startDiscovering().subscribe({ next: (discoveredDevice) => { try { @@ -111,12 +128,14 @@ describe("WebUsbHidTransport", () => { }, ]); - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); let count = 0; transport.startDiscovering().subscribe({ next: (discoveredDevice) => { - console.log("🦄 discoveredDevice", discoveredDevice); try { switch (count) { case 0: @@ -164,7 +183,10 @@ describe("WebUsbHidTransport", () => { }, ]); - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); transport.startDiscovering().subscribe({ next: () => { done("should not return a device"); @@ -182,7 +204,10 @@ describe("WebUsbHidTransport", () => { throw new Error(message); }); - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); transport.startDiscovering().subscribe({ next: () => { done("should not return a device"); @@ -202,7 +227,10 @@ describe("WebUsbHidTransport", () => { // When the user does not select any device, the `requestDevice` will return an empty array mockedRequestDevice.mockResolvedValueOnce([]); - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); transport.startDiscovering().subscribe({ next: (discoveredDevice) => { done( @@ -226,7 +254,10 @@ describe("WebUsbHidTransport", () => { describe("stopDiscovering", () => { test("If the discovery process is halted, we should stop monitoring connections.", () => { const abortSpy = jest.spyOn(AbortController.prototype, "abort"); - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); transport.stopDiscovering(); @@ -238,7 +269,10 @@ describe("WebUsbHidTransport", () => { // eslint-disable-next-line @typescript-eslint/no-empty-function describe("connect", () => { test("If no internal device, should throw UnknownDeviceError", async () => { - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); const device = { deviceId: "fake" }; const connect = await transport.connect(device); @@ -249,7 +283,10 @@ describe("WebUsbHidTransport", () => { }); test("If the device is already opened, should throw OpeningConnectionError", async () => { - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); const device = { deviceId: "fake" }; const connect = await transport.connect(device); @@ -270,7 +307,10 @@ describe("WebUsbHidTransport", () => { }, ]); - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); transport.startDiscovering().subscribe({ next: (discoveredDevice) => { transport @@ -302,7 +342,10 @@ describe("WebUsbHidTransport", () => { }, ]); - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); transport.startDiscovering().subscribe({ next: (discoveredDevice) => { @@ -333,7 +376,10 @@ describe("WebUsbHidTransport", () => { test("If the device is available, return it", (done) => { mockedRequestDevice.mockResolvedValueOnce([stubDevice]); - const transport = new WebUsbHidTransport(usbDeviceModelDataSource); + const transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + logger, + ); transport.startDiscovering().subscribe({ next: (discoveredDevice) => { diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 1bb9ef2c8..99c18e9b6 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -6,6 +6,8 @@ import { v4 as uuid } from "uuid"; import type { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { deviceModelDiTypes } from "@internal/device-model/di/deviceModelDiTypes"; import { DeviceId } from "@internal/device-model/model/DeviceModel"; +import { types as loggerTypes } from "@internal/logger/di/loggerTypes"; +import type { LoggerService } from "@internal/logger/service/LoggerService"; import { ledgerVendorId } from "@internal/usb/data/UsbHidConfig"; import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; @@ -33,15 +35,18 @@ type WebHidInternalDevice = { export class WebUsbHidTransport implements UsbHidTransport { // Maps uncoupled DiscoveredDevice and WebHID's HIDDevice WebHID private internalDevicesById: Map; - private connectionListenersAbortController: AbortController; + private logger: LoggerService; constructor( @inject(deviceModelDiTypes.DeviceModelDataSource) private deviceModelDataSource: DeviceModelDataSource, + + @inject(loggerTypes.LoggerService) logger: LoggerService, ) { this.internalDevicesById = new Map(); this.connectionListenersAbortController = new AbortController(); + this.logger = logger; } /** @@ -60,10 +65,10 @@ export class WebUsbHidTransport implements UsbHidTransport { isSupported(): boolean { try { const result = !!navigator?.hid; - console.log(`isSupported: ${result}`); + this.logger.debug(`isSupported: ${result}`); return result; } catch (error) { - console.error(`isSupported: error`, error); + this.logger.error(`isSupported: error`, { data: { error } }); return false; } } @@ -89,15 +94,19 @@ export class WebUsbHidTransport implements UsbHidTransport { filters: [{ vendorId: ledgerVendorId }], }); } catch (error) { - console.error(`promptDeviceAccess: error requesting device`, error); + this.logger.error(`promptDeviceAccess: error requesting device`, { + data: { error }, + }); throw new NoAccessibleDeviceError(error as Error); } - console.log("promptDeviceAccess: hidDevices len", hidDevices.length); + this.logger.debug( + `promptDeviceAccess: hidDevices len ${hidDevices.length}`, + ); // Granted access to 0 device (by clicking on cancel for ex) results in an error if (hidDevices.length === 0) { - console.warn("No device was selected"); + this.logger.warn("No device was selected"); throw new NoAccessibleDeviceError(new Error("No selected device")); } @@ -106,7 +115,9 @@ export class WebUsbHidTransport implements UsbHidTransport { for (const hidDevice of hidDevices) { discoveredHidDevices.push(hidDevice); - console.log(`promptDeviceAccess: selected device`, hidDevice); + this.logger.debug(`promptDeviceAccess: selected device`, { + data: { hidDevice }, + }); } return discoveredHidDevices; @@ -134,7 +145,7 @@ export class WebUsbHidTransport implements UsbHidTransport { * So the consumer can directly select this device. */ startDiscovering(): Observable { - console.log("startDiscovering"); + this.logger.debug("startDiscovering"); // Logs the connection and disconnection events this.startListeningToConnectionEvents(); @@ -147,11 +158,13 @@ export class WebUsbHidTransport implements UsbHidTransport { switchMap((either) => { return either.caseOf({ Left: (error) => { - console.error("Error while getting accessible device", error); + this.logger.error("Error while getting accessible device", { + data: { error }, + }); throw error; }, Right: (hidDevices) => { - console.log(`Got access to ${hidDevices.length} HID devices:`); + this.logger.info(`Got access to ${hidDevices.length} HID devices`); const discoveredDevices = hidDevices.map((hidDevice) => { const usbProductId = this.getHidUsbProductId(hidDevice.productId); @@ -172,7 +185,7 @@ export class WebUsbHidTransport implements UsbHidTransport { discoveredDevice, }; - console.log( + this.logger.debug( `Discovered device ${id} ${discoveredDevice.deviceModel.productName}`, ); this.internalDevicesById.set(id, internalDevice); @@ -180,7 +193,7 @@ export class WebUsbHidTransport implements UsbHidTransport { return discoveredDevice; } else { // [ASK] Or we just ignore the not recognized device ? And log them - console.warn( + this.logger.warn( `Device not recognized: 0x${usbProductId.toString(16)}`, ); throw new DeviceNotRecognizedError( @@ -198,7 +211,7 @@ export class WebUsbHidTransport implements UsbHidTransport { } stopDiscovering(): void { - console.log("stopDiscovering"); + this.logger.debug("stopDiscovering"); this.stopListeningToConnectionEvents(); } @@ -207,13 +220,13 @@ export class WebUsbHidTransport implements UsbHidTransport { * Logs `connect` and `disconnect` events for already accessible devices */ private startListeningToConnectionEvents(): void { - console.log("startListeningToConnectionEvents"); + this.logger.debug("startListeningToConnectionEvents"); this.hidApi().map((hidApi) => { hidApi.addEventListener( "connect", (event) => { - console.log("connection event", event); + this.logger.debug("connection event", { data: { event } }); }, { signal: this.connectionListenersAbortController.signal }, ); @@ -221,7 +234,7 @@ export class WebUsbHidTransport implements UsbHidTransport { hidApi.addEventListener( "disconnect", (event) => { - console.log("disconnect event", event); + this.logger.debug("disconnect event", { data: { event } }); }, { signal: this.connectionListenersAbortController.signal }, ); @@ -229,7 +242,7 @@ export class WebUsbHidTransport implements UsbHidTransport { } private stopListeningToConnectionEvents(): void { - console.log("stopListeningToConnectionEvents"); + this.logger.debug("stopListeningToConnectionEvents"); this.connectionListenersAbortController.abort(); } @@ -241,12 +254,12 @@ export class WebUsbHidTransport implements UsbHidTransport { }: { deviceId: DeviceId; }): Promise> { - console.log("connect", { deviceId }); + this.logger.debug("connect", { data: { deviceId } }); const internalDevice = this.internalDevicesById.get(deviceId); if (!internalDevice) { - console.error(`Unknown device ${deviceId}`); + this.logger.error(`Unknown device ${deviceId}`); return Left( new UnknownDeviceError(new Error(`Unknown device ${deviceId}`)), ); @@ -256,9 +269,11 @@ export class WebUsbHidTransport implements UsbHidTransport { await internalDevice.hidDevice.open(); } catch (error) { if (error instanceof DOMException && error.name === "InvalidStateError") { - console.info(`Device ${deviceId} is already opened`); + this.logger.debug(`Device ${deviceId} is already opened`); } else { - console.error(`Error while opening device: ${deviceId}`, error); + this.logger.debug(`Error while opening device: ${deviceId}`, { + data: { error }, + }); return Left(new OpeningConnectionError(error as Error)); } } From 33aea237c27a8525f2bc6e9fba01e8860d438a0e Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 22 Feb 2024 17:52:03 +0100 Subject: [PATCH 114/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Add=20custom=20ta?= =?UTF-8?q?g=20for=20logging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/logger-subscriber/model/LogOptions.ts | 1 + .../service/ConsoleLogger.test.ts | 16 +++-- .../service/ConsoleLogger.ts | 14 ++-- .../service/DefaultConfigService.test.ts | 3 +- .../config/service/DefaultConfigService.ts | 5 +- .../discovery/use-case/ConnectUseCase.test.ts | 8 ++- .../use-case/StartDiscoveringUseCase.test.ts | 8 ++- .../use-case/StopDiscoveringUseCase.test.ts | 8 ++- .../src/internal/logger/di/loggerModule.ts | 11 +-- .../src/internal/logger/di/loggerTypes.ts | 1 + .../service/DefaultLoggerService.test.ts | 59 ++++++++------- .../logger/service/DefaultLoggerService.ts | 7 +- .../usb/transport/WebUsbHidTransport.test.ts | 71 +++---------------- .../usb/transport/WebUsbHidTransport.ts | 6 +- 14 files changed, 99 insertions(+), 119 deletions(-) diff --git a/packages/core/src/api/logger-subscriber/model/LogOptions.ts b/packages/core/src/api/logger-subscriber/model/LogOptions.ts index 647ad6278..b69a013d4 100644 --- a/packages/core/src/api/logger-subscriber/model/LogOptions.ts +++ b/packages/core/src/api/logger-subscriber/model/LogOptions.ts @@ -7,6 +7,7 @@ export type LogContext = Partial<{ export type LogData = Record; export type LogOptions = { + tag?: string; data?: LogData; context?: LogContext; timestamp?: number; diff --git a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts index dfbb9c9e5..3a9ac2ab6 100644 --- a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts +++ b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts @@ -26,27 +26,33 @@ describe("ConsoleLogger", () => { it("should log Info level", () => { logger.log(LogLevel.Info, message, options); - expect(info).toHaveBeenCalledWith("[LOGGER]", message); + expect(info).toHaveBeenCalledWith("[logger]", message); + }); + + it("should log Info level with a custom tag", () => { + const tag = "custom-tag"; + logger.log(LogLevel.Info, message, { ...options, tag }); + expect(info).toHaveBeenCalledWith(`[${tag}]`, message); }); it("should log Warn level", () => { logger.log(LogLevel.Warning, message, options); - expect(warn).toHaveBeenCalledWith("[LOGGER]", message); + expect(warn).toHaveBeenCalledWith("[logger]", message); }); it("should log Debug level", () => { logger.log(LogLevel.Debug, message, options); - expect(debug).toHaveBeenCalledWith("[LOGGER]", message); + expect(debug).toHaveBeenCalledWith("[logger]", message); }); it("should default to Log level if none present", () => { logger.log(LogLevel.Fatal, message, options); - expect(log).toHaveBeenCalledWith("[LOGGER]", message); + expect(log).toHaveBeenCalledWith("[logger]", message); }); it("should log Error level", () => { logger.log(LogLevel.Error, message, options); - expect(error).toHaveBeenCalledWith("[LOGGER]", message); + expect(error).toHaveBeenCalledWith("[logger]", message); }); }); }); diff --git a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts index 846cca463..59482eed8 100644 --- a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts +++ b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts @@ -3,23 +3,25 @@ import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; export class ConsoleLogger implements LoggerSubscriber { - log(level: LogLevel, message: string, _options: LogOptions): void { + log(level: LogLevel, message: string, options: LogOptions): void { + const tag = `[${options.tag ?? "logger"}]`; + switch (level) { case LogLevel.Info: - console.info("[LOGGER]", message); + console.info(tag, message); break; case LogLevel.Warning: - console.warn("[LOGGER]", message); + console.warn(tag, message); break; case LogLevel.Debug: - console.debug("[LOGGER]", message); + console.debug(tag, message); break; case LogLevel.Error: { - console.error("[LOGGER]", message); + console.error(tag, message); break; } default: - console.log("[LOGGER]", message); + console.log(tag, message); } } } diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index 2e4ca4c85..8170beb67 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -26,12 +26,13 @@ describe("DefaultConfigService", () => { loggerService = new DefaultLoggerService( [], + "config", ) as jest.Mocked; service = new DefaultConfigService( localDataSource, remoteDataSource, - loggerService, + () => loggerService, ); }); diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index a639670b9..410b8496a 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -19,11 +19,12 @@ export class DefaultConfigService implements ConfigService { constructor( @inject(configTypes.LocalConfigDataSource) local: LocalConfigDataSource, @inject(configTypes.RemoteConfigDataSource) remote: RemoteConfigDataSource, - @inject(loggerTypes.LoggerService) logger: LoggerService, + @inject(loggerTypes.LoggerServiceFactory) + loggerServiceFactory: (tag: string) => LoggerService, ) { this._local = local; this._remote = remote; - this._logger = logger; + this._logger = loggerServiceFactory("config"); } async getSdkConfig(): Promise { diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts index f243432a9..3f284bce9 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts @@ -18,10 +18,14 @@ describe("ConnectUseCase", () => { id: "", deviceModel: {} as DeviceModel, }; + const tag = "logger-tag"; beforeAll(() => { - logger = new DefaultLoggerService([]); - transport = new WebUsbHidTransport({} as DeviceModelDataSource, logger); + logger = new DefaultLoggerService([], tag); + transport = new WebUsbHidTransport( + {} as DeviceModelDataSource, + () => logger, + ); }); afterAll(() => { diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts index fa8e44be9..473b10776 100644 --- a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts @@ -17,10 +17,14 @@ describe("StartDiscoveringUseCase", () => { id: "", deviceModel: {} as DeviceModel, }; + const tag = "logger-tag"; beforeEach(() => { - logger = new DefaultLoggerService([]); - transport = new WebUsbHidTransport({} as DeviceModelDataSource, logger); + logger = new DefaultLoggerService([], tag); + transport = new WebUsbHidTransport( + {} as DeviceModelDataSource, + () => logger, + ); }); afterEach(() => { diff --git a/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts index a8a1e64bf..3629fb4ae 100644 --- a/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts @@ -7,11 +7,15 @@ import { StopDiscoveringUseCase } from "./StopDiscoveringUseCase"; let transport: WebUsbHidTransport; let logger: LoggerService; +const tag = "logger-tag"; describe("StopDiscoveringUseCase", () => { beforeEach(() => { - logger = new DefaultLoggerService([]); - transport = new WebUsbHidTransport({} as DeviceModelDataSource, logger); + logger = new DefaultLoggerService([], tag); + transport = new WebUsbHidTransport( + {} as DeviceModelDataSource, + () => logger, + ); }); afterEach(() => { diff --git a/packages/core/src/internal/logger/di/loggerModule.ts b/packages/core/src/internal/logger/di/loggerModule.ts index ee95c28b9..1477b7539 100644 --- a/packages/core/src/internal/logger/di/loggerModule.ts +++ b/packages/core/src/internal/logger/di/loggerModule.ts @@ -1,7 +1,8 @@ -import { ContainerModule } from "inversify"; +import { ContainerModule, interfaces } from "inversify"; import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; +import { LoggerService } from "@internal/logger/service/LoggerService"; import { types } from "./loggerTypes"; @@ -22,8 +23,10 @@ export const loggerModuleFactory = ( _onActivation, _onDeactivation, ) => { - bind(types.LoggerService).toConstantValue( - new DefaultLoggerService(subscribers), - ); + bind>( + types.LoggerServiceFactory, + ).toFactory((_context) => { + return (tag: string) => new DefaultLoggerService(subscribers, tag); + }); }, ); diff --git a/packages/core/src/internal/logger/di/loggerTypes.ts b/packages/core/src/internal/logger/di/loggerTypes.ts index 131c33e6d..283938a20 100644 --- a/packages/core/src/internal/logger/di/loggerTypes.ts +++ b/packages/core/src/internal/logger/di/loggerTypes.ts @@ -1,3 +1,4 @@ export const types = { LoggerService: Symbol.for("LoggerService"), + LoggerServiceFactory: Symbol.for("LoggerServiceFactory"), }; diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts index ee7a3c8f6..b8831b767 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts @@ -8,13 +8,15 @@ jest.mock("../../../api/logger-subscriber/service/ConsoleLogger"); let service: DefaultLoggerService; let subscriber: jest.Mocked; const message = "message"; +const tag = "logger-tag"; const options = { data: { key: "value" } }; +const generatedOptions = { tag, ...options }; describe("LoggerService", () => { beforeEach(() => { jest.clearAllMocks(); subscriber = new ConsoleLogger() as jest.Mocked; - service = new DefaultLoggerService([subscriber]); + service = new DefaultLoggerService([subscriber], tag); }); it("should call subscriber.log with the correct log object", () => { @@ -22,47 +24,44 @@ describe("LoggerService", () => { expect(subscriber.log).toHaveBeenCalledWith( LogLevel.Info, message, - options, + generatedOptions, ); }); - describe("info", () => { - it("should call _log with the correct LogLevel", () => { - const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - - service.info(message, options); - expect(spy).toHaveBeenCalledWith(LogLevel.Info, message, options); - spy.mockRestore(); + it("should call subscriber.log with the correct log object when a tag is provided", () => { + const newTag = "new-tag"; + service.info(message, { ...options, tag: newTag }); + expect(subscriber.log).toHaveBeenCalledWith(LogLevel.Info, message, { + ...generatedOptions, + tag: newTag, }); }); - describe("debug", () => { - it("should have the correct LogLevel", () => { - const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); + it("should call _log with the correct LogLevel", () => { + const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - service.debug(message, options); - expect(spy).toHaveBeenCalledWith(LogLevel.Debug, message, options); - spy.mockRestore(); - }); + service.info(message, options); + expect(spy).toHaveBeenCalledWith(LogLevel.Info, message, options); }); - describe("warn", () => { - it("should have the correct LogLevel", () => { - const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); + it("should have the correct LogLevel", () => { + const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - service.warn(message, options); - expect(spy).toHaveBeenCalledWith(LogLevel.Warning, message, options); - spy.mockRestore(); - }); + service.debug(message, options); + expect(spy).toHaveBeenCalledWith(LogLevel.Debug, message, options); }); - describe("error", () => { - it("should have the correct LogLevel", () => { - const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); + it("should have the correct LogLevel", () => { + const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); - service.error(message, options); - expect(spy).toHaveBeenCalledWith(LogLevel.Error, message, options); - spy.mockRestore(); - }); + service.warn(message, options); + expect(spy).toHaveBeenCalledWith(LogLevel.Warning, message, options); + }); + + it("should have the correct LogLevel", () => { + const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); + + service.error(message, options); + expect(spy).toHaveBeenCalledWith(LogLevel.Error, message, options); }); }); diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.ts index 0636ef7c4..8a10a1dda 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.ts @@ -9,13 +9,16 @@ import { LoggerService } from "./LoggerService"; @injectable() export class DefaultLoggerService implements LoggerService { subscribers: LoggerSubscriber[]; - constructor(subscribers: LoggerSubscriber[]) { + tag: string; + + constructor(subscribers: LoggerSubscriber[], tag: string) { this.subscribers = subscribers; + this.tag = tag; } _log(level: LogLevel, message: string, options?: LogOptions): void { this.subscribers.forEach((subscriber) => { - subscriber.log(level, message, options); + subscriber.log(level, message, { tag: this.tag, ...options }); }); } diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index 39589f286..73a6662b3 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -19,7 +19,7 @@ jest.mock("../../../internal/logger/service/LoggerService"); // Our StaticDeviceModelDataSource can directly be used in our unit tests const usbDeviceModelDataSource = new StaticDeviceModelDataSource(); -const logger = new DefaultLoggerService([]); +const logger = new DefaultLoggerService([], "web-usb-hid"); const stubDevice = { opened: false, @@ -31,20 +31,22 @@ const stubDevice = { }; describe("WebUsbHidTransport", () => { + let transport: WebUsbHidTransport; + + beforeEach(() => { + transport = new WebUsbHidTransport(usbDeviceModelDataSource, () => logger); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + describe("When WebHID API is not supported", () => { test("isSupported should return false", () => { - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); expect(transport.isSupported()).toBe(false); }); test("startDiscovering should emit an error", (done) => { - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); transport.startDiscovering().subscribe({ next: () => { done("Should not emit any value"); @@ -77,10 +79,6 @@ describe("WebUsbHidTransport", () => { }); it("isSupported should return true", () => { - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); expect(transport.isSupported()).toBe(true); }); @@ -88,10 +86,6 @@ describe("WebUsbHidTransport", () => { test("If the user grant us access to a device, we should emit it", (done) => { mockedRequestDevice.mockResolvedValueOnce([stubDevice]); - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); transport.startDiscovering().subscribe({ next: (discoveredDevice) => { try { @@ -128,11 +122,6 @@ describe("WebUsbHidTransport", () => { }, ]); - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); - let count = 0; transport.startDiscovering().subscribe({ next: (discoveredDevice) => { @@ -183,10 +172,6 @@ describe("WebUsbHidTransport", () => { }, ]); - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); transport.startDiscovering().subscribe({ next: () => { done("should not return a device"); @@ -204,10 +189,6 @@ describe("WebUsbHidTransport", () => { throw new Error(message); }); - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); transport.startDiscovering().subscribe({ next: () => { done("should not return a device"); @@ -227,10 +208,6 @@ describe("WebUsbHidTransport", () => { // When the user does not select any device, the `requestDevice` will return an empty array mockedRequestDevice.mockResolvedValueOnce([]); - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); transport.startDiscovering().subscribe({ next: (discoveredDevice) => { done( @@ -254,10 +231,6 @@ describe("WebUsbHidTransport", () => { describe("stopDiscovering", () => { test("If the discovery process is halted, we should stop monitoring connections.", () => { const abortSpy = jest.spyOn(AbortController.prototype, "abort"); - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); transport.stopDiscovering(); @@ -269,10 +242,6 @@ describe("WebUsbHidTransport", () => { // eslint-disable-next-line @typescript-eslint/no-empty-function describe("connect", () => { test("If no internal device, should throw UnknownDeviceError", async () => { - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); const device = { deviceId: "fake" }; const connect = await transport.connect(device); @@ -283,10 +252,6 @@ describe("WebUsbHidTransport", () => { }); test("If the device is already opened, should throw OpeningConnectionError", async () => { - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); const device = { deviceId: "fake" }; const connect = await transport.connect(device); @@ -307,10 +272,6 @@ describe("WebUsbHidTransport", () => { }, ]); - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); transport.startDiscovering().subscribe({ next: (discoveredDevice) => { transport @@ -342,11 +303,6 @@ describe("WebUsbHidTransport", () => { }, ]); - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); - transport.startDiscovering().subscribe({ next: (discoveredDevice) => { transport @@ -376,11 +332,6 @@ describe("WebUsbHidTransport", () => { test("If the device is available, return it", (done) => { mockedRequestDevice.mockResolvedValueOnce([stubDevice]); - const transport = new WebUsbHidTransport( - usbDeviceModelDataSource, - logger, - ); - transport.startDiscovering().subscribe({ next: (discoveredDevice) => { transport diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 99c18e9b6..3b019825c 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -41,12 +41,12 @@ export class WebUsbHidTransport implements UsbHidTransport { constructor( @inject(deviceModelDiTypes.DeviceModelDataSource) private deviceModelDataSource: DeviceModelDataSource, - - @inject(loggerTypes.LoggerService) logger: LoggerService, + @inject(loggerTypes.LoggerServiceFactory) + loggerServiceFactory: (tag: string) => LoggerService, ) { this.internalDevicesById = new Map(); this.connectionListenersAbortController = new AbortController(); - this.logger = logger; + this.logger = loggerServiceFactory("WebUsbHidTransport"); } /** From cc309ff1b15f849f0317550376fb5972046ef8da Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 22 Feb 2024 17:28:28 +0100 Subject: [PATCH 115/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Add=20a=20default?= =?UTF-8?q?=20timestamp=20value=20in=20LogOptions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logger/service/DefaultLoggerService.test.ts | 12 +++++++++++- .../internal/logger/service/DefaultLoggerService.ts | 6 +++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts index b8831b767..385949544 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts @@ -4,13 +4,14 @@ import { ConsoleLogger } from "@api/logger-subscriber/service/ConsoleLogger"; import { DefaultLoggerService } from "./DefaultLoggerService"; jest.mock("../../../api/logger-subscriber/service/ConsoleLogger"); +jest.useFakeTimers().setSystemTime(new Date("2024-01-01")); let service: DefaultLoggerService; let subscriber: jest.Mocked; const message = "message"; const tag = "logger-tag"; const options = { data: { key: "value" } }; -const generatedOptions = { tag, ...options }; +const generatedOptions = { tag, timestamp: Date.now(), ...options }; describe("LoggerService", () => { beforeEach(() => { @@ -37,6 +38,15 @@ describe("LoggerService", () => { }); }); + it("should call subscriber.log with the correct log object when a timestamp is provided", () => { + const newTimestamp = 1; + service.info(message, { ...options, timestamp: newTimestamp }); + expect(subscriber.log).toHaveBeenCalledWith(LogLevel.Info, message, { + ...generatedOptions, + timestamp: newTimestamp, + }); + }); + it("should call _log with the correct LogLevel", () => { const spy = jest.spyOn(service, "_log").mockImplementation(jest.fn()); diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.ts b/packages/core/src/internal/logger/service/DefaultLoggerService.ts index 8a10a1dda..ec51dff24 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.ts +++ b/packages/core/src/internal/logger/service/DefaultLoggerService.ts @@ -18,7 +18,11 @@ export class DefaultLoggerService implements LoggerService { _log(level: LogLevel, message: string, options?: LogOptions): void { this.subscribers.forEach((subscriber) => { - subscriber.log(level, message, { tag: this.tag, ...options }); + subscriber.log(level, message, { + timestamp: Date.now(), + tag: this.tag, + ...options, + }); }); } From 4d93281ff21582557a2c210638d942f998bd5c30 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 22 Feb 2024 17:44:16 +0100 Subject: [PATCH 116/253] =?UTF-8?q?=F0=9F=9A=A8=20(core):=20Remove=20eslin?= =?UTF-8?q?t-disable=20in=20core?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/DeviceSdk.test.ts | 3 +-- .../usb/transport/WebUsbHidTransport.test.ts | 17 +++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts index 670da2eb9..2da93163f 100644 --- a/packages/core/src/api/DeviceSdk.test.ts +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -1,10 +1,9 @@ -/* eslint-disable no-restricted-imports */ import { LocalConfigDataSource } from "@internal/config/data/ConfigDataSource"; import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; import { types as ConfigTypes } from "@internal/config/di/configTypes"; +import pkg from "@root/package.json"; import { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; -import pkg from "../../package.json"; import { DeviceSdk } from "./DeviceSdk"; jest.mock("./logger-subscriber/service/ConsoleLogger"); diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index 73a6662b3..95e382f74 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -1,9 +1,10 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Left } from "purify-ts"; import { StaticDeviceModelDataSource } from "@internal/device-model/data/StaticDeviceModelDataSource"; -import { DeviceModelId } from "@internal/device-model/model/DeviceModel"; +import { + DeviceModel, + DeviceModelId, +} from "@internal/device-model/model/DeviceModel"; import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; import { DeviceNotRecognizedError, @@ -70,12 +71,12 @@ describe("WebUsbHidTransport", () => { requestDevice: mockedRequestDevice, addEventListener: jest.fn(), }, - } as any; + } as unknown as Navigator; }); afterAll(() => { jest.restoreAllMocks(); - global.navigator = undefined as any; + global.navigator = undefined as unknown as Navigator; }); it("isSupported should return true", () => { @@ -95,7 +96,7 @@ describe("WebUsbHidTransport", () => { id: DeviceModelId.NANO_X, productName: "Ledger Nano X", usbProductId: 0x40, - }), + }) as DeviceModel, }), ); @@ -134,7 +135,7 @@ describe("WebUsbHidTransport", () => { id: DeviceModelId.NANO_X, productName: "Ledger Nano X", usbProductId: 0x40, - }), + }) as DeviceModel, }), ); break; @@ -145,7 +146,7 @@ describe("WebUsbHidTransport", () => { id: DeviceModelId.NANO_SP, productName: "Ledger Nano S Plus", usbProductId: 0x50, - }), + }) as DeviceModel, }), ); From 4ed25d6684ff77400f7c1fe9dffcfceea8a25304 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Mon, 26 Feb 2024 15:30:08 +0100 Subject: [PATCH 117/253] =?UTF-8?q?=F0=9F=8E=A8=20(core):=20Rename=20logge?= =?UTF-8?q?r=20service=20to=20logger=20publisher=20service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/di.ts | 2 +- .../config/service/DefaultConfigService.test.ts | 8 ++++---- .../internal/config/service/DefaultConfigService.ts | 10 +++++----- .../src/internal/discovery/di/discoveryModule.test.ts | 2 +- .../discovery/use-case/ConnectUseCase.test.ts | 8 ++++---- .../use-case/StartDiscoveringUseCase.test.ts | 8 ++++---- .../discovery/use-case/StopDiscoveringUseCase.test.ts | 8 ++++---- .../di/loggerModule.test.ts | 0 .../{logger => logger-publisher}/di/loggerModule.ts | 11 ++++++----- .../src/internal/logger-publisher/di/loggerTypes.ts | 4 ++++ .../service/DefaultLoggerPublisherService.test.ts} | 8 ++++---- .../service/DefaultLoggerPublisherService.ts} | 4 ++-- .../service/LoggerPublisherService.ts} | 2 +- .../service/__mocks__/DefaultLoggerService.ts | 4 ++-- packages/core/src/internal/logger/di/loggerTypes.ts | 4 ---- packages/core/src/internal/usb/di/usbModule.test.ts | 2 +- .../internal/usb/transport/WebUsbHidTransport.test.ts | 6 +++--- .../src/internal/usb/transport/WebUsbHidTransport.ts | 10 +++++----- 18 files changed, 51 insertions(+), 50 deletions(-) rename packages/core/src/internal/{logger => logger-publisher}/di/loggerModule.test.ts (100%) rename packages/core/src/internal/{logger => logger-publisher}/di/loggerModule.ts (57%) create mode 100644 packages/core/src/internal/logger-publisher/di/loggerTypes.ts rename packages/core/src/internal/{logger/service/DefaultLoggerService.test.ts => logger-publisher/service/DefaultLoggerPublisherService.test.ts} (91%) rename packages/core/src/internal/{logger/service/DefaultLoggerService.ts => logger-publisher/service/DefaultLoggerPublisherService.ts} (88%) rename packages/core/src/internal/{logger/service/LoggerService.ts => logger-publisher/service/LoggerPublisherService.ts} (90%) rename packages/core/src/internal/{logger => logger-publisher}/service/__mocks__/DefaultLoggerService.ts (55%) delete mode 100644 packages/core/src/internal/logger/di/loggerTypes.ts diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 8562e67e7..9931e302d 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -7,7 +7,7 @@ import { configModuleFactory } from "@internal/config/di/configModule"; import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelModule"; import { deviceSessionModuleFactory } from "@internal/device-session/di/deviceSessionModule"; import { discoveryModuleFactory } from "@internal/discovery/di/discoveryModule"; -import { loggerModuleFactory } from "@internal/logger/di/loggerModule"; +import { loggerModuleFactory } from "@internal/logger-publisher/di/loggerModule"; import { usbModuleFactory } from "@internal/usb/di/usbModule"; // Uncomment this line to enable the logger middleware diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index 8170beb67..76cfa1ca2 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -2,7 +2,7 @@ import { Either, Left } from "purify-ts"; import { JSONParseError } from "@internal/config/di/configTypes"; -import { DefaultLoggerService } from "../../logger/service/DefaultLoggerService"; +import { DefaultLoggerPublisherService } from "../../logger-publisher/service/DefaultLoggerPublisherService"; import { FileLocalConfigDataSource } from "../data/LocalConfigDataSource"; import { RestRemoteConfigDataSource } from "../data/RemoteConfigDataSource"; import { ConfigService } from "./ConfigService"; @@ -13,7 +13,7 @@ jest.mock("../data/RemoteConfigDataSource"); let localDataSource: jest.Mocked; let remoteDataSource: jest.Mocked; -let loggerService: jest.Mocked; +let loggerService: jest.Mocked; let service: ConfigService; describe("DefaultConfigService", () => { @@ -24,10 +24,10 @@ describe("DefaultConfigService", () => { remoteDataSource = new RestRemoteConfigDataSource() as jest.Mocked; - loggerService = new DefaultLoggerService( + loggerService = new DefaultLoggerPublisherService( [], "config", - ) as jest.Mocked; + ) as jest.Mocked; service = new DefaultConfigService( localDataSource, diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index 410b8496a..0612f33af 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -6,8 +6,8 @@ import type { } from "@internal/config/data/ConfigDataSource"; import { types as configTypes } from "@internal/config/di/configTypes"; import { Config } from "@internal/config/model/Config"; -import { types as loggerTypes } from "@internal/logger/di/loggerTypes"; -import type { LoggerService } from "@internal/logger/service/LoggerService"; +import { types as loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { ConfigService } from "./ConfigService"; @@ -15,12 +15,12 @@ import { ConfigService } from "./ConfigService"; export class DefaultConfigService implements ConfigService { private _local: LocalConfigDataSource; private _remote: RemoteConfigDataSource; - private _logger: LoggerService; + private _logger: LoggerPublisherService; constructor( @inject(configTypes.LocalConfigDataSource) local: LocalConfigDataSource, @inject(configTypes.RemoteConfigDataSource) remote: RemoteConfigDataSource, - @inject(loggerTypes.LoggerServiceFactory) - loggerServiceFactory: (tag: string) => LoggerService, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerServiceFactory: (tag: string) => LoggerPublisherService, ) { this._local = local; this._remote = remote; diff --git a/packages/core/src/internal/discovery/di/discoveryModule.test.ts b/packages/core/src/internal/discovery/di/discoveryModule.test.ts index cec95871c..c052212cd 100644 --- a/packages/core/src/internal/discovery/di/discoveryModule.test.ts +++ b/packages/core/src/internal/discovery/di/discoveryModule.test.ts @@ -4,7 +4,7 @@ import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelM import { ConnectUseCase } from "@internal/discovery/use-case/ConnectUseCase"; import { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; import { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; -import { loggerModuleFactory } from "@internal/logger/di/loggerModule"; +import { loggerModuleFactory } from "@internal/logger-publisher/di/loggerModule"; import { usbModuleFactory } from "@internal/usb/di/usbModule"; import { discoveryDiTypes } from "./discoveryDiTypes"; diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts index 3f284bce9..c647ca120 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts @@ -2,8 +2,8 @@ import { Left, Right } from "purify-ts"; import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { DeviceModel } from "@internal/device-model/model/DeviceModel"; -import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; -import { LoggerService } from "@internal/logger/service/LoggerService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; import { UnknownDeviceError } from "@internal/usb/model/Errors"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; @@ -11,7 +11,7 @@ import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { ConnectUseCase } from "./ConnectUseCase"; let transport: WebUsbHidTransport; -let logger: LoggerService; +let logger: LoggerPublisherService; describe("ConnectUseCase", () => { const stubConnectedDevice: ConnectedDevice = { @@ -21,7 +21,7 @@ describe("ConnectUseCase", () => { const tag = "logger-tag"; beforeAll(() => { - logger = new DefaultLoggerService([], tag); + logger = new DefaultLoggerPublisherService([], tag); transport = new WebUsbHidTransport( {} as DeviceModelDataSource, () => logger, diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts index 473b10776..d5bbc9af6 100644 --- a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts @@ -2,15 +2,15 @@ import { of } from "rxjs"; import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { DeviceModel } from "@internal/device-model/model/DeviceModel"; -import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; -import { LoggerService } from "@internal/logger/service/LoggerService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { DiscoveredDevice } from "@root/src"; import { StartDiscoveringUseCase } from "./StartDiscoveringUseCase"; let transport: WebUsbHidTransport; -let logger: LoggerService; +let logger: LoggerPublisherService; describe("StartDiscoveringUseCase", () => { const stubDiscoveredDevice: DiscoveredDevice = { @@ -20,7 +20,7 @@ describe("StartDiscoveringUseCase", () => { const tag = "logger-tag"; beforeEach(() => { - logger = new DefaultLoggerService([], tag); + logger = new DefaultLoggerPublisherService([], tag); transport = new WebUsbHidTransport( {} as DeviceModelDataSource, () => logger, diff --git a/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts index 3629fb4ae..be736a6b5 100644 --- a/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts @@ -1,17 +1,17 @@ import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; -import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; -import { LoggerService } from "@internal/logger/service/LoggerService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { StopDiscoveringUseCase } from "./StopDiscoveringUseCase"; let transport: WebUsbHidTransport; -let logger: LoggerService; +let logger: LoggerPublisherService; const tag = "logger-tag"; describe("StopDiscoveringUseCase", () => { beforeEach(() => { - logger = new DefaultLoggerService([], tag); + logger = new DefaultLoggerPublisherService([], tag); transport = new WebUsbHidTransport( {} as DeviceModelDataSource, () => logger, diff --git a/packages/core/src/internal/logger/di/loggerModule.test.ts b/packages/core/src/internal/logger-publisher/di/loggerModule.test.ts similarity index 100% rename from packages/core/src/internal/logger/di/loggerModule.test.ts rename to packages/core/src/internal/logger-publisher/di/loggerModule.test.ts diff --git a/packages/core/src/internal/logger/di/loggerModule.ts b/packages/core/src/internal/logger-publisher/di/loggerModule.ts similarity index 57% rename from packages/core/src/internal/logger/di/loggerModule.ts rename to packages/core/src/internal/logger-publisher/di/loggerModule.ts index 1477b7539..a8dcf6ef6 100644 --- a/packages/core/src/internal/logger/di/loggerModule.ts +++ b/packages/core/src/internal/logger-publisher/di/loggerModule.ts @@ -1,8 +1,8 @@ import { ContainerModule, interfaces } from "inversify"; import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; -import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; -import { LoggerService } from "@internal/logger/service/LoggerService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { types } from "./loggerTypes"; @@ -23,10 +23,11 @@ export const loggerModuleFactory = ( _onActivation, _onDeactivation, ) => { - bind>( - types.LoggerServiceFactory, + bind>( + types.LoggerPublisherServiceFactory, ).toFactory((_context) => { - return (tag: string) => new DefaultLoggerService(subscribers, tag); + return (tag: string) => + new DefaultLoggerPublisherService(subscribers, tag); }); }, ); diff --git a/packages/core/src/internal/logger-publisher/di/loggerTypes.ts b/packages/core/src/internal/logger-publisher/di/loggerTypes.ts new file mode 100644 index 000000000..6e5efcc88 --- /dev/null +++ b/packages/core/src/internal/logger-publisher/di/loggerTypes.ts @@ -0,0 +1,4 @@ +export const types = { + LoggerPublisherService: Symbol.for("LoggerPublisherService"), + LoggerPublisherServiceFactory: Symbol.for("LoggerPublisherServiceFactory"), +}; diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts b/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.ts similarity index 91% rename from packages/core/src/internal/logger/service/DefaultLoggerService.test.ts rename to packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.ts index 385949544..159067660 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.test.ts +++ b/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.ts @@ -1,23 +1,23 @@ import { LogLevel } from "@api/index"; import { ConsoleLogger } from "@api/logger-subscriber/service/ConsoleLogger"; -import { DefaultLoggerService } from "./DefaultLoggerService"; +import { DefaultLoggerPublisherService } from "./DefaultLoggerPublisherService"; jest.mock("../../../api/logger-subscriber/service/ConsoleLogger"); jest.useFakeTimers().setSystemTime(new Date("2024-01-01")); -let service: DefaultLoggerService; +let service: DefaultLoggerPublisherService; let subscriber: jest.Mocked; const message = "message"; const tag = "logger-tag"; const options = { data: { key: "value" } }; const generatedOptions = { tag, timestamp: Date.now(), ...options }; -describe("LoggerService", () => { +describe("LoggerPublisherService", () => { beforeEach(() => { jest.clearAllMocks(); subscriber = new ConsoleLogger() as jest.Mocked; - service = new DefaultLoggerService([subscriber], tag); + service = new DefaultLoggerPublisherService([subscriber], tag); }); it("should call subscriber.log with the correct log object", () => { diff --git a/packages/core/src/internal/logger/service/DefaultLoggerService.ts b/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts similarity index 88% rename from packages/core/src/internal/logger/service/DefaultLoggerService.ts rename to packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts index ec51dff24..05f554fc3 100644 --- a/packages/core/src/internal/logger/service/DefaultLoggerService.ts +++ b/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts @@ -4,10 +4,10 @@ import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; -import { LoggerService } from "./LoggerService"; +import { LoggerPublisherService } from "./LoggerPublisherService"; @injectable() -export class DefaultLoggerService implements LoggerService { +export class DefaultLoggerPublisherService implements LoggerPublisherService { subscribers: LoggerSubscriber[]; tag: string; diff --git a/packages/core/src/internal/logger/service/LoggerService.ts b/packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts similarity index 90% rename from packages/core/src/internal/logger/service/LoggerService.ts rename to packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts index 4173d1e3c..6ccb40292 100644 --- a/packages/core/src/internal/logger/service/LoggerService.ts +++ b/packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts @@ -1,7 +1,7 @@ import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; -export interface LoggerService { +export interface LoggerPublisherService { subscribers: LoggerSubscriber[]; error(message: string, options?: LogOptions): void; diff --git a/packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts b/packages/core/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.ts similarity index 55% rename from packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts rename to packages/core/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.ts index e9b4bb3d7..6e5fa087b 100644 --- a/packages/core/src/internal/logger/service/__mocks__/DefaultLoggerService.ts +++ b/packages/core/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.ts @@ -1,7 +1,7 @@ import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; -import type { LoggerService } from "@internal/logger/service/LoggerService"; +import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -export class DefaultLoggerService implements LoggerService { +export class DefaultLoggerPublisherService implements LoggerPublisherService { subscribers: LoggerSubscriber[] = []; _log = jest.fn(); diff --git a/packages/core/src/internal/logger/di/loggerTypes.ts b/packages/core/src/internal/logger/di/loggerTypes.ts deleted file mode 100644 index 283938a20..000000000 --- a/packages/core/src/internal/logger/di/loggerTypes.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const types = { - LoggerService: Symbol.for("LoggerService"), - LoggerServiceFactory: Symbol.for("LoggerServiceFactory"), -}; diff --git a/packages/core/src/internal/usb/di/usbModule.test.ts b/packages/core/src/internal/usb/di/usbModule.test.ts index fa809edf6..9c5e97b3c 100644 --- a/packages/core/src/internal/usb/di/usbModule.test.ts +++ b/packages/core/src/internal/usb/di/usbModule.test.ts @@ -1,7 +1,7 @@ import { Container } from "inversify"; import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelModule"; -import { loggerModuleFactory } from "@internal/logger/di/loggerModule"; +import { loggerModuleFactory } from "@internal/logger-publisher/di/loggerModule"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { usbDiTypes } from "./usbDiTypes"; diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index 95e382f74..3457b8612 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -5,7 +5,7 @@ import { DeviceModel, DeviceModelId, } from "@internal/device-model/model/DeviceModel"; -import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { DeviceNotRecognizedError, NoAccessibleDeviceError, @@ -16,11 +16,11 @@ import { import { WebUsbHidTransport } from "./WebUsbHidTransport"; -jest.mock("../../../internal/logger/service/LoggerService"); +jest.mock("../../../internal/logger-publisher/service/LoggerPublisherService"); // Our StaticDeviceModelDataSource can directly be used in our unit tests const usbDeviceModelDataSource = new StaticDeviceModelDataSource(); -const logger = new DefaultLoggerService([], "web-usb-hid"); +const logger = new DefaultLoggerPublisherService([], "web-usb-hid"); const stubDevice = { opened: false, diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 3b019825c..ae433276a 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -6,8 +6,8 @@ import { v4 as uuid } from "uuid"; import type { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { deviceModelDiTypes } from "@internal/device-model/di/deviceModelDiTypes"; import { DeviceId } from "@internal/device-model/model/DeviceModel"; -import { types as loggerTypes } from "@internal/logger/di/loggerTypes"; -import type { LoggerService } from "@internal/logger/service/LoggerService"; +import { types as loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { ledgerVendorId } from "@internal/usb/data/UsbHidConfig"; import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; @@ -36,13 +36,13 @@ export class WebUsbHidTransport implements UsbHidTransport { // Maps uncoupled DiscoveredDevice and WebHID's HIDDevice WebHID private internalDevicesById: Map; private connectionListenersAbortController: AbortController; - private logger: LoggerService; + private logger: LoggerPublisherService; constructor( @inject(deviceModelDiTypes.DeviceModelDataSource) private deviceModelDataSource: DeviceModelDataSource, - @inject(loggerTypes.LoggerServiceFactory) - loggerServiceFactory: (tag: string) => LoggerService, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerServiceFactory: (tag: string) => LoggerPublisherService, ) { this.internalDevicesById = new Map(); this.connectionListenersAbortController = new AbortController(); From 719ca54ef291ff79cfaf5fb6d4ef00af52275a78 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Mon, 26 Feb 2024 09:47:40 +0100 Subject: [PATCH 118/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Create?= =?UTF-8?q?=20itermediate=20model=20for=20logger=20publisher?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/index.ts | 2 +- .../api/logger-subscriber/model/LogOptions.ts | 14 -------------- .../model/LogSubscriberOptions.ts | 14 ++++++++++++++ .../service/ConsoleLogger.test.ts | 18 +++++++++++------- .../logger-subscriber/service/ConsoleLogger.ts | 6 +++--- .../service/LoggerSubscriber.ts | 4 ++-- .../model/LogPublisherOptions.ts | 14 ++++++++++++++ .../service/DefaultLoggerPublisherService.ts | 18 ++++++++++-------- .../service/LoggerPublisherService.ts | 10 +++++----- 9 files changed, 60 insertions(+), 40 deletions(-) delete mode 100644 packages/core/src/api/logger-subscriber/model/LogOptions.ts create mode 100644 packages/core/src/api/logger-subscriber/model/LogSubscriberOptions.ts create mode 100644 packages/core/src/internal/logger-publisher/model/LogPublisherOptions.ts diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 6f19f06de..8e28b19dc 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -3,7 +3,7 @@ export { DeviceSdk } from "./DeviceSdk"; export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; export { LogLevel } from "./logger-subscriber/model/LogLevel"; -export type { LogOptions } from "./logger-subscriber/model/LogOptions"; +export type { LogSubscriberOptions } from "./logger-subscriber/model/LogSubscriberOptions"; export { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; // [SHOULD] be exported from another file diff --git a/packages/core/src/api/logger-subscriber/model/LogOptions.ts b/packages/core/src/api/logger-subscriber/model/LogOptions.ts deleted file mode 100644 index b69a013d4..000000000 --- a/packages/core/src/api/logger-subscriber/model/LogOptions.ts +++ /dev/null @@ -1,14 +0,0 @@ -export type LogContext = Partial<{ - type: string; - tag: string; - [key: string]: unknown; -}>; - -export type LogData = Record; - -export type LogOptions = { - tag?: string; - data?: LogData; - context?: LogContext; - timestamp?: number; -}; diff --git a/packages/core/src/api/logger-subscriber/model/LogSubscriberOptions.ts b/packages/core/src/api/logger-subscriber/model/LogSubscriberOptions.ts new file mode 100644 index 000000000..b52796425 --- /dev/null +++ b/packages/core/src/api/logger-subscriber/model/LogSubscriberOptions.ts @@ -0,0 +1,14 @@ +export type LogSubscriberContext = Partial<{ + type: string; + tag: string; + [key: string]: unknown; +}>; + +export type LogSubscriberData = Record; + +export type LogSubscriberOptions = { + tag: string; + timestamp: number; + data?: LogSubscriberData; + context?: LogSubscriberContext; +}; diff --git a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts index 3a9ac2ab6..8cd7f5fcc 100644 --- a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts +++ b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts @@ -1,5 +1,5 @@ import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; -import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; +import { LogSubscriberOptions } from "@api/logger-subscriber/model/LogSubscriberOptions"; import { ConsoleLogger } from "./ConsoleLogger"; @@ -10,7 +10,11 @@ const error = jest.spyOn(console, "error").mockImplementation(jest.fn()); const log = jest.spyOn(console, "log").mockImplementation(jest.fn()); let logger: ConsoleLogger; -const options: LogOptions = { data: { key: "value" } }; +const options: LogSubscriberOptions = { + data: { key: "value" }, + timestamp: 1, + tag: "tag", +}; const message = "message"; describe("ConsoleLogger", () => { @@ -26,7 +30,7 @@ describe("ConsoleLogger", () => { it("should log Info level", () => { logger.log(LogLevel.Info, message, options); - expect(info).toHaveBeenCalledWith("[logger]", message); + expect(info).toHaveBeenCalledWith(`[${options.tag}]`, message); }); it("should log Info level with a custom tag", () => { @@ -37,22 +41,22 @@ describe("ConsoleLogger", () => { it("should log Warn level", () => { logger.log(LogLevel.Warning, message, options); - expect(warn).toHaveBeenCalledWith("[logger]", message); + expect(warn).toHaveBeenCalledWith(`[${options.tag}]`, message); }); it("should log Debug level", () => { logger.log(LogLevel.Debug, message, options); - expect(debug).toHaveBeenCalledWith("[logger]", message); + expect(debug).toHaveBeenCalledWith(`[${options.tag}]`, message); }); it("should default to Log level if none present", () => { logger.log(LogLevel.Fatal, message, options); - expect(log).toHaveBeenCalledWith("[logger]", message); + expect(log).toHaveBeenCalledWith(`[${options.tag}]`, message); }); it("should log Error level", () => { logger.log(LogLevel.Error, message, options); - expect(error).toHaveBeenCalledWith("[logger]", message); + expect(error).toHaveBeenCalledWith(`[${options.tag}]`, message); }); }); }); diff --git a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts index 59482eed8..b0aef34df 100644 --- a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts +++ b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts @@ -1,10 +1,10 @@ import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; -import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; +import { LogSubscriberOptions } from "@api/logger-subscriber/model/LogSubscriberOptions"; import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; export class ConsoleLogger implements LoggerSubscriber { - log(level: LogLevel, message: string, options: LogOptions): void { - const tag = `[${options.tag ?? "logger"}]`; + log(level: LogLevel, message: string, options: LogSubscriberOptions): void { + const tag = `[${options.tag}]`; switch (level) { case LogLevel.Info: diff --git a/packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts b/packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts index 40361996c..cc344d8ef 100644 --- a/packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts +++ b/packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts @@ -1,6 +1,6 @@ import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; -import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; +import { LogSubscriberOptions } from "@api/logger-subscriber/model/LogSubscriberOptions"; export interface LoggerSubscriber { - log(level: LogLevel, message: string, options?: LogOptions): void; + log(level: LogLevel, message: string, options: LogSubscriberOptions): void; } diff --git a/packages/core/src/internal/logger-publisher/model/LogPublisherOptions.ts b/packages/core/src/internal/logger-publisher/model/LogPublisherOptions.ts new file mode 100644 index 000000000..121d81197 --- /dev/null +++ b/packages/core/src/internal/logger-publisher/model/LogPublisherOptions.ts @@ -0,0 +1,14 @@ +export type LogPublisherContext = Partial<{ + type: string; + tag: string; + [key: string]: unknown; +}>; + +export type LogPublisherData = Record; + +export type LogPublisherOptions = { + tag?: string; + timestamp?: number; + data?: LogPublisherData; + context?: LogPublisherContext; +}; diff --git a/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts b/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts index 05f554fc3..16f30b48a 100644 --- a/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts +++ b/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts @@ -1,8 +1,9 @@ import { injectable } from "inversify"; import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; -import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; +import { LogSubscriberOptions } from "@api/logger-subscriber/model/LogSubscriberOptions"; import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; +import { LogPublisherOptions } from "@internal/logger-publisher/model/LogPublisherOptions"; import { LoggerPublisherService } from "./LoggerPublisherService"; @@ -16,29 +17,30 @@ export class DefaultLoggerPublisherService implements LoggerPublisherService { this.tag = tag; } - _log(level: LogLevel, message: string, options?: LogOptions): void { + _log(level: LogLevel, message: string, options?: LogPublisherOptions): void { this.subscribers.forEach((subscriber) => { - subscriber.log(level, message, { + const subscriberOptions: LogSubscriberOptions = { timestamp: Date.now(), tag: this.tag, ...options, - }); + }; + subscriber.log(level, message, subscriberOptions); }); } - info(message: string, options?: LogOptions): void { + info(message: string, options?: LogPublisherOptions): void { this._log(LogLevel.Info, message, options); } - warn(message: string, options?: LogOptions): void { + warn(message: string, options?: LogPublisherOptions): void { this._log(LogLevel.Warning, message, options); } - debug(message: string, options?: LogOptions): void { + debug(message: string, options?: LogPublisherOptions): void { this._log(LogLevel.Debug, message, options); } - error(message: string, options?: LogOptions): void { + error(message: string, options?: LogPublisherOptions): void { this._log(LogLevel.Error, message, options); } } diff --git a/packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts b/packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts index 6ccb40292..1e9c8480b 100644 --- a/packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts +++ b/packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts @@ -1,11 +1,11 @@ -import { LogOptions } from "@api/logger-subscriber/model/LogOptions"; import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; +import { LogPublisherOptions } from "@internal/logger-publisher/model/LogPublisherOptions"; export interface LoggerPublisherService { subscribers: LoggerSubscriber[]; - error(message: string, options?: LogOptions): void; - warn(message: string, options?: LogOptions): void; - info(message: string, options?: LogOptions): void; - debug(message: string, options?: LogOptions): void; + error(message: string, options?: LogPublisherOptions): void; + warn(message: string, options?: LogPublisherOptions): void; + info(message: string, options?: LogPublisherOptions): void; + debug(message: string, options?: LogPublisherOptions): void; } From 8ab852af0f36fe4bd0da5003b2ae43b36e1213e4 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Mon, 26 Feb 2024 10:14:54 +0100 Subject: [PATCH 119/253] =?UTF-8?q?=F0=9F=8E=A8=20(core):=20Add=20service?= =?UTF-8?q?=20suffix=20to=20logger=20subscriber?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/DeviceSdkBuilder.ts | 6 +++--- .../core/src/api/logger-subscriber/service/ConsoleLogger.ts | 4 ++-- .../{LoggerSubscriber.ts => LoggerSubscriberService.ts} | 2 +- packages/core/src/di.ts | 4 ++-- .../core/src/internal/logger-publisher/di/loggerModule.ts | 4 ++-- .../service/DefaultLoggerPublisherService.ts | 6 +++--- .../logger-publisher/service/LoggerPublisherService.ts | 4 ++-- .../service/__mocks__/DefaultLoggerService.ts | 4 ++-- 8 files changed, 17 insertions(+), 17 deletions(-) rename packages/core/src/api/logger-subscriber/service/{LoggerSubscriber.ts => LoggerSubscriberService.ts} (84%) diff --git a/packages/core/src/api/DeviceSdkBuilder.ts b/packages/core/src/api/DeviceSdkBuilder.ts index 9811c4269..f308b3e68 100644 --- a/packages/core/src/api/DeviceSdkBuilder.ts +++ b/packages/core/src/api/DeviceSdkBuilder.ts @@ -1,9 +1,9 @@ -import { LoggerSubscriber } from "./logger-subscriber/service/LoggerSubscriber"; +import { LoggerSubscriberService } from "./logger-subscriber/service/LoggerSubscriberService"; import { DeviceSdk } from "./DeviceSdk"; export class LedgerDeviceSdkBuilder { stub = false; - loggers: LoggerSubscriber[] = []; + loggers: LoggerSubscriberService[] = []; build(): DeviceSdk { return new DeviceSdk({ stub: this.stub, loggers: this.loggers }); @@ -14,7 +14,7 @@ export class LedgerDeviceSdkBuilder { return this; } - addLogger(logger: LoggerSubscriber): LedgerDeviceSdkBuilder { + addLogger(logger: LoggerSubscriberService): LedgerDeviceSdkBuilder { this.loggers.push(logger); return this; } diff --git a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts index b0aef34df..046e88022 100644 --- a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts +++ b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts @@ -1,8 +1,8 @@ import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; import { LogSubscriberOptions } from "@api/logger-subscriber/model/LogSubscriberOptions"; -import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; +import { LoggerSubscriberService } from "@api/logger-subscriber/service/LoggerSubscriberService"; -export class ConsoleLogger implements LoggerSubscriber { +export class ConsoleLogger implements LoggerSubscriberService { log(level: LogLevel, message: string, options: LogSubscriberOptions): void { const tag = `[${options.tag}]`; diff --git a/packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts b/packages/core/src/api/logger-subscriber/service/LoggerSubscriberService.ts similarity index 84% rename from packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts rename to packages/core/src/api/logger-subscriber/service/LoggerSubscriberService.ts index cc344d8ef..829032555 100644 --- a/packages/core/src/api/logger-subscriber/service/LoggerSubscriber.ts +++ b/packages/core/src/api/logger-subscriber/service/LoggerSubscriberService.ts @@ -1,6 +1,6 @@ import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; import { LogSubscriberOptions } from "@api/logger-subscriber/model/LogSubscriberOptions"; -export interface LoggerSubscriber { +export interface LoggerSubscriberService { log(level: LogLevel, message: string, options: LogSubscriberOptions): void; } diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 9931e302d..7514e31b7 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -1,6 +1,6 @@ import { Container } from "inversify"; -import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; +import { LoggerSubscriberService } from "@api/logger-subscriber/service/LoggerSubscriberService"; // Uncomment this line to enable the logger middleware // import { makeLoggerMiddleware } from "inversify-logger-middleware"; import { configModuleFactory } from "@internal/config/di/configModule"; @@ -15,7 +15,7 @@ import { usbModuleFactory } from "@internal/usb/di/usbModule"; export type MakeContainerProps = { stub: boolean; - loggers: LoggerSubscriber[]; + loggers: LoggerSubscriberService[]; }; export const makeContainer = ({ diff --git a/packages/core/src/internal/logger-publisher/di/loggerModule.ts b/packages/core/src/internal/logger-publisher/di/loggerModule.ts index a8dcf6ef6..897af2579 100644 --- a/packages/core/src/internal/logger-publisher/di/loggerModule.ts +++ b/packages/core/src/internal/logger-publisher/di/loggerModule.ts @@ -1,13 +1,13 @@ import { ContainerModule, interfaces } from "inversify"; -import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; +import { LoggerSubscriberService } from "@api/logger-subscriber/service/LoggerSubscriberService"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { types } from "./loggerTypes"; type FactoryProps = { - subscribers: LoggerSubscriber[]; + subscribers: LoggerSubscriberService[]; }; export const loggerModuleFactory = ( diff --git a/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts b/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts index 16f30b48a..ae9dc62d6 100644 --- a/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts +++ b/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts @@ -2,17 +2,17 @@ import { injectable } from "inversify"; import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; import { LogSubscriberOptions } from "@api/logger-subscriber/model/LogSubscriberOptions"; -import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; +import { LoggerSubscriberService } from "@api/logger-subscriber/service/LoggerSubscriberService"; import { LogPublisherOptions } from "@internal/logger-publisher/model/LogPublisherOptions"; import { LoggerPublisherService } from "./LoggerPublisherService"; @injectable() export class DefaultLoggerPublisherService implements LoggerPublisherService { - subscribers: LoggerSubscriber[]; + subscribers: LoggerSubscriberService[]; tag: string; - constructor(subscribers: LoggerSubscriber[], tag: string) { + constructor(subscribers: LoggerSubscriberService[], tag: string) { this.subscribers = subscribers; this.tag = tag; } diff --git a/packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts b/packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts index 1e9c8480b..69197406f 100644 --- a/packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts +++ b/packages/core/src/internal/logger-publisher/service/LoggerPublisherService.ts @@ -1,8 +1,8 @@ -import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; +import { LoggerSubscriberService } from "@api/logger-subscriber/service/LoggerSubscriberService"; import { LogPublisherOptions } from "@internal/logger-publisher/model/LogPublisherOptions"; export interface LoggerPublisherService { - subscribers: LoggerSubscriber[]; + subscribers: LoggerSubscriberService[]; error(message: string, options?: LogPublisherOptions): void; warn(message: string, options?: LogPublisherOptions): void; diff --git a/packages/core/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.ts b/packages/core/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.ts index 6e5fa087b..ffd95cca2 100644 --- a/packages/core/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.ts +++ b/packages/core/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.ts @@ -1,8 +1,8 @@ -import { LoggerSubscriber } from "@api/logger-subscriber/service/LoggerSubscriber"; +import { LoggerSubscriberService } from "@api/logger-subscriber/service/LoggerSubscriberService"; import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; export class DefaultLoggerPublisherService implements LoggerPublisherService { - subscribers: LoggerSubscriber[] = []; + subscribers: LoggerSubscriberService[] = []; _log = jest.fn(); info = jest.fn(); From 29386b2276b4afed3d7d39df4927167e6e14f64a Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Mon, 26 Feb 2024 15:21:50 +0100 Subject: [PATCH 120/253] =?UTF-8?q?=F0=9F=8F=B7=EF=B8=8F=20(core):=20Remov?= =?UTF-8?q?e=20log=20context?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/logger-subscriber/model/LogSubscriberOptions.ts | 7 ------- .../internal/logger-publisher/model/LogPublisherOptions.ts | 7 ------- 2 files changed, 14 deletions(-) diff --git a/packages/core/src/api/logger-subscriber/model/LogSubscriberOptions.ts b/packages/core/src/api/logger-subscriber/model/LogSubscriberOptions.ts index b52796425..2ec9151dd 100644 --- a/packages/core/src/api/logger-subscriber/model/LogSubscriberOptions.ts +++ b/packages/core/src/api/logger-subscriber/model/LogSubscriberOptions.ts @@ -1,14 +1,7 @@ -export type LogSubscriberContext = Partial<{ - type: string; - tag: string; - [key: string]: unknown; -}>; - export type LogSubscriberData = Record; export type LogSubscriberOptions = { tag: string; timestamp: number; data?: LogSubscriberData; - context?: LogSubscriberContext; }; diff --git a/packages/core/src/internal/logger-publisher/model/LogPublisherOptions.ts b/packages/core/src/internal/logger-publisher/model/LogPublisherOptions.ts index 121d81197..065974198 100644 --- a/packages/core/src/internal/logger-publisher/model/LogPublisherOptions.ts +++ b/packages/core/src/internal/logger-publisher/model/LogPublisherOptions.ts @@ -1,14 +1,7 @@ -export type LogPublisherContext = Partial<{ - type: string; - tag: string; - [key: string]: unknown; -}>; - export type LogPublisherData = Record; export type LogPublisherOptions = { tag?: string; timestamp?: number; data?: LogPublisherData; - context?: LogPublisherContext; }; From 5b25ce7de7815e623a4880af8ccac8eaa4862fc7 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Mon, 26 Feb 2024 15:46:37 +0100 Subject: [PATCH 121/253] =?UTF-8?q?=F0=9F=A9=B9=20(core):=20Fix=20frame=20?= =?UTF-8?q?logger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DefaultFramerService.test.ts | 18 +++++++++--------- .../service/DefaultFramerService.ts | 19 +++++++++---------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts b/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts index 490efec7b..c3157003f 100644 --- a/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts @@ -5,11 +5,11 @@ import { Maybe } from "purify-ts"; import { Frame } from "@internal/device-session/model/Frame"; import { FrameHeader } from "@internal/device-session/model/FrameHeader"; -import { DefaultLoggerService } from "@internal/logger/service/DefaultLoggerService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { DefaultFramerService } from "./DefaultFramerService"; -const loggerService = new DefaultLoggerService([console]); +const loggerService = new DefaultLoggerPublisherService([], "frame"); describe("DefaultFramerService", () => { beforeAll(() => { @@ -26,7 +26,7 @@ describe("DefaultFramerService", () => { padding: true, channel, }, - loggerService, + () => loggerService, ); // getVersion APDU const apdu = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); @@ -76,7 +76,7 @@ describe("DefaultFramerService", () => { padding: true, channel, }, - loggerService, + () => loggerService, ); const apdu = new Uint8Array([ // editDeviceName APDU @@ -160,7 +160,7 @@ describe("DefaultFramerService", () => { { frameSize: 123, }, - loggerService, + () => loggerService, ); const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); @@ -194,7 +194,7 @@ describe("DefaultFramerService", () => { { frameSize: 10, }, - loggerService, + () => loggerService, ); const command = new Uint8Array([ 0x01, 0x05, 0x4f, 0x4c, 0x4f, 0x53, 0x00, 0x07, 0x2e, 0x32, 0x2e, 0x34, @@ -262,7 +262,7 @@ describe("DefaultFramerService", () => { new Uint8Array([0x123434, 0x34444, 0x56454, 0x7844, 0x90444]), ), }, - loggerService, + () => loggerService, ); const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); @@ -297,7 +297,7 @@ describe("DefaultFramerService", () => { frameSize: Math.random() & 4, channel: Maybe.of(new Uint8Array([0x12, 0x34])), }, - loggerService, + () => loggerService, ); const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); @@ -318,7 +318,7 @@ describe("DefaultFramerService", () => { padding: Math.random() > 0.5, channel: Maybe.of(new Uint8Array([0x12, 0x34])), }, - loggerService, + () => loggerService, ); const command = new Uint8Array([]); diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.ts b/packages/core/src/internal/device-session/service/DefaultFramerService.ts index 010826b1a..ed82eb4de 100644 --- a/packages/core/src/internal/device-session/service/DefaultFramerService.ts +++ b/packages/core/src/internal/device-session/service/DefaultFramerService.ts @@ -16,9 +16,8 @@ import { import { Frame } from "@internal/device-session/model/Frame"; import { FrameHeader } from "@internal/device-session/model/FrameHeader"; import { FramerUtils } from "@internal/device-session/utils/FramerUtils"; -import { types as loggerTypes } from "@internal/logger/di/loggerTypes"; -import { LogBuilder } from "@internal/logger/service/LogBuilder"; -import type { LoggerService } from "@internal/logger/service/LoggerService"; +import { types as loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { SdkError } from "@root/src/api/Error"; import type { FramerService } from "./FramerService"; @@ -34,7 +33,7 @@ export class DefaultFramerService implements FramerService { protected _frameSize: number; protected _channel: Maybe; protected _padding: boolean; - private _logger: LoggerService; + private _logger: LoggerPublisherService; constructor( { @@ -42,12 +41,14 @@ export class DefaultFramerService implements FramerService { channel = Maybe.zero(), padding = false, }: DefaultFramerServiceConstructorArgs, - @inject(loggerTypes.LoggerService) logger: LoggerService, + + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerServiceFactory: (tag: string) => LoggerPublisherService, ) { this._frameSize = frameSize; this._channel = channel; this._padding = padding; - this._logger = logger; + this._logger = loggerServiceFactory("framer"); } /** @@ -65,11 +66,9 @@ export class DefaultFramerService implements FramerService { count += 1; frame = this.getFrameAtIndex(apdu, count).mapLeft((error) => { if (error instanceof FramerOverflowError) { - this._logger.debug( - LogBuilder.build({ type: "framer" }, { count }, `Frames parsed.`), - ); + this._logger.debug("Frames parsed", { data: { count } }); } else { - this._logger.error(LogBuilder.buildFromError(error)); + this._logger.error("Error while parsing frame", { data: { error } }); } return error; }); From a6c222836237cb6d57df0dc99e4e62c8bfc624ed Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Thu, 22 Feb 2024 16:16:01 +0100 Subject: [PATCH 122/253] =?UTF-8?q?=E2=9C=A8=20(core):=20SendApdu=20interf?= =?UTF-8?q?ace=20+=20Session=20draft?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/DeviceSdk.ts | 11 ++++ packages/core/src/common/.gitkeep | 0 packages/core/src/device-action/.gitkeep | 0 packages/core/src/di.ts | 2 + .../device-session/di/deviceSessionModule.ts | 8 +++ .../device-session/di/deviceSessionTypes.ts | 1 + .../internal/device-session/model/Errors.ts | 9 +++ .../internal/device-session/model/Session.ts | 20 ++++++ .../service/DefaultSessionService.test.ts | 65 +++++++++++++++++++ .../service/DefaultSessionService.ts | 58 +++++++++++++++++ .../src/internal/send/di/sendModule.test.ts | 19 ++++++ .../core/src/internal/send/di/sendModule.ts | 24 +++++++ .../core/src/internal/send/di/sendTypes.ts | 3 + .../internal/send/usecase/SendApduUseCase.ts | 39 +++++++++++ packages/core/src/shared/entities/.gitkeep | 0 packages/core/src/shared/utils/.gitkeep | 0 16 files changed, 259 insertions(+) delete mode 100644 packages/core/src/common/.gitkeep delete mode 100644 packages/core/src/device-action/.gitkeep create mode 100644 packages/core/src/internal/device-session/model/Session.ts create mode 100644 packages/core/src/internal/device-session/service/DefaultSessionService.test.ts create mode 100644 packages/core/src/internal/device-session/service/DefaultSessionService.ts create mode 100644 packages/core/src/internal/send/di/sendModule.test.ts create mode 100644 packages/core/src/internal/send/di/sendModule.ts create mode 100644 packages/core/src/internal/send/di/sendTypes.ts create mode 100644 packages/core/src/internal/send/usecase/SendApduUseCase.ts delete mode 100644 packages/core/src/shared/entities/.gitkeep delete mode 100644 packages/core/src/shared/utils/.gitkeep diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 7171addd5..0e7a72ecf 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -10,6 +10,11 @@ import { } from "@internal/discovery/use-case/ConnectUseCase"; import type { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; import type { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; +import { sendTypes } from "@internal/send/di/sendTypes"; +import { + SendApduUseCase, + SendApduUseCaseArgs, +} from "@internal/send/usecase/SendApduUseCase"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { makeContainer, MakeContainerProps } from "@root/src/di"; @@ -54,4 +59,10 @@ export class DeviceSdk { .get(discoveryDiTypes.ConnectUseCase) .execute(args); } + + sendApdu(args: SendApduUseCaseArgs) { + return this.container + .get(sendTypes.SendService) + .execute(args); + } } diff --git a/packages/core/src/common/.gitkeep b/packages/core/src/common/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/core/src/device-action/.gitkeep b/packages/core/src/device-action/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 7514e31b7..bab0d0fe9 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -8,6 +8,7 @@ import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelM import { deviceSessionModuleFactory } from "@internal/device-session/di/deviceSessionModule"; import { discoveryModuleFactory } from "@internal/discovery/di/discoveryModule"; import { loggerModuleFactory } from "@internal/logger-publisher/di/loggerModule"; +import { sendModuleFactory } from "@internal/send/di/sendModule"; import { usbModuleFactory } from "@internal/usb/di/usbModule"; // Uncomment this line to enable the logger middleware @@ -34,6 +35,7 @@ export const makeContainer = ({ discoveryModuleFactory({ stub }), loggerModuleFactory({ subscribers: loggers }), deviceSessionModuleFactory(), + sendModuleFactory(), // modules go here ); diff --git a/packages/core/src/internal/device-session/di/deviceSessionModule.ts b/packages/core/src/internal/device-session/di/deviceSessionModule.ts index 700b332f2..25a0f9622 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionModule.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionModule.ts @@ -1,9 +1,16 @@ import { ContainerModule } from "inversify"; +import { Session } from "@internal/device-session/model/Session"; import { DefaultFramerService } from "@internal/device-session/service/DefaultFramerService"; +import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; import { types } from "./deviceSessionTypes"; +export type DeviceSessionModuleArgs = Partial<{ + stub: boolean; + sessions: Session[]; +}>; + export const deviceSessionModuleFactory = () => new ContainerModule( ( @@ -16,5 +23,6 @@ export const deviceSessionModuleFactory = () => _onDeactivation, ) => { bind(types.FramerService).to(DefaultFramerService); + bind(types.SessionService).to(DefaultSessionService); }, ); diff --git a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts index 6425b0cbb..9c68c97b4 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts @@ -1,3 +1,4 @@ export const types = { FramerService: Symbol.for("FramerService"), + SessionService: Symbol.for("SessionService"), }; diff --git a/packages/core/src/internal/device-session/model/Errors.ts b/packages/core/src/internal/device-session/model/Errors.ts index 9eb5a2369..33b4b6b05 100644 --- a/packages/core/src/internal/device-session/model/Errors.ts +++ b/packages/core/src/internal/device-session/model/Errors.ts @@ -18,3 +18,12 @@ export class FramerApduError implements SdkError { this.originalError = new Error("Frame offset is greater than apdu length"); } } + +export class DeviceSessionNotFound implements SdkError { + readonly _tag = "DeviceSessionNotFound"; + originalError?: Error; + + constructor(originalError?: Error) { + this.originalError = originalError ?? new Error("Device session not found"); + } +} diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts new file mode 100644 index 000000000..c116c47ad --- /dev/null +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -0,0 +1,20 @@ +import { Either } from "purify-ts"; +import { v4 as uuidv4 } from "uuid"; + +export type SessionId = ReturnType; + +/** + * Represents a session with a device. + */ +// [TODO] replace this code with actual implementation +export class Session { + id: SessionId; + + constructor() { + this.id = uuidv4(); + } + + sendApdu(_args: Uint8Array): Promise> { + return Promise.resolve(Either.of("yolo")); + } +} diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts new file mode 100644 index 000000000..1c22348d6 --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts @@ -0,0 +1,65 @@ +import { Either, Left } from "purify-ts"; + +import { DefaultLoggerPublisherService } from "../../logger-publisher/service/DefaultLoggerPublisherService"; +import { DeviceSessionNotFound } from "../model/Errors"; +import { Session } from "../model/Session"; +import { DefaultSessionService } from "./DefaultSessionService"; + +jest.mock("../../logger-publisher/service/DefaultLoggerPublisherService"); + +let sessionService: DefaultSessionService; +let loggerService: DefaultLoggerPublisherService; +let session: Session; +describe("DefaultSessionService", () => { + beforeEach(() => { + jest.restoreAllMocks(); + session = { + id: "123", + sendApdu: jest.fn(), + }; + loggerService = new DefaultLoggerPublisherService([], "session"); + sessionService = new DefaultSessionService(() => loggerService, []); + }); + + it("should have an empty sessions list", () => { + expect(sessionService.getSessions()).toEqual([]); + }); + + it("should add a session", () => { + sessionService.addSession(session); + expect(sessionService.getSessions()).toEqual([session]); + }); + + it("should not add a session if it already exists", () => { + sessionService.addSession(session); + sessionService.addSession(session); + expect(sessionService.getSessions()).toEqual([session]); + }); + + it("should remove a session", () => { + sessionService.addSession(session); + sessionService.removeSession(session.id); + expect(sessionService.getSessions()).toEqual([]); + }); + + it("should not remove a session if it does not exist", () => { + sessionService.removeSession(session.id); + expect(sessionService.getSessions()).toEqual([]); + }); + + it("should get a session", () => { + sessionService.addSession(session); + expect(sessionService.getSession(session.id)).toEqual(Either.of(session)); + }); + + it("should not get a session if it does not exist", () => { + expect(sessionService.getSession(session.id)).toEqual( + Left(new DeviceSessionNotFound()), + ); + }); + + it("should get all sessions", () => { + sessionService.addSession(session); + expect(sessionService.getSessions()).toEqual([session]); + }); +}); diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.ts new file mode 100644 index 000000000..c2fcd1e66 --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultSessionService.ts @@ -0,0 +1,58 @@ +import { inject, injectable } from "inversify"; +import { Maybe } from "purify-ts"; + +import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; +import { Session } from "@internal/device-session/model/Session"; +import { types as loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +@injectable() +export class DefaultSessionService { + private _sessions: Session[] = []; + private _logger: LoggerPublisherService; + + constructor( + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerModuleFactory: (tag: string) => LoggerPublisherService, + sessions: Session[], + ) { + this._sessions = sessions; + this._logger = loggerModuleFactory("session"); + } + + addSession(session: Session) { + const found = this._sessions.find((s) => s.id === session.id); + if (found) { + this._logger.warn("Session already exists", { data: { session } }); + return this; + } + + this._sessions.push(session); + this._logger.info("Session added", { data: { session } }); + return this; + } + + removeSession(sessionId: string) { + const found = this._sessions.find((s) => s.id === sessionId); + if (found) { + this._sessions = this._sessions.filter((s) => s.id !== sessionId); + this._logger.info("Session removed", { data: { sessionId } }); + return this; + } + + this._logger.warn("Session not found", { data: { sessionId } }); + return this; + } + + getSession(sessionId: string) { + const session = Maybe.fromNullable( + this._sessions.find((s) => s.id === sessionId), + ); + + return session.toEither(new DeviceSessionNotFound()); + } + + getSessions() { + return this._sessions; + } +} diff --git a/packages/core/src/internal/send/di/sendModule.test.ts b/packages/core/src/internal/send/di/sendModule.test.ts new file mode 100644 index 000000000..708a9ec59 --- /dev/null +++ b/packages/core/src/internal/send/di/sendModule.test.ts @@ -0,0 +1,19 @@ +import { Container } from "inversify"; + +import { sendModuleFactory } from "./sendModule"; + +describe("sendModuleFactory", () => { + describe("Default", () => { + let container: Container; + let mod: ReturnType; + beforeEach(() => { + mod = sendModuleFactory(); + container = new Container(); + container.load(mod); + }); + + it("should return the config module", () => { + expect(mod).toBeDefined(); + }); + }); +}); diff --git a/packages/core/src/internal/send/di/sendModule.ts b/packages/core/src/internal/send/di/sendModule.ts new file mode 100644 index 000000000..879d8d57a --- /dev/null +++ b/packages/core/src/internal/send/di/sendModule.ts @@ -0,0 +1,24 @@ +import { ContainerModule } from "inversify"; + +import { SendApduUseCase } from "@internal/send/usecase/SendApduUseCase"; + +import { sendTypes } from "./sendTypes"; + +type FactoryProps = { + stub: boolean; +}; + +export const sendModuleFactory = (_args: Partial = {}) => + new ContainerModule( + ( + bind, + _unbind, + _isBound, + _rebind, + _unbindAsync, + _onActivation, + _onDeactivation, + ) => { + bind(sendTypes.SendService).to(SendApduUseCase); + }, + ); diff --git a/packages/core/src/internal/send/di/sendTypes.ts b/packages/core/src/internal/send/di/sendTypes.ts new file mode 100644 index 000000000..34c246651 --- /dev/null +++ b/packages/core/src/internal/send/di/sendTypes.ts @@ -0,0 +1,3 @@ +export const sendTypes = { + SendService: Symbol.for("SendService"), +}; diff --git a/packages/core/src/internal/send/usecase/SendApduUseCase.ts b/packages/core/src/internal/send/usecase/SendApduUseCase.ts new file mode 100644 index 000000000..0f89548e4 --- /dev/null +++ b/packages/core/src/internal/send/usecase/SendApduUseCase.ts @@ -0,0 +1,39 @@ +import { inject, injectable } from "inversify"; + +import { types as deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; +import { SessionId } from "@internal/device-session/model/Session"; +import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; + +export type SendApduUseCaseArgs = { + sessionId: SessionId; + apdu: Uint8Array; +}; + +/** + * Sends an APDU to a connected device. + */ +@injectable() +export class SendApduUseCase { + constructor( + @inject(deviceSessionTypes.SessionService) + private sessionService: DefaultSessionService, + // @inject(loggerTypes.LoggerService) private logger: LoggerService, + ) {} + + async execute({ sessionId }: SendApduUseCaseArgs): Promise { + // [TODO] implement logging + // [SHOULD] this is temporary example code, to de replaced with actual implementation + const uint8Array = new Uint8Array([0x00, 0x00, 0x00, 0x00, 0x00]); + const deviceSession = this.sessionService.getSession(sessionId); + if (deviceSession.isLeft()) { + throw deviceSession.extract(); + } + + if (deviceSession.isRight()) { + const res = await deviceSession.extract().sendApdu(uint8Array); + return res; + } + + return; + } +} diff --git a/packages/core/src/shared/entities/.gitkeep b/packages/core/src/shared/entities/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/core/src/shared/utils/.gitkeep b/packages/core/src/shared/utils/.gitkeep deleted file mode 100644 index e69de29bb..000000000 From b8469f234b782ae25cf99d9a4a1623f50e80a1cb Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 27 Feb 2024 10:23:24 +0100 Subject: [PATCH 123/253] =?UTF-8?q?=F0=9F=94=A8=20(core):=20Add=20refacto?= =?UTF-8?q?=20prefix=20for=20branch=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- danger/dangerfile.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/danger/dangerfile.ts b/danger/dangerfile.ts index 523916421..dfb465cb1 100644 --- a/danger/dangerfile.ts +++ b/danger/dangerfile.ts @@ -1,7 +1,7 @@ import { danger, fail } from "danger"; const branchRegex = - /^(feature|bugfix|support|chore|doc)\/((DSDK|dsdk)-[0-9]+|NO-ISSUE|no-issue)\-.*/; + /^(feature|bugfix|support|chore|doc|refacto)\/((DSDK|dsdk)-[0-9]+|NO-ISSUE|no-issue)\-.*/; if (!branchRegex.test(danger.github.pr.head.ref)) { fail( "Please fix the PR branch name to match the convention, see [this documentation](https://ledgerhq.atlassian.net/wiki/spaces/WXP/pages/4527358147/DSDK+TS+Git+-+Github+conventions)" From b8bb4f460896f656c3a12b06186c9026bbcaec44 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 27 Feb 2024 17:22:54 +0100 Subject: [PATCH 124/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Replace?= =?UTF-8?q?=20relative=20imports=20with=20aliases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://ledgerhq.atlassian.net/wiki/spaces/WXP/pages/4502650957/SDK+TS+Guidelines#Aliases --- packages/core/.eslintrc.js | 1 - .../config/service/DefaultConfigService.test.ts | 10 +++++----- .../service/DefaultSessionService.test.ts | 9 +++++---- .../service/DefaultLoggerPublisherService.test.ts | 2 +- .../internal/usb/transport/WebUsbHidTransport.test.ts | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index 681118d22..55898adda 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -9,7 +9,6 @@ module.exports = { { files: ["**/*.test.ts"], rules: { - "no-restricted-imports": 0, "@typescript-eslint/unbound-method": 0, }, }, diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index 76cfa1ca2..62a393719 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -1,15 +1,15 @@ import { Either, Left } from "purify-ts"; +import { FileLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource"; +import { RestRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource"; import { JSONParseError } from "@internal/config/di/configTypes"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; -import { DefaultLoggerPublisherService } from "../../logger-publisher/service/DefaultLoggerPublisherService"; -import { FileLocalConfigDataSource } from "../data/LocalConfigDataSource"; -import { RestRemoteConfigDataSource } from "../data/RemoteConfigDataSource"; import { ConfigService } from "./ConfigService"; import { DefaultConfigService } from "./DefaultConfigService"; -jest.mock("../data/LocalConfigDataSource"); -jest.mock("../data/RemoteConfigDataSource"); +jest.mock("@internal/config/data/LocalConfigDataSource"); +jest.mock("@internal/config/data/RemoteConfigDataSource"); let localDataSource: jest.Mocked; let remoteDataSource: jest.Mocked; diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts index 1c22348d6..a878beb1e 100644 --- a/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts @@ -1,11 +1,12 @@ import { Either, Left } from "purify-ts"; -import { DefaultLoggerPublisherService } from "../../logger-publisher/service/DefaultLoggerPublisherService"; -import { DeviceSessionNotFound } from "../model/Errors"; -import { Session } from "../model/Session"; +import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; +import { Session } from "@internal/device-session/model/Session"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; + import { DefaultSessionService } from "./DefaultSessionService"; -jest.mock("../../logger-publisher/service/DefaultLoggerPublisherService"); +jest.mock("@internal/logger-publisher/service/DefaultLoggerPublisherService"); let sessionService: DefaultSessionService; let loggerService: DefaultLoggerPublisherService; diff --git a/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.ts b/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.ts index 159067660..4262aaf28 100644 --- a/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.ts +++ b/packages/core/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.ts @@ -3,7 +3,7 @@ import { ConsoleLogger } from "@api/logger-subscriber/service/ConsoleLogger"; import { DefaultLoggerPublisherService } from "./DefaultLoggerPublisherService"; -jest.mock("../../../api/logger-subscriber/service/ConsoleLogger"); +jest.mock("@api/logger-subscriber/service/ConsoleLogger"); jest.useFakeTimers().setSystemTime(new Date("2024-01-01")); let service: DefaultLoggerPublisherService; diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index 3457b8612..674980fda 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -16,7 +16,7 @@ import { import { WebUsbHidTransport } from "./WebUsbHidTransport"; -jest.mock("../../../internal/logger-publisher/service/LoggerPublisherService"); +jest.mock("@internal/logger-publisher/service/LoggerPublisherService"); // Our StaticDeviceModelDataSource can directly be used in our unit tests const usbDeviceModelDataSource = new StaticDeviceModelDataSource(); From cc908fe4824c25f2527fe45f175500b7090e3bb7 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 27 Feb 2024 17:20:33 +0100 Subject: [PATCH 125/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Improve?= =?UTF-8?q?=20di=20types=20import/export?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://ledgerhq.atlassian.net/wiki/spaces/WXP/pages/4502650957/SDK+TS+Guidelines#Folder-di --- packages/core/src/api/DeviceSdk.test.ts | 4 ++-- packages/core/src/api/DeviceSdk.ts | 12 ++++++------ .../src/internal/config/di/configModule.test.ts | 14 +++++++++----- .../core/src/internal/config/di/configModule.ts | 14 +++++++------- .../core/src/internal/config/di/configTypes.ts | 2 +- .../config/service/DefaultConfigService.ts | 4 ++-- .../config/usecase/GetSdkVersionUseCase.ts | 4 ++-- .../device-model/di/deviceModelModule.test.ts | 4 ++-- .../internal/device-model/di/deviceModelModule.ts | 4 ++-- .../{deviceModelDiTypes.ts => deviceModelTypes.ts} | 2 +- .../device-session/di/deviceSessionModule.ts | 6 +++--- .../device-session/di/deviceSessionTypes.ts | 2 +- .../device-session/service/DefaultFramerService.ts | 2 +- .../service/DefaultSessionService.ts | 2 +- .../internal/discovery/di/discoveryModule.test.ts | 8 ++++---- .../src/internal/discovery/di/discoveryModule.ts | 8 ++++---- .../di/{discoveryDiTypes.ts => discoveryTypes.ts} | 2 +- .../internal/logger-publisher/di/loggerModule.ts | 4 ++-- .../internal/logger-publisher/di/loggerTypes.ts | 2 +- .../src/internal/send/usecase/SendApduUseCase.ts | 2 +- .../internal/usb/transport/WebUsbHidTransport.ts | 6 +++--- 21 files changed, 56 insertions(+), 52 deletions(-) rename packages/core/src/internal/device-model/di/{deviceModelDiTypes.ts => deviceModelTypes.ts} (64%) rename packages/core/src/internal/discovery/di/{discoveryDiTypes.ts => discoveryTypes.ts} (84%) diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts index 2da93163f..aed02851c 100644 --- a/packages/core/src/api/DeviceSdk.test.ts +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -1,6 +1,6 @@ import { LocalConfigDataSource } from "@internal/config/data/ConfigDataSource"; import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; -import { types as ConfigTypes } from "@internal/config/di/configTypes"; +import { configTypes } from "@internal/config/di/configTypes"; import pkg from "@root/package.json"; import { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; @@ -45,7 +45,7 @@ describe("DeviceSdk", () => { expect(sdk).toBeInstanceOf(DeviceSdk); expect( sdk.container.get( - ConfigTypes.LocalConfigDataSource, + configTypes.LocalConfigDataSource, ), ).toBeInstanceOf(StubLocalConfigDataSource); }); diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 0e7a72ecf..f5c86c701 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -1,9 +1,9 @@ import { Container } from "inversify"; import { Observable } from "rxjs"; -import { types as ConfigTypes } from "@internal/config/di/configTypes"; +import { configTypes } from "@internal/config/di/configTypes"; import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; -import { discoveryDiTypes } from "@internal/discovery/di/discoveryDiTypes"; +import { discoveryTypes } from "@internal/discovery/di/discoveryTypes"; import { ConnectUseCase, ConnectUseCaseArgs, @@ -38,25 +38,25 @@ export class DeviceSdk { getVersion(): Promise { return this.container - .get(ConfigTypes.GetSdkVersionUseCase) + .get(configTypes.GetSdkVersionUseCase) .getSdkVersion(); } startDiscovering(): Observable { return this.container - .get(discoveryDiTypes.StartDiscoveringUseCase) + .get(discoveryTypes.StartDiscoveringUseCase) .execute(); } stopDiscovering() { return this.container - .get(discoveryDiTypes.StopDiscoveringUseCase) + .get(discoveryTypes.StopDiscoveringUseCase) .execute(); } connect(args: ConnectUseCaseArgs) { return this.container - .get(discoveryDiTypes.ConnectUseCase) + .get(discoveryTypes.ConnectUseCase) .execute(args); } diff --git a/packages/core/src/internal/config/di/configModule.test.ts b/packages/core/src/internal/config/di/configModule.test.ts index 9d3fab55e..2633454ad 100644 --- a/packages/core/src/internal/config/di/configModule.test.ts +++ b/packages/core/src/internal/config/di/configModule.test.ts @@ -6,7 +6,7 @@ import { RestRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDa import { StubRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource.stub"; import { configModuleFactory } from "./configModule"; -import { types } from "./configTypes"; +import { configTypes } from "./configTypes"; describe("configModuleFactory", () => { describe("Default", () => { @@ -23,8 +23,10 @@ describe("configModuleFactory", () => { }); it("should return none mocked data sources", () => { - const localDataSource = container.get(types.LocalConfigDataSource); - const remoteDataSource = container.get(types.RemoteConfigDataSource); + const localDataSource = container.get(configTypes.LocalConfigDataSource); + const remoteDataSource = container.get( + configTypes.RemoteConfigDataSource, + ); expect(localDataSource).toBeInstanceOf(FileLocalConfigDataSource); expect(remoteDataSource).toBeInstanceOf(RestRemoteConfigDataSource); }); @@ -44,8 +46,10 @@ describe("configModuleFactory", () => { }); it("should return mocked data sources", () => { - const localDataSource = container.get(types.LocalConfigDataSource); - const remoteDataSource = container.get(types.RemoteConfigDataSource); + const localDataSource = container.get(configTypes.LocalConfigDataSource); + const remoteDataSource = container.get( + configTypes.RemoteConfigDataSource, + ); expect(localDataSource).toBeInstanceOf(StubLocalConfigDataSource); expect(remoteDataSource).toBeInstanceOf(StubRemoteConfigDataSource); }); diff --git a/packages/core/src/internal/config/di/configModule.ts b/packages/core/src/internal/config/di/configModule.ts index 5d27ac93c..f3578d72e 100644 --- a/packages/core/src/internal/config/di/configModule.ts +++ b/packages/core/src/internal/config/di/configModule.ts @@ -7,7 +7,7 @@ import { StubRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDa import { DefaultConfigService } from "@internal/config/service/DefaultConfigService"; import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; -import { types } from "./configTypes"; +import { configTypes } from "./configTypes"; // This module is used to configure the dependency injection container // This is where we will bind our interfaces to their implementations (or mocks...) @@ -19,14 +19,14 @@ export const configModuleFactory = ({ stub = false, }: Partial = {}) => new ContainerModule((bind, _unbind, _isBound, rebind) => { - bind(types.LocalConfigDataSource).to(FileLocalConfigDataSource); - bind(types.RemoteConfigDataSource).to(RestRemoteConfigDataSource); - bind(types.GetSdkVersionUseCase).to(GetSdkVersionUseCase); - bind(types.ConfigService).to(DefaultConfigService); + bind(configTypes.LocalConfigDataSource).to(FileLocalConfigDataSource); + bind(configTypes.RemoteConfigDataSource).to(RestRemoteConfigDataSource); + bind(configTypes.GetSdkVersionUseCase).to(GetSdkVersionUseCase); + bind(configTypes.ConfigService).to(DefaultConfigService); if (stub) { // We can rebind our interfaces to their mock implementations - rebind(types.LocalConfigDataSource).to(StubLocalConfigDataSource); - rebind(types.RemoteConfigDataSource).to(StubRemoteConfigDataSource); + rebind(configTypes.LocalConfigDataSource).to(StubLocalConfigDataSource); + rebind(configTypes.RemoteConfigDataSource).to(StubRemoteConfigDataSource); } }); diff --git a/packages/core/src/internal/config/di/configTypes.ts b/packages/core/src/internal/config/di/configTypes.ts index c91af94fa..e9c1a6ebe 100644 --- a/packages/core/src/internal/config/di/configTypes.ts +++ b/packages/core/src/internal/config/di/configTypes.ts @@ -1,4 +1,4 @@ -export const types = { +export const configTypes = { LocalConfigDataSource: Symbol.for("LocalConfigDataSource"), RemoteConfigDataSource: Symbol.for("RemoteConfigDataSource"), ConfigService: Symbol.for("ConfigService"), diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index 0612f33af..e559332f1 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -4,9 +4,9 @@ import type { LocalConfigDataSource, RemoteConfigDataSource, } from "@internal/config/data/ConfigDataSource"; -import { types as configTypes } from "@internal/config/di/configTypes"; +import { configTypes } from "@internal/config/di/configTypes"; import { Config } from "@internal/config/model/Config"; -import { types as loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { ConfigService } from "./ConfigService"; diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts index 4de21457f..8157707df 100644 --- a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts +++ b/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts @@ -1,6 +1,6 @@ import { inject, injectable } from "inversify"; -import { types } from "@internal/config/di/configTypes"; +import { configTypes } from "@internal/config/di/configTypes"; import type { ConfigService } from "@internal/config/service/ConfigService"; /** @@ -11,7 +11,7 @@ import type { ConfigService } from "@internal/config/service/ConfigService"; @injectable() export class GetSdkVersionUseCase { private _configService: ConfigService; - constructor(@inject(types.ConfigService) configService: ConfigService) { + constructor(@inject(configTypes.ConfigService) configService: ConfigService) { this._configService = configService; } async getSdkVersion(): Promise { diff --git a/packages/core/src/internal/device-model/di/deviceModelModule.test.ts b/packages/core/src/internal/device-model/di/deviceModelModule.test.ts index 9e876f14b..e3d149431 100644 --- a/packages/core/src/internal/device-model/di/deviceModelModule.test.ts +++ b/packages/core/src/internal/device-model/di/deviceModelModule.test.ts @@ -2,8 +2,8 @@ import { Container } from "inversify"; import { StaticDeviceModelDataSource } from "@internal/device-model/data/StaticDeviceModelDataSource"; -import { deviceModelDiTypes } from "./deviceModelDiTypes"; import { deviceModelModuleFactory } from "./deviceModelModule"; +import { deviceModelTypes } from "./deviceModelTypes"; describe("deviceModelModuleFactory", () => { let container: Container; @@ -20,7 +20,7 @@ describe("deviceModelModuleFactory", () => { it("should return none mocked services and data sources", () => { const deviceModelDataSource = container.get( - deviceModelDiTypes.DeviceModelDataSource, + deviceModelTypes.DeviceModelDataSource, ); expect(deviceModelDataSource).toBeInstanceOf(StaticDeviceModelDataSource); }); diff --git a/packages/core/src/internal/device-model/di/deviceModelModule.ts b/packages/core/src/internal/device-model/di/deviceModelModule.ts index df34df645..f41abd4ca 100644 --- a/packages/core/src/internal/device-model/di/deviceModelModule.ts +++ b/packages/core/src/internal/device-model/di/deviceModelModule.ts @@ -2,7 +2,7 @@ import { ContainerModule } from "inversify"; import { StaticDeviceModelDataSource } from "@internal/device-model/data/StaticDeviceModelDataSource"; -import { deviceModelDiTypes } from "./deviceModelDiTypes"; +import { deviceModelTypes } from "./deviceModelTypes"; type FactoryProps = { stub: boolean; @@ -12,7 +12,7 @@ export const deviceModelModuleFactory = ({ stub = false, }: Partial = {}) => new ContainerModule((bind, _unbind, _isBound, _rebind) => { - bind(deviceModelDiTypes.DeviceModelDataSource).to( + bind(deviceModelTypes.DeviceModelDataSource).to( StaticDeviceModelDataSource, ); diff --git a/packages/core/src/internal/device-model/di/deviceModelDiTypes.ts b/packages/core/src/internal/device-model/di/deviceModelTypes.ts similarity index 64% rename from packages/core/src/internal/device-model/di/deviceModelDiTypes.ts rename to packages/core/src/internal/device-model/di/deviceModelTypes.ts index 2f1392b99..35656704a 100644 --- a/packages/core/src/internal/device-model/di/deviceModelDiTypes.ts +++ b/packages/core/src/internal/device-model/di/deviceModelTypes.ts @@ -1,3 +1,3 @@ -export const deviceModelDiTypes = { +export const deviceModelTypes = { DeviceModelDataSource: Symbol.for("DeviceModelDataSource"), }; diff --git a/packages/core/src/internal/device-session/di/deviceSessionModule.ts b/packages/core/src/internal/device-session/di/deviceSessionModule.ts index 25a0f9622..124150c80 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionModule.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionModule.ts @@ -4,7 +4,7 @@ import { Session } from "@internal/device-session/model/Session"; import { DefaultFramerService } from "@internal/device-session/service/DefaultFramerService"; import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; -import { types } from "./deviceSessionTypes"; +import { deviceSessionTypes } from "./deviceSessionTypes"; export type DeviceSessionModuleArgs = Partial<{ stub: boolean; @@ -22,7 +22,7 @@ export const deviceSessionModuleFactory = () => _onActivation, _onDeactivation, ) => { - bind(types.FramerService).to(DefaultFramerService); - bind(types.SessionService).to(DefaultSessionService); + bind(deviceSessionTypes.FramerService).to(DefaultFramerService); + bind(deviceSessionTypes.SessionService).to(DefaultSessionService); }, ); diff --git a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts index 9c68c97b4..9162bd182 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts @@ -1,4 +1,4 @@ -export const types = { +export const deviceSessionTypes = { FramerService: Symbol.for("FramerService"), SessionService: Symbol.for("SessionService"), }; diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.ts b/packages/core/src/internal/device-session/service/DefaultFramerService.ts index ed82eb4de..201b73352 100644 --- a/packages/core/src/internal/device-session/service/DefaultFramerService.ts +++ b/packages/core/src/internal/device-session/service/DefaultFramerService.ts @@ -16,7 +16,7 @@ import { import { Frame } from "@internal/device-session/model/Frame"; import { FrameHeader } from "@internal/device-session/model/FrameHeader"; import { FramerUtils } from "@internal/device-session/utils/FramerUtils"; -import { types as loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { SdkError } from "@root/src/api/Error"; diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.ts index c2fcd1e66..f6bdafe7f 100644 --- a/packages/core/src/internal/device-session/service/DefaultSessionService.ts +++ b/packages/core/src/internal/device-session/service/DefaultSessionService.ts @@ -3,7 +3,7 @@ import { Maybe } from "purify-ts"; import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; import { Session } from "@internal/device-session/model/Session"; -import { types as loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; @injectable() diff --git a/packages/core/src/internal/discovery/di/discoveryModule.test.ts b/packages/core/src/internal/discovery/di/discoveryModule.test.ts index c052212cd..8169359ba 100644 --- a/packages/core/src/internal/discovery/di/discoveryModule.test.ts +++ b/packages/core/src/internal/discovery/di/discoveryModule.test.ts @@ -7,8 +7,8 @@ import { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscove import { loggerModuleFactory } from "@internal/logger-publisher/di/loggerModule"; import { usbModuleFactory } from "@internal/usb/di/usbModule"; -import { discoveryDiTypes } from "./discoveryDiTypes"; import { discoveryModuleFactory } from "./discoveryModule"; +import { discoveryTypes } from "./discoveryTypes"; describe("discoveryModuleFactory", () => { let container: Container; @@ -31,16 +31,16 @@ describe("discoveryModuleFactory", () => { it("should return none mocked use cases", () => { const startDiscoveringUseCase = container.get( - discoveryDiTypes.StartDiscoveringUseCase, + discoveryTypes.StartDiscoveringUseCase, ); expect(startDiscoveringUseCase).toBeInstanceOf(StartDiscoveringUseCase); const stopDiscoveringUseCase = container.get( - discoveryDiTypes.StopDiscoveringUseCase, + discoveryTypes.StopDiscoveringUseCase, ); expect(stopDiscoveringUseCase).toBeInstanceOf(StopDiscoveringUseCase); - const connectUseCase = container.get(discoveryDiTypes.ConnectUseCase); + const connectUseCase = container.get(discoveryTypes.ConnectUseCase); expect(connectUseCase).toBeInstanceOf(ConnectUseCase); }); }); diff --git a/packages/core/src/internal/discovery/di/discoveryModule.ts b/packages/core/src/internal/discovery/di/discoveryModule.ts index 841eaf61c..d26c3e00b 100644 --- a/packages/core/src/internal/discovery/di/discoveryModule.ts +++ b/packages/core/src/internal/discovery/di/discoveryModule.ts @@ -4,7 +4,7 @@ import { ConnectUseCase } from "@internal/discovery/use-case/ConnectUseCase"; import { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; import { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; -import { discoveryDiTypes } from "./discoveryDiTypes"; +import { discoveryTypes } from "./discoveryTypes"; type FactoryProps = { stub: boolean; @@ -14,9 +14,9 @@ export const discoveryModuleFactory = ({ stub = false, }: Partial = {}) => new ContainerModule((bind, _unbind, _isBound, _rebind) => { - bind(discoveryDiTypes.StartDiscoveringUseCase).to(StartDiscoveringUseCase); - bind(discoveryDiTypes.StopDiscoveringUseCase).to(StopDiscoveringUseCase); - bind(discoveryDiTypes.ConnectUseCase).to(ConnectUseCase); + bind(discoveryTypes.StartDiscoveringUseCase).to(StartDiscoveringUseCase); + bind(discoveryTypes.StopDiscoveringUseCase).to(StopDiscoveringUseCase); + bind(discoveryTypes.ConnectUseCase).to(ConnectUseCase); if (stub) { // We can rebind our interfaces to their mock implementations diff --git a/packages/core/src/internal/discovery/di/discoveryDiTypes.ts b/packages/core/src/internal/discovery/di/discoveryTypes.ts similarity index 84% rename from packages/core/src/internal/discovery/di/discoveryDiTypes.ts rename to packages/core/src/internal/discovery/di/discoveryTypes.ts index 2168a339f..ecea39d90 100644 --- a/packages/core/src/internal/discovery/di/discoveryDiTypes.ts +++ b/packages/core/src/internal/discovery/di/discoveryTypes.ts @@ -1,4 +1,4 @@ -export const discoveryDiTypes = { +export const discoveryTypes = { StartDiscoveringUseCase: Symbol.for("StartDiscoveringUseCase"), StopDiscoveringUseCase: Symbol.for("StopDiscoveringUseCase"), ConnectUseCase: Symbol.for("ConnectUseCase"), diff --git a/packages/core/src/internal/logger-publisher/di/loggerModule.ts b/packages/core/src/internal/logger-publisher/di/loggerModule.ts index 897af2579..72e00dbe9 100644 --- a/packages/core/src/internal/logger-publisher/di/loggerModule.ts +++ b/packages/core/src/internal/logger-publisher/di/loggerModule.ts @@ -4,7 +4,7 @@ import { LoggerSubscriberService } from "@api/logger-subscriber/service/LoggerSu import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { types } from "./loggerTypes"; +import { loggerTypes } from "./loggerTypes"; type FactoryProps = { subscribers: LoggerSubscriberService[]; @@ -24,7 +24,7 @@ export const loggerModuleFactory = ( _onDeactivation, ) => { bind>( - types.LoggerPublisherServiceFactory, + loggerTypes.LoggerPublisherServiceFactory, ).toFactory((_context) => { return (tag: string) => new DefaultLoggerPublisherService(subscribers, tag); diff --git a/packages/core/src/internal/logger-publisher/di/loggerTypes.ts b/packages/core/src/internal/logger-publisher/di/loggerTypes.ts index 6e5efcc88..820a66ef5 100644 --- a/packages/core/src/internal/logger-publisher/di/loggerTypes.ts +++ b/packages/core/src/internal/logger-publisher/di/loggerTypes.ts @@ -1,4 +1,4 @@ -export const types = { +export const loggerTypes = { LoggerPublisherService: Symbol.for("LoggerPublisherService"), LoggerPublisherServiceFactory: Symbol.for("LoggerPublisherServiceFactory"), }; diff --git a/packages/core/src/internal/send/usecase/SendApduUseCase.ts b/packages/core/src/internal/send/usecase/SendApduUseCase.ts index 0f89548e4..495958cd9 100644 --- a/packages/core/src/internal/send/usecase/SendApduUseCase.ts +++ b/packages/core/src/internal/send/usecase/SendApduUseCase.ts @@ -1,6 +1,6 @@ import { inject, injectable } from "inversify"; -import { types as deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { SessionId } from "@internal/device-session/model/Session"; import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index ae433276a..08c8ac776 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -4,9 +4,9 @@ import { from, Observable, switchMap } from "rxjs"; import { v4 as uuid } from "uuid"; import type { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; -import { deviceModelDiTypes } from "@internal/device-model/di/deviceModelDiTypes"; +import { deviceModelTypes } from "@internal/device-model/di/deviceModelTypes"; import { DeviceId } from "@internal/device-model/model/DeviceModel"; -import { types as loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { ledgerVendorId } from "@internal/usb/data/UsbHidConfig"; import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; @@ -39,7 +39,7 @@ export class WebUsbHidTransport implements UsbHidTransport { private logger: LoggerPublisherService; constructor( - @inject(deviceModelDiTypes.DeviceModelDataSource) + @inject(deviceModelTypes.DeviceModelDataSource) private deviceModelDataSource: DeviceModelDataSource, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerServiceFactory: (tag: string) => LoggerPublisherService, From 290fa553f89a27402517f3ad105ac42c5fc84b87 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 27 Feb 2024 14:36:06 +0100 Subject: [PATCH 126/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Move=20c?= =?UTF-8?q?onfig=20errors=20in=20specific=20file=20in=20model=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://ledgerhq.atlassian.net/wiki/spaces/WXP/pages/4502650957/SDK+TS+Guidelines#Folder-model --- .../internal/config/data/ConfigDataSource.ts | 4 +- .../config/data/LocalConfigDataSource.test.ts | 2 +- .../config/data/LocalConfigDataSource.ts | 4 +- .../data/RemoteConfigDataSource.test.ts | 2 +- .../config/data/RemoteConfigDataSource.ts | 4 +- .../src/internal/config/di/configTypes.ts | 39 ------------------- .../core/src/internal/config/model/Errors.ts | 38 ++++++++++++++++++ .../service/DefaultConfigService.test.ts | 2 +- .../config/service/DefaultConfigService.ts | 16 ++++++-- 9 files changed, 59 insertions(+), 52 deletions(-) create mode 100644 packages/core/src/internal/config/model/Errors.ts diff --git a/packages/core/src/internal/config/data/ConfigDataSource.ts b/packages/core/src/internal/config/data/ConfigDataSource.ts index 8215efafa..f2e830f58 100644 --- a/packages/core/src/internal/config/data/ConfigDataSource.ts +++ b/packages/core/src/internal/config/data/ConfigDataSource.ts @@ -1,10 +1,10 @@ import { Either } from "purify-ts"; +import { Config } from "@internal/config/model/Config"; import { LocalConfigFailure, RemoteConfigFailure, -} from "@internal/config/di/configTypes"; -import { Config } from "@internal/config/model/Config"; +} from "@internal/config/model/Errors"; // Describe the different data sources interfaces our application could have diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts index e4383377f..e5778c7de 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.test.ts @@ -1,6 +1,6 @@ import { Either, Left } from "purify-ts"; -import { JSONParseError, ReadFileError } from "@internal/config/di/configTypes"; +import { JSONParseError, ReadFileError } from "@internal/config/model/Errors"; import { LocalConfigDataSource } from "./ConfigDataSource"; import * as LocalConfig from "./LocalConfigDataSource"; diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index 62e884084..14a114c4c 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -1,12 +1,12 @@ import { injectable } from "inversify"; import { Either } from "purify-ts"; +import { Config } from "@internal/config/model/Config"; import { JSONParseError, LocalConfigFailure, ReadFileError, -} from "@internal/config/di/configTypes"; -import { Config } from "@internal/config/model/Config"; +} from "@internal/config/model/Errors"; import pkg from "@root/package.json"; import { LocalConfigDataSource } from "./ConfigDataSource"; diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts index d6725ed9e..556cc244d 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.test.ts @@ -4,7 +4,7 @@ import { ApiCallError, JSONParseError, ParseResponseError, -} from "@internal/config/di/configTypes"; +} from "@internal/config/model/Errors"; import { RemoteConfigDataSource } from "./ConfigDataSource"; import { RestRemoteConfigDataSource } from "./RemoteConfigDataSource"; diff --git a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts index 8b2cfa18e..1518c7e28 100644 --- a/packages/core/src/internal/config/data/RemoteConfigDataSource.ts +++ b/packages/core/src/internal/config/data/RemoteConfigDataSource.ts @@ -1,13 +1,13 @@ import { injectable } from "inversify"; import { Either, Left } from "purify-ts"; +import { Config } from "@internal/config/model/Config"; import { ApiCallError, JSONParseError, ParseResponseError, RemoteConfigFailure, -} from "@internal/config/di/configTypes"; -import { Config } from "@internal/config/model/Config"; +} from "@internal/config/model/Errors"; import { RemoteConfigDataSource } from "./ConfigDataSource"; import { ConfigDto } from "./Dto"; diff --git a/packages/core/src/internal/config/di/configTypes.ts b/packages/core/src/internal/config/di/configTypes.ts index e9c1a6ebe..ffe10b732 100644 --- a/packages/core/src/internal/config/di/configTypes.ts +++ b/packages/core/src/internal/config/di/configTypes.ts @@ -4,42 +4,3 @@ export const configTypes = { ConfigService: Symbol.for("ConfigService"), GetSdkVersionUseCase: Symbol.for("GetSdkVersionUseCase"), }; - -export class ApiCallError { - readonly _tag = "ApiCallError"; - originalError?: Error; - constructor(readonly err?: Error) { - this.originalError = err; - } -} - -export class ParseResponseError { - readonly _tag = "ParseResponseError"; - originalError?: Error; - constructor(readonly err?: Error) { - this.originalError = err; - } -} - -export class JSONParseError { - readonly _tag = "JSONParseError"; - originalError?: Error; - constructor(readonly err?: Error) { - this.originalError = err; - } -} - -export type RemoteConfigFailure = - | ApiCallError - | ParseResponseError - | JSONParseError; - -export class ReadFileError { - readonly _tag = "ReadFileError"; - originalError?: Error; - constructor(readonly err?: Error) { - this.originalError = err; - } -} - -export type LocalConfigFailure = JSONParseError | ReadFileError; diff --git a/packages/core/src/internal/config/model/Errors.ts b/packages/core/src/internal/config/model/Errors.ts new file mode 100644 index 000000000..0f88a8299 --- /dev/null +++ b/packages/core/src/internal/config/model/Errors.ts @@ -0,0 +1,38 @@ +export class ApiCallError { + readonly _tag = "ApiCallError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export class ParseResponseError { + readonly _tag = "ParseResponseError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export class JSONParseError { + readonly _tag = "JSONParseError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export type RemoteConfigFailure = + | ApiCallError + | ParseResponseError + | JSONParseError; + +export class ReadFileError { + readonly _tag = "ReadFileError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} + +export type LocalConfigFailure = JSONParseError | ReadFileError; diff --git a/packages/core/src/internal/config/service/DefaultConfigService.test.ts b/packages/core/src/internal/config/service/DefaultConfigService.test.ts index 62a393719..da040907f 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.test.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.test.ts @@ -2,7 +2,7 @@ import { Either, Left } from "purify-ts"; import { FileLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource"; import { RestRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource"; -import { JSONParseError } from "@internal/config/di/configTypes"; +import { JSONParseError } from "@internal/config/model/Errors"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { ConfigService } from "./ConfigService"; diff --git a/packages/core/src/internal/config/service/DefaultConfigService.ts b/packages/core/src/internal/config/service/DefaultConfigService.ts index e559332f1..4fcdb79b8 100644 --- a/packages/core/src/internal/config/service/DefaultConfigService.ts +++ b/packages/core/src/internal/config/service/DefaultConfigService.ts @@ -6,6 +6,10 @@ import type { } from "@internal/config/data/ConfigDataSource"; import { configTypes } from "@internal/config/di/configTypes"; import { Config } from "@internal/config/model/Config"; +import { + LocalConfigFailure, + RemoteConfigFailure, +} from "@internal/config/model/Errors"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; @@ -29,9 +33,13 @@ export class DefaultConfigService implements ConfigService { async getSdkConfig(): Promise { // Returns an Either - const localConfig = this._local.getConfig().ifLeft((error) => { - this._logger.error("Local config not available", { data: { error } }); - }); + const localConfig = this._local + .getConfig() + .ifLeft((error: LocalConfigFailure) => { + this._logger.error("Local config not available", { + data: { error }, + }); + }); if (localConfig.isRight()) { const val = localConfig.extract(); @@ -41,7 +49,7 @@ export class DefaultConfigService implements ConfigService { return this._remote.getConfig().then((config) => { return config - .mapLeft((error) => { + .mapLeft((error: RemoteConfigFailure) => { // Here we handle the error and return a default value this._logger.error("Local config available", { data: { error } }); return { name: "DeadSdk", version: "0.0.0-dead.1" }; From 8bd3d78b0b2c8196a84141aa40485f6914586858 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 27 Feb 2024 14:36:24 +0100 Subject: [PATCH 127/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Rename?= =?UTF-8?q?=20usecase=20folder=20by=20use-case?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://ledgerhq.atlassian.net/wiki/spaces/WXP/pages/4502650957/SDK+TS+Guidelines#Folder-naming --- packages/core/src/api/DeviceSdk.ts | 2 +- packages/core/src/internal/config/di/configModule.ts | 2 +- .../config/{usecase => use-case}/GetSdkVersionUseCase.test.ts | 0 .../config/{usecase => use-case}/GetSdkVersionUseCase.ts | 0 4 files changed, 2 insertions(+), 2 deletions(-) rename packages/core/src/internal/config/{usecase => use-case}/GetSdkVersionUseCase.test.ts (100%) rename packages/core/src/internal/config/{usecase => use-case}/GetSdkVersionUseCase.ts (100%) diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index f5c86c701..b0a9e8ea5 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -2,7 +2,7 @@ import { Container } from "inversify"; import { Observable } from "rxjs"; import { configTypes } from "@internal/config/di/configTypes"; -import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; +import { GetSdkVersionUseCase } from "@internal/config/use-case/GetSdkVersionUseCase"; import { discoveryTypes } from "@internal/discovery/di/discoveryTypes"; import { ConnectUseCase, diff --git a/packages/core/src/internal/config/di/configModule.ts b/packages/core/src/internal/config/di/configModule.ts index f3578d72e..762c9910d 100644 --- a/packages/core/src/internal/config/di/configModule.ts +++ b/packages/core/src/internal/config/di/configModule.ts @@ -5,7 +5,7 @@ import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigData import { RestRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource"; import { StubRemoteConfigDataSource } from "@internal/config/data/RemoteConfigDataSource.stub"; import { DefaultConfigService } from "@internal/config/service/DefaultConfigService"; -import { GetSdkVersionUseCase } from "@internal/config/usecase/GetSdkVersionUseCase"; +import { GetSdkVersionUseCase } from "@internal/config/use-case/GetSdkVersionUseCase"; import { configTypes } from "./configTypes"; diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts b/packages/core/src/internal/config/use-case/GetSdkVersionUseCase.test.ts similarity index 100% rename from packages/core/src/internal/config/usecase/GetSdkVersionUseCase.test.ts rename to packages/core/src/internal/config/use-case/GetSdkVersionUseCase.test.ts diff --git a/packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts b/packages/core/src/internal/config/use-case/GetSdkVersionUseCase.ts similarity index 100% rename from packages/core/src/internal/config/usecase/GetSdkVersionUseCase.ts rename to packages/core/src/internal/config/use-case/GetSdkVersionUseCase.ts From 391326e7b6cdeba2afcbcce1c866537c02e9f605 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 1 Mar 2024 11:25:21 +0100 Subject: [PATCH 128/253] =?UTF-8?q?=F0=9F=94=A7=20(dx):=20SonarQube=20to?= =?UTF-8?q?=20ignore=20/danger=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index 2d21d046b..50100e7d8 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,4 +1,4 @@ sonar.projectKey=LedgerHQ_device-sdk-ts_AY3G5or9RLDSln8Rix8q sonar.typescript.tsconfigPaths=tsconfig.json sonar.javascript.lcov.reportPaths=**/coverage/lcov.info -sonar.exclusions=**/node_modules/**,**/coverage/**,**/.next,**/pocs/**,**/.turbo/**,**/lib/** \ No newline at end of file +sonar.exclusions=**/node_modules/**,**/coverage/**,**/.next,**/pocs/**,**/.turbo/**,**/lib/**,**/danger/** \ No newline at end of file From 9033203a8250730570fb564112192d8461c48584 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 19 Mar 2024 15:09:21 +0100 Subject: [PATCH 129/253] :heavy_plus_sign: (core): Add @sentry/minimal Closes LIVE-11264 --- packages/core/package.json | 9 +++-- .../usb/transport/WebUsbHidTransport.ts | 10 ++++- pnpm-lock.yaml | 38 +++++++++++++++++-- 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index c74e59fa0..3fba186ae 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -21,6 +21,7 @@ "module:create": "pnpm hygen core-module with-prompt" }, "dependencies": { + "@sentry/minimal": "^6.19.7", "inversify": "^6.0.2", "inversify-logger-middleware": "^3.1.0", "purify-ts": "^2.0.3", @@ -30,13 +31,13 @@ "uuid": "^9.0.1" }, "devDependencies": { - "@types/semver": "^7.5.6", - "@types/uuid": "^9.0.8", - "@types/w3c-web-hid": "^1.0.6", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", - "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/prettier-config-dsdk": "workspace:*", + "@ledgerhq/tsconfig-dsdk": "workspace:*", + "@types/semver": "^7.5.6", + "@types/uuid": "^9.0.8", + "@types/w3c-web-hid": "^1.0.6", "concurrently": "^8.2.2", "ts-node": "^10.9.2", "tsc-alias": "^1.8.8" diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 08c8ac776..7ba87e2cf 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -1,3 +1,4 @@ +import * as Sentry from "@sentry/minimal"; import { inject, injectable } from "inversify"; import { Either, EitherAsync, Left, Right } from "purify-ts"; import { from, Observable, switchMap } from "rxjs"; @@ -94,10 +95,12 @@ export class WebUsbHidTransport implements UsbHidTransport { filters: [{ vendorId: ledgerVendorId }], }); } catch (error) { + const deviceError = new NoAccessibleDeviceError(error as Error); this.logger.error(`promptDeviceAccess: error requesting device`, { data: { error }, }); - throw new NoAccessibleDeviceError(error as Error); + Sentry.captureException(deviceError); + throw deviceError; } this.logger.debug( @@ -161,6 +164,7 @@ export class WebUsbHidTransport implements UsbHidTransport { this.logger.error("Error while getting accessible device", { data: { error }, }); + Sentry.captureException(error); throw error; }, Right: (hidDevices) => { @@ -271,10 +275,12 @@ export class WebUsbHidTransport implements UsbHidTransport { if (error instanceof DOMException && error.name === "InvalidStateError") { this.logger.debug(`Device ${deviceId} is already opened`); } else { + const connectionError = new OpeningConnectionError(error as Error); this.logger.debug(`Error while opening device: ${deviceId}`, { data: { error }, }); - return Left(new OpeningConnectionError(error as Error)); + Sentry.captureException(connectionError); + return Left(connectionError); } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d15d2cf4..027667827 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -159,6 +159,9 @@ importers: packages/core: dependencies: + '@sentry/minimal': + specifier: ^6.19.7 + version: 6.19.7 inversify: specifier: ^6.0.2 version: 6.0.2 @@ -1824,6 +1827,37 @@ packages: resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} dev: true + /@sentry/hub@6.19.7: + resolution: {integrity: sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 6.19.7 + '@sentry/utils': 6.19.7 + tslib: 1.14.1 + dev: false + + /@sentry/minimal@6.19.7: + resolution: {integrity: sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 6.19.7 + '@sentry/types': 6.19.7 + tslib: 1.14.1 + dev: false + + /@sentry/types@6.19.7: + resolution: {integrity: sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==} + engines: {node: '>=6'} + dev: false + + /@sentry/utils@6.19.7: + resolution: {integrity: sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 6.19.7 + tslib: 1.14.1 + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -6745,7 +6779,6 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true /lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} @@ -8107,7 +8140,6 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true /sentence-case@2.1.1: resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} @@ -8828,7 +8860,6 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -9378,7 +9409,6 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} From 0b237845e263c75257c139f514558ecc39d40cf2 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Wed, 20 Mar 2024 18:18:55 +0100 Subject: [PATCH 130/253] :heavy_plus_sign: (smpl): Add sentry --- apps/sample/.gitignore | 3 + apps/sample/next.config.js | 44 ++++ apps/sample/package.json | 1 + apps/sample/sentry.client.config.ts | 30 +++ apps/sample/sentry.edge.config.ts | 16 ++ apps/sample/sentry.server.config.ts | 18 ++ apps/sample/src/app/global-error.tsx | 19 ++ pnpm-lock.yaml | 326 +++++++++++++++++++++++++-- 8 files changed, 434 insertions(+), 23 deletions(-) create mode 100644 apps/sample/sentry.client.config.ts create mode 100644 apps/sample/sentry.edge.config.ts create mode 100644 apps/sample/sentry.server.config.ts create mode 100644 apps/sample/src/app/global-error.tsx diff --git a/apps/sample/.gitignore b/apps/sample/.gitignore index fd3dbb571..0ea48f883 100644 --- a/apps/sample/.gitignore +++ b/apps/sample/.gitignore @@ -34,3 +34,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# Sentry Config File +.sentryclirc diff --git a/apps/sample/next.config.js b/apps/sample/next.config.js index a2d42fe6e..cb191f184 100644 --- a/apps/sample/next.config.js +++ b/apps/sample/next.config.js @@ -8,3 +8,47 @@ const nextConfig = { }; module.exports = nextConfig; + +// Injected content via Sentry wizard below + +const { withSentryConfig } = require("@sentry/nextjs"); + +module.exports = withSentryConfig( + module.exports, + { + // For all available options, see: + // https://github.com/getsentry/sentry-webpack-plugin#options + + // Suppresses source map uploading logs during build + silent: true, + org: "ledger", + project: "device-sdk-sample", + }, + { + // For all available options, see: + // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ + + // Upload a larger set of source maps for prettier stack traces (increases build time) + widenClientFileUpload: true, + + // Transpiles SDK to be compatible with IE11 (increases bundle size) + transpileClientSDK: true, + + // Routes browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers. (increases server load) + // Note: Check that the configured route will not match with your Next.js middleware, otherwise reporting of client- + // side errors will fail. + tunnelRoute: "/monitoring", + + // Hides source maps from generated client bundles + hideSourceMaps: true, + + // Automatically tree-shake Sentry logger statements to reduce bundle size + disableLogger: true, + + // Enables automatic instrumentation of Vercel Cron Monitors. + // See the following for more information: + // https://docs.sentry.io/product/crons/ + // https://vercel.com/docs/cron-jobs + automaticVercelMonitors: true, + }, +); diff --git a/apps/sample/package.json b/apps/sample/package.json index 15e9d2235..8e33ff765 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -15,6 +15,7 @@ "dependencies": { "@ledgerhq/device-sdk-core": "workspace:*", "@ledgerhq/react-ui": "^0.14.13", + "@sentry/nextjs": "^7.105.0", "next": "14.0.4", "react": "^18", "react-dom": "^18", diff --git a/apps/sample/sentry.client.config.ts b/apps/sample/sentry.client.config.ts new file mode 100644 index 000000000..4819a5764 --- /dev/null +++ b/apps/sample/sentry.client.config.ts @@ -0,0 +1,30 @@ +// This file configures the initialization of Sentry on the client. +// The config you add here will be used whenever a users loads a page in their browser. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs"; + +Sentry.init({ + dsn: "https://b08b58ea194e18e589cb93985b44e83b@o118392.ingest.us.sentry.io/4506938272514048", + + // Adjust this value in production, or use tracesSampler for greater control + tracesSampleRate: 1, + + // Setting this option to true will print useful information to the console while you're setting up Sentry. + debug: false, + + replaysOnErrorSampleRate: 1.0, + + // This sets the sample rate to be 10%. You may want this to be 100% while + // in development and sample at a lower rate in production + replaysSessionSampleRate: 0.1, + + // You can remove this option if you're not planning to use the Sentry Session Replay feature: + integrations: [ + Sentry.replayIntegration({ + // Additional Replay configuration goes in here, for example: + maskAllText: true, + blockAllMedia: true, + }), + ], +}); diff --git a/apps/sample/sentry.edge.config.ts b/apps/sample/sentry.edge.config.ts new file mode 100644 index 000000000..b1d55b460 --- /dev/null +++ b/apps/sample/sentry.edge.config.ts @@ -0,0 +1,16 @@ +// This file configures the initialization of Sentry for edge features (middleware, edge routes, and so on). +// The config you add here will be used whenever one of the edge features is loaded. +// Note that this config is unrelated to the Vercel Edge Runtime and is also required when running locally. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs"; + +Sentry.init({ + dsn: "https://b08b58ea194e18e589cb93985b44e83b@o118392.ingest.us.sentry.io/4506938272514048", + + // Adjust this value in production, or use tracesSampler for greater control + tracesSampleRate: 1, + + // Setting this option to true will print useful information to the console while you're setting up Sentry. + debug: false, +}); diff --git a/apps/sample/sentry.server.config.ts b/apps/sample/sentry.server.config.ts new file mode 100644 index 000000000..fad4622dd --- /dev/null +++ b/apps/sample/sentry.server.config.ts @@ -0,0 +1,18 @@ +// This file configures the initialization of Sentry on the server. +// The config you add here will be used whenever the server handles a request. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs"; + +Sentry.init({ + dsn: "https://b08b58ea194e18e589cb93985b44e83b@o118392.ingest.us.sentry.io/4506938272514048", + + // Adjust this value in production, or use tracesSampler for greater control + tracesSampleRate: 1, + + // Setting this option to true will print useful information to the console while you're setting up Sentry. + debug: false, + + // uncomment the line below to enable Spotlight (https://spotlightjs.com) + // spotlight: process.env.NODE_ENV === 'development', +}); diff --git a/apps/sample/src/app/global-error.tsx b/apps/sample/src/app/global-error.tsx new file mode 100644 index 000000000..455d88dc1 --- /dev/null +++ b/apps/sample/src/app/global-error.tsx @@ -0,0 +1,19 @@ +"use client"; + +import { useEffect } from "react"; +import * as Sentry from "@sentry/nextjs"; +import Error, { ErrorProps } from "next/error"; + +export default function GlobalError({ error }: { error: ErrorProps }) { + useEffect(() => { + Sentry.captureException(error); + }, [error]); + + return ( + + + + + + ); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 027667827..72bb584f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -68,6 +68,9 @@ importers: '@ledgerhq/react-ui': specifier: ^0.14.13 version: 0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11) + '@sentry/nextjs': + specifier: ^7.105.0 + version: 7.107.0(next@14.0.4)(react@18.2.0) next: specifier: 14.0.4 version: 14.0.4(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) @@ -1823,10 +1826,109 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false + /@rollup/plugin-commonjs@24.0.0(rollup@2.78.0): + resolution: {integrity: sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.68.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@2.78.0) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 8.1.0 + is-reference: 1.2.1 + magic-string: 0.27.0 + rollup: 2.78.0 + dev: false + + /@rollup/pluginutils@5.1.0(rollup@2.78.0): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 2.78.0 + dev: false + /@rushstack/eslint-patch@1.6.1: resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} dev: true + /@sentry-internal/feedback@7.107.0: + resolution: {integrity: sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA==} + engines: {node: '>=12'} + dependencies: + '@sentry/core': 7.107.0 + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + dev: false + + /@sentry-internal/replay-canvas@7.107.0: + resolution: {integrity: sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow==} + engines: {node: '>=12'} + dependencies: + '@sentry/core': 7.107.0 + '@sentry/replay': 7.107.0 + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + dev: false + + /@sentry-internal/tracing@7.107.0: + resolution: {integrity: sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ==} + engines: {node: '>=8'} + dependencies: + '@sentry/core': 7.107.0 + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + dev: false + + /@sentry/browser@7.107.0: + resolution: {integrity: sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g==} + engines: {node: '>=8'} + dependencies: + '@sentry-internal/feedback': 7.107.0 + '@sentry-internal/replay-canvas': 7.107.0 + '@sentry-internal/tracing': 7.107.0 + '@sentry/core': 7.107.0 + '@sentry/replay': 7.107.0 + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + dev: false + + /@sentry/cli@1.77.3: + resolution: {integrity: sha512-c3eDqcDRmy4TFz2bFU5Y6QatlpoBPPa8cxBooaS4aMQpnIdLYPF1xhyyiW0LQlDUNc3rRjNF7oN5qKoaRoMTQQ==} + engines: {node: '>= 8'} + hasBin: true + requiresBuild: true + dependencies: + https-proxy-agent: 5.0.1 + mkdirp: 0.5.6 + node-fetch: 2.7.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@sentry/core@7.107.0: + resolution: {integrity: sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw==} + engines: {node: '>=8'} + dependencies: + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + dev: false + /@sentry/hub@6.19.7: resolution: {integrity: sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==} engines: {node: '>=6'} @@ -1836,6 +1938,16 @@ packages: tslib: 1.14.1 dev: false + /@sentry/integrations@7.107.0: + resolution: {integrity: sha512-0h2sZcjcdptS2pju1KSF4+sXaRaFTlmAN1ZokFfmfnVTs6cVtIFttUFxTYrwQUEE2knpAV05pz87zg1yfPAfYg==} + engines: {node: '>=8'} + dependencies: + '@sentry/core': 7.107.0 + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + localforage: 1.10.0 + dev: false + /@sentry/minimal@6.19.7: resolution: {integrity: sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==} engines: {node: '>=6'} @@ -1845,11 +1957,81 @@ packages: tslib: 1.14.1 dev: false + /@sentry/nextjs@7.107.0(next@14.0.4)(react@18.2.0): + resolution: {integrity: sha512-cGKntMb/svjHx5xWuLEh4sYMPA75c9gXegVeGeibpLUuD9b+LNeL7GaqxQ9dm2CX+Vza7QvHGBO/u+08abpEQA==} + engines: {node: '>=8'} + peerDependencies: + next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 || ^14.0 + react: 16.x || 17.x || 18.x + webpack: '>= 4.0.0' + peerDependenciesMeta: + webpack: + optional: true + dependencies: + '@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0) + '@sentry/core': 7.107.0 + '@sentry/integrations': 7.107.0 + '@sentry/node': 7.107.0 + '@sentry/react': 7.107.0(react@18.2.0) + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + '@sentry/vercel-edge': 7.107.0 + '@sentry/webpack-plugin': 1.21.0 + chalk: 3.0.0 + next: 14.0.4(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + resolve: 1.22.8 + rollup: 2.78.0 + stacktrace-parser: 0.1.10 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@sentry/node@7.107.0: + resolution: {integrity: sha512-UZXkG7uThT2YyPW8AOSKRXp1LbVcBHufa4r1XAwBukA2FKO6HHJPjMUgY6DYVQ6k+BmA56CNfVjYrdLbyjBYYA==} + engines: {node: '>=8'} + dependencies: + '@sentry-internal/tracing': 7.107.0 + '@sentry/core': 7.107.0 + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + dev: false + + /@sentry/react@7.107.0(react@18.2.0): + resolution: {integrity: sha512-3sXNKcDQjEimxwBPnRkewy3xNLt3KqStMAdDZ/dAF3rviOSVyk80DCQ3P6+HIqeB+IAXqWptg4eSWRA1qNZquA==} + engines: {node: '>=8'} + peerDependencies: + react: 15.x || 16.x || 17.x || 18.x + dependencies: + '@sentry/browser': 7.107.0 + '@sentry/core': 7.107.0 + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + dev: false + + /@sentry/replay@7.107.0: + resolution: {integrity: sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA==} + engines: {node: '>=12'} + dependencies: + '@sentry-internal/tracing': 7.107.0 + '@sentry/core': 7.107.0 + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + dev: false + /@sentry/types@6.19.7: resolution: {integrity: sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==} engines: {node: '>=6'} dev: false + /@sentry/types@7.107.0: + resolution: {integrity: sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w==} + engines: {node: '>=8'} + dev: false + /@sentry/utils@6.19.7: resolution: {integrity: sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==} engines: {node: '>=6'} @@ -1858,6 +2040,34 @@ packages: tslib: 1.14.1 dev: false + /@sentry/utils@7.107.0: + resolution: {integrity: sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw==} + engines: {node: '>=8'} + dependencies: + '@sentry/types': 7.107.0 + dev: false + + /@sentry/vercel-edge@7.107.0: + resolution: {integrity: sha512-8p4v0QrMus3lVOwfIfevf/F+GuJnkC/0CIyp69FF7RMHb0zvkCmuXBjuski1AMD5aCL+E3e4MEU73UKA5XNqSA==} + engines: {node: '>=8'} + dependencies: + '@sentry-internal/tracing': 7.107.0 + '@sentry/core': 7.107.0 + '@sentry/types': 7.107.0 + '@sentry/utils': 7.107.0 + dev: false + + /@sentry/webpack-plugin@1.21.0: + resolution: {integrity: sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==} + engines: {node: '>= 8'} + dependencies: + '@sentry/cli': 1.77.3 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -2068,7 +2278,6 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true /@types/fs-extra@11.0.4: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} @@ -2517,7 +2726,6 @@ packages: debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} @@ -2603,7 +2811,6 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} @@ -2893,7 +3100,6 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2965,7 +3171,6 @@ packages: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -3140,6 +3345,14 @@ packages: escape-string-regexp: 1.0.5 supports-color: 5.5.0 + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -3370,6 +3583,10 @@ packages: engines: {node: ^12.20.0 || >=14} dev: true + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -4584,6 +4801,10 @@ packages: engines: {node: '>=4.0'} dev: true + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: false + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -4912,14 +5133,12 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind@1.1.2: @@ -5117,6 +5336,17 @@ packages: path-is-absolute: 1.0.1 dev: true + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: false + /global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} @@ -5240,7 +5470,6 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} @@ -5347,7 +5576,6 @@ packages: debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true /https-proxy-agent@7.0.3: resolution: {integrity: sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==} @@ -5434,6 +5662,10 @@ packages: engines: {node: '>= 4'} dev: true + /immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + dev: false + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -5475,11 +5707,9 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -5772,6 +6002,12 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.5 + dev: false + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -5888,7 +6124,6 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true /istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} @@ -6582,6 +6817,12 @@ packages: resolution: {integrity: sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw==} dev: true + /lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + dependencies: + immediate: 3.0.6 + dev: false + /lilconfig@3.0.0: resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} engines: {node: '>=14'} @@ -6631,6 +6872,12 @@ packages: strip-bom: 3.0.0 dev: true + /localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + dependencies: + lie: 3.1.1 + dev: false + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -6785,6 +7032,13 @@ packages: engines: {node: '>=12'} dev: true + /magic-string@0.27.0: + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + /make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -6930,7 +7184,6 @@ packages: engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: true /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} @@ -6950,7 +7203,6 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} @@ -6962,6 +7214,13 @@ packages: engines: {node: '>= 8.0.0'} dev: true + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + /moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} dev: false @@ -7062,7 +7321,6 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: true /node-fetch@3.3.1: resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} @@ -7202,7 +7460,6 @@ packages: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: true /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -7606,6 +7863,11 @@ packages: minimist: 1.2.8 dev: true + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: false + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -7643,7 +7905,6 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true /ps-tree@1.2.0: resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} @@ -8058,6 +8319,14 @@ packages: glob: 10.3.10 dev: true + /rollup@2.78.0: + resolution: {integrity: sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: false + /run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} engines: {node: '>=12'} @@ -8396,6 +8665,13 @@ packages: escape-string-regexp: 2.0.0 dev: true + /stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + dependencies: + type-fest: 0.7.1 + dev: false + /stdin-discarder@0.2.2: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} @@ -8646,7 +8922,6 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} @@ -8751,7 +9026,6 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} @@ -8980,6 +9254,11 @@ packages: engines: {node: '>=8'} dev: true + /type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + dev: false + /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} @@ -9212,7 +9491,11 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: false /webpod@0.0.2: resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} @@ -9224,7 +9507,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true /when-exit@2.1.2: resolution: {integrity: sha512-u9J+toaf3CCxCAzM/484qNAxQE75rFdVgiFEEV8Xps2gzYhf0tx73s1WXDQhkwV17E3MxRMz40m7Ekd2/121Lg==} @@ -9303,7 +9585,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /which@3.0.1: resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} @@ -9358,7 +9639,6 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true /write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} From f2ffe2c53f375f3384546815fabbc2513e32cd9e Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Mon, 25 Mar 2024 09:45:22 +0100 Subject: [PATCH 131/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Add=20new=20Recei?= =?UTF-8?q?ver=20Service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device-session/data/ApduResponseConst.ts | 1 + .../device-session/model/ApduResponse.ts | 22 ++ .../internal/device-session/model/Frame.ts | 11 + .../device-session/model/FrameHeader.ts | 15 +- .../service/DefaultReceiverService.test.ts | 219 ++++++++++++++++++ .../service/DefaultReceiverService.ts | 137 +++++++++++ .../device-session/service/ReceiverService.ts | 7 + .../device-session/utils/FramerUtils.test.ts | 30 +++ .../device-session/utils/FramerUtils.ts | 9 + 9 files changed, 450 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/internal/device-session/data/ApduResponseConst.ts create mode 100644 packages/core/src/internal/device-session/model/ApduResponse.ts create mode 100644 packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts create mode 100644 packages/core/src/internal/device-session/service/DefaultReceiverService.ts create mode 100644 packages/core/src/internal/device-session/service/ReceiverService.ts diff --git a/packages/core/src/internal/device-session/data/ApduResponseConst.ts b/packages/core/src/internal/device-session/data/ApduResponseConst.ts new file mode 100644 index 000000000..5496d8162 --- /dev/null +++ b/packages/core/src/internal/device-session/data/ApduResponseConst.ts @@ -0,0 +1 @@ +export const APDU_RESPONSE_STATUS_CODE_SIZE = 2; diff --git a/packages/core/src/internal/device-session/model/ApduResponse.ts b/packages/core/src/internal/device-session/model/ApduResponse.ts new file mode 100644 index 000000000..63d617ff0 --- /dev/null +++ b/packages/core/src/internal/device-session/model/ApduResponse.ts @@ -0,0 +1,22 @@ +type ApduResponseConstructorArgs = { + statusCode: Uint8Array; + data: Uint8Array; +}; + +export class ApduResponse { + protected _statusCode: Uint8Array; + protected _data: Uint8Array; + + constructor({ statusCode, data }: ApduResponseConstructorArgs) { + this._statusCode = statusCode; + this._data = data; + } + + public getStatusCode() { + return this._statusCode; + } + + public getData() { + return this._data; + } +} diff --git a/packages/core/src/internal/device-session/model/Frame.ts b/packages/core/src/internal/device-session/model/Frame.ts index e327168b4..353de03b1 100644 --- a/packages/core/src/internal/device-session/model/Frame.ts +++ b/packages/core/src/internal/device-session/model/Frame.ts @@ -8,10 +8,12 @@ type FrameConstructorArgs = { export class Frame { protected _header: FrameHeader; protected _data: Uint8Array; + constructor({ header, data }: FrameConstructorArgs) { this._header = header; this._data = data; } + toString(): string { return JSON.stringify( { @@ -22,6 +24,7 @@ export class Frame { 2, ); } + getRawData(): Uint8Array { const headerRaw = this._header.getRawData(); const raw = new Uint8Array(headerRaw.length + this._data.length); @@ -30,4 +33,12 @@ export class Frame { raw.set(this._data, headerRaw.length); return raw; } + + getHeader(): FrameHeader { + return this._header; + } + + getData(): Uint8Array { + return this._data; + } } diff --git a/packages/core/src/internal/device-session/model/FrameHeader.ts b/packages/core/src/internal/device-session/model/FrameHeader.ts index a386a9923..12aa40471 100644 --- a/packages/core/src/internal/device-session/model/FrameHeader.ts +++ b/packages/core/src/internal/device-session/model/FrameHeader.ts @@ -1,4 +1,4 @@ -import { Maybe } from "purify-ts"; +import { Maybe, Nothing } from "purify-ts"; type FrameHeaderConstructorArgs = { uuid: string; @@ -31,6 +31,19 @@ export class FrameHeader { this._length = length; this._channel = channel; } + getDataSize(): Maybe { + return this._dataSize.caseOf({ + Just: (value) => + Maybe.of( + value.reduce( + (acc, val, index) => + acc + val * Math.pow(0x100, value.length - 1 - index), + 0, + ), + ), + Nothing: () => Nothing, + }); + } setDataSize(dataSize: Maybe): FrameHeader { this._dataSize = dataSize; return this; diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts new file mode 100644 index 000000000..5333e33d3 --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts @@ -0,0 +1,219 @@ +import * as uuid from "uuid"; +jest.mock("uuid"); + +import { Just, Nothing } from "purify-ts"; + +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; + +import { DefaultReceiverService } from "./DefaultReceiverService"; +import { ReceiverService } from "./ReceiverService"; + +const loggerService = new DefaultLoggerPublisherService([], "frame"); + +const RESPONSE_GET_VERSION = new Uint8Array([ + 0xaa, 0xaa, 0x05, 0x00, 0x00, 0x00, 0x21, 0x33, 0x00, 0x00, 0x04, 0x05, 0x32, + 0x2e, 0x32, 0x2e, 0x33, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x32, 0x2e, 0x33, + 0x30, 0x04, 0x31, 0x2e, 0x31, 0x36, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +]); + +const RESPONSE_LOCKED_DEVICE = new Uint8Array([ + 0xaa, 0xaa, 0x05, 0x00, 0x00, 0x00, 0x02, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +]); + +const RESPONSE_LIST_APPS = [ + new Uint8Array([ + 0xaa, 0xaa, 0x05, 0x00, 0x00, 0x00, 0x9e, 0x01, 0x4d, 0x00, 0x13, 0xca, + 0x50, 0xfa, 0xa1, 0x91, 0x40, 0x9a, 0x6b, 0xfa, 0x6c, 0x0f, 0xbb, 0xb2, + 0xe7, 0xc4, 0xa9, 0xcf, 0xe5, 0x57, 0x41, 0x00, 0x5d, 0xbd, 0x84, 0xab, + 0x9a, 0xbd, 0x66, 0xc7, 0x6c, 0x90, 0xdd, 0x08, 0x79, 0x0d, 0x08, 0x47, + 0xb9, 0x3a, 0x8f, 0xa7, 0x6f, 0x60, 0x33, 0xae, 0xd3, 0x25, 0xd7, 0xb1, + 0xe5, 0x7c, 0xeb, 0xd7, + ]), + new Uint8Array([ + 0xaa, 0xaa, 0x05, 0x00, 0x01, 0x4b, 0x2e, 0x2c, 0x9f, 0xb4, 0x46, 0x78, + 0xde, 0x05, 0x5f, 0x9e, 0x80, 0x0a, 0x07, 0x42, 0x69, 0x74, 0x63, 0x6f, + 0x69, 0x6e, 0x4e, 0x00, 0x15, 0xca, 0x40, 0x06, 0x03, 0x28, 0xf8, 0x8f, + 0xc6, 0xd6, 0x42, 0x98, 0xd0, 0x49, 0x00, 0xc7, 0x04, 0x98, 0x19, 0x1b, + 0x6c, 0xeb, 0xed, 0xd8, 0xcb, 0x84, 0x5d, 0xf5, 0x4b, 0xe3, 0xbd, 0xbb, + 0x25, 0x7a, 0x3f, 0x6f, + ]), + new Uint8Array([ + 0xaa, 0xaa, 0x05, 0x00, 0x02, 0x68, 0x8f, 0x54, 0xef, 0x7f, 0xaa, 0xc4, + 0x22, 0xaa, 0x54, 0xe7, 0xb8, 0x0a, 0xc8, 0xa3, 0x2f, 0x96, 0xe5, 0x5e, + 0x43, 0x2d, 0xf3, 0xa3, 0x45, 0x8d, 0x8e, 0xaa, 0xf1, 0x4e, 0xd1, 0x1e, + 0x08, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x90, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, + ]), +]; + +describe("DefaultReceiverService", () => { + let service: ReceiverService; + + beforeAll(() => { + jest.spyOn(uuid, "v4").mockReturnValue("42"); + }); + + describe("[USB] With padding and channel", () => { + beforeEach(() => { + service = new DefaultReceiverService( + { channel: Just(new Uint8Array([0xaa, 0xaa])) }, + () => loggerService, + ); + }); + + it("should return a response directly when a frame is complete", () => { + // given + const frame = RESPONSE_GET_VERSION; + + // when + const apdu = service.handleFrame(frame); + + // then + expect(apdu.isNothing()).toBeFalsy(); + expect(apdu.extract()).toEqual( + new ApduResponse({ + data: RESPONSE_GET_VERSION.slice(7, 38), + statusCode: new Uint8Array([0x90, 0x00]), + }), + ); + }); + + it("should return a response on a third frame when the two first are not complete", () => { + // given + const firstFrame = RESPONSE_LIST_APPS[0]!; + const secondFrame = RESPONSE_LIST_APPS[1]!; + const thirdFrame = RESPONSE_LIST_APPS[2]!; + + // when + const firstResponse = service.handleFrame(firstFrame); + const secondResponse = service.handleFrame(secondFrame); + const thirdResponse = service.handleFrame(thirdFrame); + + // then + expect(firstResponse.isNothing()).toBeTruthy(); + expect(secondResponse.isNothing()).toBeTruthy(); + expect(thirdResponse.isNothing()).toBeFalsy(); + expect(thirdResponse.extract()?.getStatusCode()).toEqual( + new Uint8Array([0x90, 0x00]), + ); + expect(Array.from(thirdResponse.extract()?.getData() ?? [])).toEqual([ + ...Array.from(RESPONSE_LIST_APPS[0]!.slice(7)), + ...Array.from(RESPONSE_LIST_APPS[1]!.slice(5)), + ...Array.from(RESPONSE_LIST_APPS[2]!).slice(5, 45), + ]); + }); + + it("should return two response directly when each frame is complete", () => { + // given + const firstFrame = RESPONSE_LOCKED_DEVICE; + const secondFrame = RESPONSE_GET_VERSION; + + // when + const firstResponse = service.handleFrame(firstFrame); + const secondResponse = service.handleFrame(secondFrame); + + // then + expect(firstResponse.isNothing()).toBeFalsy(); + expect(secondResponse.isNothing()).toBeFalsy(); + + expect(firstResponse.extract()).toEqual( + new ApduResponse({ + data: new Uint8Array([]), + statusCode: new Uint8Array([0x55, 0x15]), + }), + ); + expect(secondResponse.extract()).toEqual( + new ApduResponse({ + data: RESPONSE_GET_VERSION.slice(7, 38), + statusCode: new Uint8Array([0x90, 0x00]), + }), + ); + }); + }); + + describe("[BLE] Without padding nor channel", () => { + beforeEach(() => { + service = new DefaultReceiverService({}, () => loggerService); + { channel: Nothing }, + () => loggerService, + ); + }); + + it("should return a response directly when a frame is complete", () => { + // given + const frame = RESPONSE_GET_VERSION.slice(2, 40); + + // when + const apdu = service.handleFrame(frame); + + // then + expect(apdu.isNothing()).toBeFalsy(); + expect(apdu.extract()).toEqual( + new ApduResponse({ + data: RESPONSE_GET_VERSION.slice(7, 38), + statusCode: new Uint8Array([0x90, 0x00]), + }), + ); + }); + + it("should return a response on a third frame when the two first are not complete", () => { + // given + const firstFrame = RESPONSE_LIST_APPS[0]!.slice(2); + const secondFrame = RESPONSE_LIST_APPS[1]!.slice(2); + const thirdFrame = RESPONSE_LIST_APPS[2]!.slice(2, 47); + + // when + const firstResponse = service.handleFrame(firstFrame); + const secondResponse = service.handleFrame(secondFrame); + const thirdResponse = service.handleFrame(thirdFrame); + + // then + expect(firstResponse.isNothing()).toBeTruthy(); + expect(secondResponse.isNothing()).toBeTruthy(); + expect(thirdResponse.isNothing()).toBeFalsy(); + expect(thirdResponse.extract()?.getStatusCode()).toEqual( + new Uint8Array([0x90, 0x00]), + ); + expect(Array.from(thirdResponse.extract()?.getData() ?? [])).toEqual([ + ...Array.from(RESPONSE_LIST_APPS[0]!.slice(7)), + ...Array.from(RESPONSE_LIST_APPS[1]!.slice(5)), + ...Array.from(RESPONSE_LIST_APPS[2]!).slice(5, 45), + ]); + }); + + it("should return two response directly when each frame is complete", () => { + // given + const firstFrame = RESPONSE_LOCKED_DEVICE.slice(2, 9); + const secondFrame = RESPONSE_GET_VERSION.slice(2, 40); + + // when + const firstResponse = service.handleFrame(firstFrame); + const secondResponse = service.handleFrame(secondFrame); + + // then + expect(firstResponse.isNothing()).toBeFalsy(); + expect(secondResponse.isNothing()).toBeFalsy(); + + expect(firstResponse.extract()).toEqual( + new ApduResponse({ + data: new Uint8Array([]), + statusCode: new Uint8Array([0x55, 0x15]), + }), + ); + expect(secondResponse.extract()).toEqual( + new ApduResponse({ + data: RESPONSE_GET_VERSION.slice(7, 38), + statusCode: new Uint8Array([0x90, 0x00]), + }), + ); + }); + }); +}); diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts new file mode 100644 index 000000000..4e4a5aa0b --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts @@ -0,0 +1,137 @@ +import { inject, injectable } from "inversify"; +import { Just, Maybe, Nothing } from "purify-ts"; +import { v4 } from "uuid"; + +import { APDU_RESPONSE_STATUS_CODE_SIZE } from "@internal/device-session/data/ApduResponseConst"; +import { + APDU_DATA_SIZE, + CHANNEL_SIZE, + HEAD_TAG_SIZE, + INDEX_SIZE, +} from "@internal/device-session/data/FramerConst"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { Frame } from "@internal/device-session/model/Frame"; +import { FrameHeader } from "@internal/device-session/model/FrameHeader"; +import { FramerUtils } from "@internal/device-session/utils/FramerUtils"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +import { ReceiverService } from "./ReceiverService"; + +type DefaultReceiverConstructorArgs = { + channel?: Maybe; +}; + +@injectable() +export class DefaultReceiverService implements ReceiverService { + private _channel: Maybe; + private _logger: LoggerPublisherService; + private _pendingFrames: Frame[]; + + constructor( + { channel = Maybe.zero() }: DefaultReceiverConstructorArgs, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerModuleFactory: (tag: string) => LoggerPublisherService, + ) { + this._channel = channel; + this._logger = loggerModuleFactory("receiver"); + this._pendingFrames = []; + } + + public handleFrame(apdu: Uint8Array): Maybe { + const frame = this.parseApdu(apdu); + this._logger.debug("handle frame", { data: { frame } }); + this._pendingFrames.push(frame); + + const dataSize = this._pendingFrames[0]!.getHeader() + .getDataSize() + .caseOf({ + Just: (value) => value, + Nothing: () => { + this._logger.error("unable to get size"); + throw new Error(); + }, + }); + + if (this.isComplete(dataSize)) { + const concatenatedFramesData = FramerUtils.getFirstBytesFrom( + this.concatFrames(this._pendingFrames), + dataSize, + ); + const data = FramerUtils.getFirstBytesFrom( + concatenatedFramesData, + concatenatedFramesData.length - APDU_RESPONSE_STATUS_CODE_SIZE, + ); + const statusCode = FramerUtils.getLastBytesFrom( + concatenatedFramesData, + APDU_RESPONSE_STATUS_CODE_SIZE, + ); + + this._pendingFrames = []; + + return Just( + new ApduResponse({ + data: data, + statusCode, + }), + ); + } + + this._logger.debug("frame is not complete, waiting for more"); + return Maybe.empty(); + } + + private parseApdu(apdu: Uint8Array): Frame { + const channelSize = this._channel.caseOf({ + Just: () => CHANNEL_SIZE, + Nothing: () => 0, + }); + + const headTag = apdu.slice(channelSize, channelSize + HEAD_TAG_SIZE); + const index = apdu.slice( + channelSize + HEAD_TAG_SIZE, + channelSize + HEAD_TAG_SIZE + INDEX_SIZE, + ); + + const isFirstIndex = index.reduce((curr, val) => curr + val, 0) === 0; + const dataSizeIndex = channelSize + HEAD_TAG_SIZE + INDEX_SIZE; + const dataSizeLength = isFirstIndex ? APDU_DATA_SIZE : 0; + const dataSize = isFirstIndex + ? Just(apdu.slice(dataSizeIndex, dataSizeIndex + dataSizeLength)) + : Nothing; + + const dataIndex = dataSizeIndex + dataSizeLength; + const data = apdu.slice(dataIndex); + + const frame = new Frame({ + header: new FrameHeader({ + uuid: v4(), + channel: this._channel, + dataSize, + headTag, + index, + length: channelSize + HEAD_TAG_SIZE + INDEX_SIZE + dataSizeLength, + }), + data, + }); + + return frame; + } + + private isComplete(dataSize: number): boolean { + const totalReceiveLength = this._pendingFrames.reduce( + (prev: number, curr: Frame) => prev + curr.getData().length, + 0, + ); + + return totalReceiveLength >= dataSize; + } + + private concatFrames(frames: Frame[]): Uint8Array { + return frames.reduce( + (prev: Uint8Array, curr: Frame) => + Uint8Array.from([...prev, ...curr.getData()]), + new Uint8Array(0), + ); + } +} diff --git a/packages/core/src/internal/device-session/service/ReceiverService.ts b/packages/core/src/internal/device-session/service/ReceiverService.ts new file mode 100644 index 000000000..ff9fc9ffc --- /dev/null +++ b/packages/core/src/internal/device-session/service/ReceiverService.ts @@ -0,0 +1,7 @@ +import { Maybe } from "purify-ts"; + +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; + +export interface ReceiverService { + handleFrame(apdu: Uint8Array): Maybe; +} diff --git a/packages/core/src/internal/device-session/utils/FramerUtils.test.ts b/packages/core/src/internal/device-session/utils/FramerUtils.test.ts index 8517d9c4c..fc8cf3300 100644 --- a/packages/core/src/internal/device-session/utils/FramerUtils.test.ts +++ b/packages/core/src/internal/device-session/utils/FramerUtils.test.ts @@ -30,4 +30,34 @@ describe("FramerUtils", () => { expect(result).toEqual(new Uint8Array([])); }); }); + + describe("getLastBytesFrom", () => { + it("should return 2 same bytes of Uint8Array", () => { + // Arrange + const array = new Uint8Array([0x67, 0x89]); + const size = 2; + // Act + const result = FramerUtils.getFirstBytesFrom(array, size); + // Assert + expect(result).toEqual(new Uint8Array([0x67, 0x89])); + }); + it("should return 2 first bytes of Uint8Array", () => { + // Arrange + const array = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + const size = 2; + // Act + const result = FramerUtils.getFirstBytesFrom(array, size); + // Assert + expect(result).toEqual(new Uint8Array([1, 2])); + }); + it("should return empty Uint8Array", () => { + // Arrange + const array = new Uint8Array([]); + const size = 2; + // Act + const result = FramerUtils.getLastBytesFrom(array, size); + // Assert + expect(result).toEqual(new Uint8Array([])); + }); + }); }); diff --git a/packages/core/src/internal/device-session/utils/FramerUtils.ts b/packages/core/src/internal/device-session/utils/FramerUtils.ts index 6d55b6105..2feebe05e 100644 --- a/packages/core/src/internal/device-session/utils/FramerUtils.ts +++ b/packages/core/src/internal/device-session/utils/FramerUtils.ts @@ -7,4 +7,13 @@ export const FramerUtils = { getLastBytesFrom(array: Uint8Array, size: number): Uint8Array { return new Uint8Array(array.slice(-size)); }, + + /* + * Get first bytes of Uint8Array + * + * @param Uint8Array + */ + getFirstBytesFrom(array: Uint8Array, size: number): Uint8Array { + return new Uint8Array(array.slice(0, size)); + }, }; From f056596b7f2f06a2bcb02030341e32c1e2764afa Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Mon, 25 Mar 2024 11:00:57 +0100 Subject: [PATCH 132/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Return?= =?UTF-8?q?=20either=20error=20or=20maybe=20apdu=20response?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/device-session/model/Errors.ts | 9 + .../service/DefaultReceiverService.test.ts | 168 +++++++++++------- .../service/DefaultReceiverService.ts | 39 ++-- .../device-session/service/ReceiverService.ts | 5 +- 4 files changed, 137 insertions(+), 84 deletions(-) diff --git a/packages/core/src/internal/device-session/model/Errors.ts b/packages/core/src/internal/device-session/model/Errors.ts index 33b4b6b05..e2e00db9c 100644 --- a/packages/core/src/internal/device-session/model/Errors.ts +++ b/packages/core/src/internal/device-session/model/Errors.ts @@ -19,6 +19,15 @@ export class FramerApduError implements SdkError { } } +export class ReceiverApduError implements SdkError { + readonly _tag = "ReceiverApduError"; + originalError?: Error; + + constructor() { + this.originalError = new Error("Unable to parse apdu"); + } +} + export class DeviceSessionNotFound implements SdkError { readonly _tag = "DeviceSessionNotFound"; originalError?: Error; diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts index 5333e33d3..642c10ce4 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts @@ -1,9 +1,10 @@ import * as uuid from "uuid"; jest.mock("uuid"); -import { Just, Nothing } from "purify-ts"; +import { Just, Left, Nothing, Right } from "purify-ts"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ReceiverApduError } from "@internal/device-session/model/Errors"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { DefaultReceiverService } from "./DefaultReceiverService"; @@ -61,6 +62,26 @@ describe("DefaultReceiverService", () => { jest.spyOn(uuid, "v4").mockReturnValue("42"); }); + describe("without dataSize", () => { + beforeEach(() => { + service = new DefaultReceiverService( + { channel: Just(new Uint8Array([0xaa, 0xaa])) }, + () => loggerService, + ); + }); + + it("should return a left error when the first frame has no dataSize", () => { + //given + const frame = RESPONSE_LIST_APPS[1]!; + + //when + const apdu = service.handleFrame(frame); + + //then + expect(apdu).toEqual(Left(new ReceiverApduError())); + }); + }); + describe("[USB] With padding and channel", () => { beforeEach(() => { service = new DefaultReceiverService( @@ -77,12 +98,15 @@ describe("DefaultReceiverService", () => { const apdu = service.handleFrame(frame); // then - expect(apdu.isNothing()).toBeFalsy(); - expect(apdu.extract()).toEqual( - new ApduResponse({ - data: RESPONSE_GET_VERSION.slice(7, 38), - statusCode: new Uint8Array([0x90, 0x00]), - }), + expect(apdu).toEqual( + Right( + Just( + new ApduResponse({ + data: RESPONSE_GET_VERSION.slice(7, 38), + statusCode: new Uint8Array([0x90, 0x00]), + }), + ), + ), ); }); @@ -98,17 +122,22 @@ describe("DefaultReceiverService", () => { const thirdResponse = service.handleFrame(thirdFrame); // then - expect(firstResponse.isNothing()).toBeTruthy(); - expect(secondResponse.isNothing()).toBeTruthy(); - expect(thirdResponse.isNothing()).toBeFalsy(); - expect(thirdResponse.extract()?.getStatusCode()).toEqual( - new Uint8Array([0x90, 0x00]), + expect(firstResponse).toEqual(Right(Nothing)); + expect(secondResponse).toEqual(Right(Nothing)); + expect(thirdResponse).toEqual( + Right( + Just( + new ApduResponse({ + data: new Uint8Array([ + ...Array.from(RESPONSE_LIST_APPS[0]!.slice(7)), + ...Array.from(RESPONSE_LIST_APPS[1]!.slice(5)), + ...Array.from(RESPONSE_LIST_APPS[2]!).slice(5, 45), + ]), + statusCode: new Uint8Array([0x90, 0x00]), + }), + ), + ), ); - expect(Array.from(thirdResponse.extract()?.getData() ?? [])).toEqual([ - ...Array.from(RESPONSE_LIST_APPS[0]!.slice(7)), - ...Array.from(RESPONSE_LIST_APPS[1]!.slice(5)), - ...Array.from(RESPONSE_LIST_APPS[2]!).slice(5, 45), - ]); }); it("should return two response directly when each frame is complete", () => { @@ -121,20 +150,25 @@ describe("DefaultReceiverService", () => { const secondResponse = service.handleFrame(secondFrame); // then - expect(firstResponse.isNothing()).toBeFalsy(); - expect(secondResponse.isNothing()).toBeFalsy(); - - expect(firstResponse.extract()).toEqual( - new ApduResponse({ - data: new Uint8Array([]), - statusCode: new Uint8Array([0x55, 0x15]), - }), + expect(firstResponse).toEqual( + Right( + Just( + new ApduResponse({ + data: new Uint8Array([]), + statusCode: new Uint8Array([0x55, 0x15]), + }), + ), + ), ); - expect(secondResponse.extract()).toEqual( - new ApduResponse({ - data: RESPONSE_GET_VERSION.slice(7, 38), - statusCode: new Uint8Array([0x90, 0x00]), - }), + expect(secondResponse).toEqual( + Right( + Just( + new ApduResponse({ + data: RESPONSE_GET_VERSION.slice(7, 38), + statusCode: new Uint8Array([0x90, 0x00]), + }), + ), + ), ); }); }); @@ -142,9 +176,6 @@ describe("DefaultReceiverService", () => { describe("[BLE] Without padding nor channel", () => { beforeEach(() => { service = new DefaultReceiverService({}, () => loggerService); - { channel: Nothing }, - () => loggerService, - ); }); it("should return a response directly when a frame is complete", () => { @@ -155,12 +186,15 @@ describe("DefaultReceiverService", () => { const apdu = service.handleFrame(frame); // then - expect(apdu.isNothing()).toBeFalsy(); - expect(apdu.extract()).toEqual( - new ApduResponse({ - data: RESPONSE_GET_VERSION.slice(7, 38), - statusCode: new Uint8Array([0x90, 0x00]), - }), + expect(apdu).toEqual( + Right( + Just( + new ApduResponse({ + data: RESPONSE_GET_VERSION.slice(7, 38), + statusCode: new Uint8Array([0x90, 0x00]), + }), + ), + ), ); }); @@ -176,17 +210,22 @@ describe("DefaultReceiverService", () => { const thirdResponse = service.handleFrame(thirdFrame); // then - expect(firstResponse.isNothing()).toBeTruthy(); - expect(secondResponse.isNothing()).toBeTruthy(); - expect(thirdResponse.isNothing()).toBeFalsy(); - expect(thirdResponse.extract()?.getStatusCode()).toEqual( - new Uint8Array([0x90, 0x00]), + expect(firstResponse).toEqual(Right(Nothing)); + expect(secondResponse).toEqual(Right(Nothing)); + expect(thirdResponse).toEqual( + Right( + Just( + new ApduResponse({ + data: new Uint8Array([ + ...Array.from(RESPONSE_LIST_APPS[0]!.slice(7)), + ...Array.from(RESPONSE_LIST_APPS[1]!.slice(5)), + ...Array.from(RESPONSE_LIST_APPS[2]!).slice(5, 45), + ]), + statusCode: new Uint8Array([0x90, 0x00]), + }), + ), + ), ); - expect(Array.from(thirdResponse.extract()?.getData() ?? [])).toEqual([ - ...Array.from(RESPONSE_LIST_APPS[0]!.slice(7)), - ...Array.from(RESPONSE_LIST_APPS[1]!.slice(5)), - ...Array.from(RESPONSE_LIST_APPS[2]!).slice(5, 45), - ]); }); it("should return two response directly when each frame is complete", () => { @@ -199,20 +238,25 @@ describe("DefaultReceiverService", () => { const secondResponse = service.handleFrame(secondFrame); // then - expect(firstResponse.isNothing()).toBeFalsy(); - expect(secondResponse.isNothing()).toBeFalsy(); - - expect(firstResponse.extract()).toEqual( - new ApduResponse({ - data: new Uint8Array([]), - statusCode: new Uint8Array([0x55, 0x15]), - }), + expect(firstResponse).toEqual( + Right( + Just( + new ApduResponse({ + data: new Uint8Array([]), + statusCode: new Uint8Array([0x55, 0x15]), + }), + ), + ), ); - expect(secondResponse.extract()).toEqual( - new ApduResponse({ - data: RESPONSE_GET_VERSION.slice(7, 38), - statusCode: new Uint8Array([0x90, 0x00]), - }), + expect(secondResponse).toEqual( + Right( + Just( + new ApduResponse({ + data: RESPONSE_GET_VERSION.slice(7, 38), + statusCode: new Uint8Array([0x90, 0x00]), + }), + ), + ), ); }); }); diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts index 4e4a5aa0b..042615936 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts @@ -1,5 +1,5 @@ import { inject, injectable } from "inversify"; -import { Just, Maybe, Nothing } from "purify-ts"; +import { Either, Just, Left, Maybe, Nothing, Right } from "purify-ts"; import { v4 } from "uuid"; import { APDU_RESPONSE_STATUS_CODE_SIZE } from "@internal/device-session/data/ApduResponseConst"; @@ -10,6 +10,7 @@ import { INDEX_SIZE, } from "@internal/device-session/data/FramerConst"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ReceiverApduError } from "@internal/device-session/model/Errors"; import { Frame } from "@internal/device-session/model/Frame"; import { FrameHeader } from "@internal/device-session/model/FrameHeader"; import { FramerUtils } from "@internal/device-session/utils/FramerUtils"; @@ -38,25 +39,21 @@ export class DefaultReceiverService implements ReceiverService { this._pendingFrames = []; } - public handleFrame(apdu: Uint8Array): Maybe { + public handleFrame( + apdu: Uint8Array, + ): Either> { const frame = this.parseApdu(apdu); this._logger.debug("handle frame", { data: { frame } }); this._pendingFrames.push(frame); - const dataSize = this._pendingFrames[0]!.getHeader() - .getDataSize() - .caseOf({ - Just: (value) => value, - Nothing: () => { - this._logger.error("unable to get size"); - throw new Error(); - }, - }); - - if (this.isComplete(dataSize)) { + const dataSize = this._pendingFrames[0]!.getHeader().getDataSize(); + + if (dataSize.isNothing()) return Left(new ReceiverApduError()); + + if (dataSize.isJust() && this.isComplete(dataSize.extract())) { const concatenatedFramesData = FramerUtils.getFirstBytesFrom( this.concatFrames(this._pendingFrames), - dataSize, + dataSize.extract(), ); const data = FramerUtils.getFirstBytesFrom( concatenatedFramesData, @@ -69,16 +66,18 @@ export class DefaultReceiverService implements ReceiverService { this._pendingFrames = []; - return Just( - new ApduResponse({ - data: data, - statusCode, - }), + return Right( + Just( + new ApduResponse({ + data: data, + statusCode, + }), + ), ); } this._logger.debug("frame is not complete, waiting for more"); - return Maybe.empty(); + return Right(Nothing); } private parseApdu(apdu: Uint8Array): Frame { diff --git a/packages/core/src/internal/device-session/service/ReceiverService.ts b/packages/core/src/internal/device-session/service/ReceiverService.ts index ff9fc9ffc..dd496b446 100644 --- a/packages/core/src/internal/device-session/service/ReceiverService.ts +++ b/packages/core/src/internal/device-session/service/ReceiverService.ts @@ -1,7 +1,8 @@ -import { Maybe } from "purify-ts"; +import { Either, Maybe } from "purify-ts"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ReceiverApduError } from "@internal/device-session/model/Errors"; export interface ReceiverService { - handleFrame(apdu: Uint8Array): Maybe; + handleFrame(apdu: Uint8Array): Either>; } From 254091c6a321428116ee9d049b1c2e7b1eec3d6e Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 26 Mar 2024 13:44:25 +0100 Subject: [PATCH 133/253] =?UTF-8?q?=F0=9F=A9=B9=20(core):=20Handle=20non?= =?UTF-8?q?=20properly=20formatted=20apdu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DefaultReceiverService.test.ts | 50 +++++++++++++++++++ .../service/DefaultReceiverService.ts | 17 +++++-- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts index 642c10ce4..c9fb25ad1 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts @@ -171,6 +171,31 @@ describe("DefaultReceiverService", () => { ), ); }); + + it("should return an error if the frame is not complete", () => { + //given + //frame with channelId, headTag, and partial Index only + const frame = RESPONSE_LIST_APPS[0]!.slice(0, 4); + + //when + const apdu = service.handleFrame(frame); + + //then + expect(apdu).toEqual(Left(new ReceiverApduError())); + }); + + it("should return an error if the frame is not complete", () => { + //given + //frame with channelId, headTag, and Index and partial dataSize only + const frame = RESPONSE_LIST_APPS[0]!.slice(0, 6); + console.log(frame); + + //when + const apdu = service.handleFrame(frame); + + //then + expect(apdu).toEqual(Left(new ReceiverApduError())); + }); }); describe("[BLE] Without padding nor channel", () => { @@ -259,5 +284,30 @@ describe("DefaultReceiverService", () => { ), ); }); + + it("should return an error if the frame is not complete", () => { + //given + //frame with channelId, headTag, and partial Index only + const frame = RESPONSE_LIST_APPS[0]!.slice(2, 4); + + //when + const apdu = service.handleFrame(frame); + + //then + expect(apdu).toEqual(Left(new ReceiverApduError())); + }); + + it("should return an error if the frame is not complete", () => { + //given + //frame with channelId, headTag, and Index and partial dataSize only + const frame = RESPONSE_LIST_APPS[0]!.slice(2, 6); + console.log(frame); + + //when + const apdu = service.handleFrame(frame); + + //then + expect(apdu).toEqual(Left(new ReceiverApduError())); + }); }); }); diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts index 042615936..f42dbfb77 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts @@ -43,8 +43,11 @@ export class DefaultReceiverService implements ReceiverService { apdu: Uint8Array, ): Either> { const frame = this.parseApdu(apdu); + + if (frame.isLeft()) return frame; + this._logger.debug("handle frame", { data: { frame } }); - this._pendingFrames.push(frame); + this._pendingFrames.push(frame.extract() as Frame); const dataSize = this._pendingFrames[0]!.getHeader().getDataSize(); @@ -80,7 +83,7 @@ export class DefaultReceiverService implements ReceiverService { return Right(Nothing); } - private parseApdu(apdu: Uint8Array): Frame { + private parseApdu(apdu: Uint8Array): Either { const channelSize = this._channel.caseOf({ Just: () => CHANNEL_SIZE, Nothing: () => 0, @@ -95,6 +98,14 @@ export class DefaultReceiverService implements ReceiverService { const isFirstIndex = index.reduce((curr, val) => curr + val, 0) === 0; const dataSizeIndex = channelSize + HEAD_TAG_SIZE + INDEX_SIZE; const dataSizeLength = isFirstIndex ? APDU_DATA_SIZE : 0; + + if ( + apdu.length < + channelSize + HEAD_TAG_SIZE + INDEX_SIZE + dataSizeLength + ) { + return Left(new ReceiverApduError()); + } + const dataSize = isFirstIndex ? Just(apdu.slice(dataSizeIndex, dataSizeIndex + dataSizeLength)) : Nothing; @@ -114,7 +125,7 @@ export class DefaultReceiverService implements ReceiverService { data, }); - return frame; + return Right(frame); } private isComplete(dataSize: number): boolean { From 8fce1cb2db033bbfdc11da5a03003e47870df029 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 27 Mar 2024 17:27:59 +0100 Subject: [PATCH 134/253] =?UTF-8?q?=F0=9F=8E=A8=20(core):=20Rename=20parse?= =?UTF-8?q?Apdu=20to=20apduToFrame?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/device-session/service/DefaultReceiverService.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts index f42dbfb77..6d6946630 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts @@ -42,7 +42,7 @@ export class DefaultReceiverService implements ReceiverService { public handleFrame( apdu: Uint8Array, ): Either> { - const frame = this.parseApdu(apdu); + const frame = this.apduToFrame(apdu); if (frame.isLeft()) return frame; @@ -83,7 +83,7 @@ export class DefaultReceiverService implements ReceiverService { return Right(Nothing); } - private parseApdu(apdu: Uint8Array): Either { + private apduToFrame(apdu: Uint8Array): Either { const channelSize = this._channel.caseOf({ Just: () => CHANNEL_SIZE, Nothing: () => 0, From 69a8c9647955c1aeb2ec8804bb0850174cca5fad Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 27 Mar 2024 17:29:52 +0100 Subject: [PATCH 135/253] =?UTF-8?q?=F0=9F=A9=B9=20(core):=20Return=20speci?= =?UTF-8?q?fic=20error=20when=20unable=20to=20parse=20header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/device-session/model/Errors.ts | 6 ++--- .../service/DefaultReceiverService.test.ts | 26 ++++++++++++------- .../service/DefaultReceiverService.ts | 2 +- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/packages/core/src/internal/device-session/model/Errors.ts b/packages/core/src/internal/device-session/model/Errors.ts index e2e00db9c..835ac143c 100644 --- a/packages/core/src/internal/device-session/model/Errors.ts +++ b/packages/core/src/internal/device-session/model/Errors.ts @@ -21,10 +21,10 @@ export class FramerApduError implements SdkError { export class ReceiverApduError implements SdkError { readonly _tag = "ReceiverApduError"; - originalError?: Error; + originalError: Error; - constructor() { - this.originalError = new Error("Unable to parse apdu"); + constructor(message?: string) { + this.originalError = new Error(message ?? "Unable to parse apdu"); } } diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts index c9fb25ad1..eaa1d170f 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts @@ -172,7 +172,7 @@ describe("DefaultReceiverService", () => { ); }); - it("should return an error if the frame is not complete", () => { + it("should return an error if the frame is without index", () => { //given //frame with channelId, headTag, and partial Index only const frame = RESPONSE_LIST_APPS[0]!.slice(0, 4); @@ -181,20 +181,23 @@ describe("DefaultReceiverService", () => { const apdu = service.handleFrame(frame); //then - expect(apdu).toEqual(Left(new ReceiverApduError())); + expect(apdu).toEqual( + Left(new ReceiverApduError("Unable to parse header from apdu")), + ); }); - it("should return an error if the frame is not complete", () => { + it("should return an error if the frame is without datasize", () => { //given //frame with channelId, headTag, and Index and partial dataSize only const frame = RESPONSE_LIST_APPS[0]!.slice(0, 6); - console.log(frame); //when const apdu = service.handleFrame(frame); //then - expect(apdu).toEqual(Left(new ReceiverApduError())); + expect(apdu).toEqual( + Left(new ReceiverApduError("Unable to parse header from apdu")), + ); }); }); @@ -285,7 +288,7 @@ describe("DefaultReceiverService", () => { ); }); - it("should return an error if the frame is not complete", () => { + it("should return an error if the frame is without index", () => { //given //frame with channelId, headTag, and partial Index only const frame = RESPONSE_LIST_APPS[0]!.slice(2, 4); @@ -294,20 +297,23 @@ describe("DefaultReceiverService", () => { const apdu = service.handleFrame(frame); //then - expect(apdu).toEqual(Left(new ReceiverApduError())); + expect(apdu).toEqual( + Left(new ReceiverApduError("Unable to parse header from apdu")), + ); }); - it("should return an error if the frame is not complete", () => { + it("should return an error if the frame is without datasize", () => { //given //frame with channelId, headTag, and Index and partial dataSize only const frame = RESPONSE_LIST_APPS[0]!.slice(2, 6); - console.log(frame); //when const apdu = service.handleFrame(frame); //then - expect(apdu).toEqual(Left(new ReceiverApduError())); + expect(apdu).toEqual( + Left(new ReceiverApduError("Unable to parse header from apdu")), + ); }); }); }); diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts index 6d6946630..e88dd84c7 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts @@ -103,7 +103,7 @@ export class DefaultReceiverService implements ReceiverService { apdu.length < channelSize + HEAD_TAG_SIZE + INDEX_SIZE + dataSizeLength ) { - return Left(new ReceiverApduError()); + return Left(new ReceiverApduError("Unable to parse header from apdu")); } const dataSize = isFirstIndex From 439ff22a036ab7664aebf02fd01c2e8f886c0b9e Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 27 Mar 2024 17:30:32 +0100 Subject: [PATCH 136/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Update?= =?UTF-8?q?=20TU=20with=20better=20purify=20syntax?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DefaultReceiverService.test.ts | 110 ++++++++++-------- 1 file changed, 61 insertions(+), 49 deletions(-) diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts index eaa1d170f..f9e4b0e8d 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts @@ -1,7 +1,7 @@ import * as uuid from "uuid"; jest.mock("uuid"); -import { Just, Left, Nothing, Right } from "purify-ts"; +import { Just, Left, Maybe, Nothing, Right } from "purify-ts"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { ReceiverApduError } from "@internal/device-session/model/Errors"; @@ -111,33 +111,37 @@ describe("DefaultReceiverService", () => { }); it("should return a response on a third frame when the two first are not complete", () => { - // given - const firstFrame = RESPONSE_LIST_APPS[0]!; - const secondFrame = RESPONSE_LIST_APPS[1]!; - const thirdFrame = RESPONSE_LIST_APPS[2]!; + //given + const apdus = [...RESPONSE_LIST_APPS]; - // when - const firstResponse = service.handleFrame(firstFrame); - const secondResponse = service.handleFrame(secondFrame); - const thirdResponse = service.handleFrame(thirdFrame); + //when + let response: Maybe = Nothing; + const responses: Maybe[] = []; + while (response.isNothing()) { + const apdu = apdus.shift()!; + const either = service.handleFrame(apdu); + + either.map((value) => { + response = value; + responses.push(response); + }); + } - // then - expect(firstResponse).toEqual(Right(Nothing)); - expect(secondResponse).toEqual(Right(Nothing)); - expect(thirdResponse).toEqual( - Right( - Just( - new ApduResponse({ - data: new Uint8Array([ - ...Array.from(RESPONSE_LIST_APPS[0]!.slice(7)), - ...Array.from(RESPONSE_LIST_APPS[1]!.slice(5)), - ...Array.from(RESPONSE_LIST_APPS[2]!).slice(5, 45), - ]), - statusCode: new Uint8Array([0x90, 0x00]), - }), - ), + //then + expect(responses).toEqual([ + Nothing, + Nothing, + Just( + new ApduResponse({ + data: new Uint8Array([ + ...Array.from(RESPONSE_LIST_APPS[0]!.slice(7)), + ...Array.from(RESPONSE_LIST_APPS[1]!.slice(5)), + ...Array.from(RESPONSE_LIST_APPS[2]!).slice(5, 45), + ]), + statusCode: new Uint8Array([0x90, 0x00]), + }), ), - ); + ]); }); it("should return two response directly when each frame is complete", () => { @@ -227,33 +231,41 @@ describe("DefaultReceiverService", () => { }); it("should return a response on a third frame when the two first are not complete", () => { - // given - const firstFrame = RESPONSE_LIST_APPS[0]!.slice(2); - const secondFrame = RESPONSE_LIST_APPS[1]!.slice(2); - const thirdFrame = RESPONSE_LIST_APPS[2]!.slice(2, 47); + //given + const apdus = [ + RESPONSE_LIST_APPS[0]!.slice(2), + RESPONSE_LIST_APPS[1]!.slice(2), + RESPONSE_LIST_APPS[2]!.slice(2, 47), + ]; - // when - const firstResponse = service.handleFrame(firstFrame); - const secondResponse = service.handleFrame(secondFrame); - const thirdResponse = service.handleFrame(thirdFrame); + //when + let response: Maybe = Nothing; + const responses: Maybe[] = []; + while (response.isNothing()) { + const apdu = apdus.shift()!; + const either = service.handleFrame(apdu); + + either.map((value) => { + response = value; + responses.push(response); + }); + } - // then - expect(firstResponse).toEqual(Right(Nothing)); - expect(secondResponse).toEqual(Right(Nothing)); - expect(thirdResponse).toEqual( - Right( - Just( - new ApduResponse({ - data: new Uint8Array([ - ...Array.from(RESPONSE_LIST_APPS[0]!.slice(7)), - ...Array.from(RESPONSE_LIST_APPS[1]!.slice(5)), - ...Array.from(RESPONSE_LIST_APPS[2]!).slice(5, 45), - ]), - statusCode: new Uint8Array([0x90, 0x00]), - }), - ), + //then + expect(responses).toEqual([ + Nothing, + Nothing, + Just( + new ApduResponse({ + data: new Uint8Array([ + ...Array.from(RESPONSE_LIST_APPS[0]!.slice(7)), + ...Array.from(RESPONSE_LIST_APPS[1]!.slice(5)), + ...Array.from(RESPONSE_LIST_APPS[2]!).slice(5, 45), + ]), + statusCode: new Uint8Array([0x90, 0x00]), + }), ), - ); + ]); }); it("should return two response directly when each frame is complete", () => { From 80053bddfe69d33340355462fd3ef95c4e2ec2a8 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 28 Mar 2024 10:03:10 +0100 Subject: [PATCH 137/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Remove?= =?UTF-8?q?=20all=20extract=20from=20receiver=20default=20implem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Only apduToFrame can throw ReceiverApduError - Split handleFrame with getCompleteFrame to handle only maybe case --- .../service/DefaultReceiverService.ts | 59 +++++++++++++------ 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts index e88dd84c7..3d8f46fd9 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultReceiverService.ts @@ -39,24 +39,45 @@ export class DefaultReceiverService implements ReceiverService { this._pendingFrames = []; } + /* + * Return + * - A complete ApduResponse + * - Or a Nothing if not all the data has been received + * - Or a ReceiverApduError if the apdu is not formatted correctly + * + * @param Uint8Array + */ public handleFrame( apdu: Uint8Array, ): Either> { const frame = this.apduToFrame(apdu); - if (frame.isLeft()) return frame; + return frame.map((value) => { + this._logger.debug("handle frame", { data: { frame } }); + this._pendingFrames.push(value); - this._logger.debug("handle frame", { data: { frame } }); - this._pendingFrames.push(frame.extract() as Frame); - - const dataSize = this._pendingFrames[0]!.getHeader().getDataSize(); + const dataSize = this._pendingFrames[0]!.getHeader().getDataSize(); + return this.getCompleteFrame(dataSize); + }); + } - if (dataSize.isNothing()) return Left(new ReceiverApduError()); + /* + * Return + * - A complete ApduResponse + * - Or a Nothing if not all the data has been received + * + * @param Maybe + */ + private getCompleteFrame(dataSize: Maybe): Maybe { + return dataSize.chain((value) => { + if (!this.isComplete(value)) { + this._logger.debug("frame is not complete, waiting for more"); + return Nothing; + } - if (dataSize.isJust() && this.isComplete(dataSize.extract())) { const concatenatedFramesData = FramerUtils.getFirstBytesFrom( this.concatFrames(this._pendingFrames), - dataSize.extract(), + value, ); const data = FramerUtils.getFirstBytesFrom( concatenatedFramesData, @@ -69,18 +90,13 @@ export class DefaultReceiverService implements ReceiverService { this._pendingFrames = []; - return Right( - Just( - new ApduResponse({ - data: data, - statusCode, - }), - ), + return Just( + new ApduResponse({ + data: data, + statusCode, + }), ); - } - - this._logger.debug("frame is not complete, waiting for more"); - return Right(Nothing); + }); } private apduToFrame(apdu: Uint8Array): Either { @@ -96,6 +112,11 @@ export class DefaultReceiverService implements ReceiverService { ); const isFirstIndex = index.reduce((curr, val) => curr + val, 0) === 0; + + if (!isFirstIndex && this._pendingFrames.length === 0) { + return Left(new ReceiverApduError()); + } + const dataSizeIndex = channelSize + HEAD_TAG_SIZE + INDEX_SIZE; const dataSizeLength = isFirstIndex ? APDU_DATA_SIZE : 0; From 30da7e4a5c85ada02d7ada9c9b43fe2f24d9ab67 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 28 Mar 2024 10:08:40 +0100 Subject: [PATCH 138/253] =?UTF-8?q?=F0=9F=8E=A8=20(core):=20Rename=20Recei?= =?UTF-8?q?verService=20to=20ApduReceiverService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{ReceiverService.ts => ApduReceiverService.ts} | 2 +- ....test.ts => DefaultApduReceiverService.test.ts} | 14 +++++++------- ...verService.ts => DefaultApduReceiverService.ts} | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) rename packages/core/src/internal/device-session/service/{ReceiverService.ts => ApduReceiverService.ts} (87%) rename packages/core/src/internal/device-session/service/{DefaultReceiverService.test.ts => DefaultApduReceiverService.test.ts} (96%) rename packages/core/src/internal/device-session/service/{DefaultReceiverService.ts => DefaultApduReceiverService.ts} (97%) diff --git a/packages/core/src/internal/device-session/service/ReceiverService.ts b/packages/core/src/internal/device-session/service/ApduReceiverService.ts similarity index 87% rename from packages/core/src/internal/device-session/service/ReceiverService.ts rename to packages/core/src/internal/device-session/service/ApduReceiverService.ts index dd496b446..42ba0d86e 100644 --- a/packages/core/src/internal/device-session/service/ReceiverService.ts +++ b/packages/core/src/internal/device-session/service/ApduReceiverService.ts @@ -3,6 +3,6 @@ import { Either, Maybe } from "purify-ts"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { ReceiverApduError } from "@internal/device-session/model/Errors"; -export interface ReceiverService { +export interface ApduReceiverService { handleFrame(apdu: Uint8Array): Either>; } diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.test.ts similarity index 96% rename from packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts rename to packages/core/src/internal/device-session/service/DefaultApduReceiverService.test.ts index f9e4b0e8d..d8a603273 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.test.ts @@ -7,8 +7,8 @@ import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { ReceiverApduError } from "@internal/device-session/model/Errors"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; -import { DefaultReceiverService } from "./DefaultReceiverService"; -import { ReceiverService } from "./ReceiverService"; +import { ApduReceiverService } from "./ApduReceiverService"; +import { DefaultApduReceiverService } from "./DefaultApduReceiverService"; const loggerService = new DefaultLoggerPublisherService([], "frame"); @@ -55,8 +55,8 @@ const RESPONSE_LIST_APPS = [ ]), ]; -describe("DefaultReceiverService", () => { - let service: ReceiverService; +describe("DefaultApduReceiverService", () => { + let service: ApduReceiverService; beforeAll(() => { jest.spyOn(uuid, "v4").mockReturnValue("42"); @@ -64,7 +64,7 @@ describe("DefaultReceiverService", () => { describe("without dataSize", () => { beforeEach(() => { - service = new DefaultReceiverService( + service = new DefaultApduReceiverService( { channel: Just(new Uint8Array([0xaa, 0xaa])) }, () => loggerService, ); @@ -84,7 +84,7 @@ describe("DefaultReceiverService", () => { describe("[USB] With padding and channel", () => { beforeEach(() => { - service = new DefaultReceiverService( + service = new DefaultApduReceiverService( { channel: Just(new Uint8Array([0xaa, 0xaa])) }, () => loggerService, ); @@ -207,7 +207,7 @@ describe("DefaultReceiverService", () => { describe("[BLE] Without padding nor channel", () => { beforeEach(() => { - service = new DefaultReceiverService({}, () => loggerService); + service = new DefaultApduReceiverService({}, () => loggerService); }); it("should return a response directly when a frame is complete", () => { diff --git a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts similarity index 97% rename from packages/core/src/internal/device-session/service/DefaultReceiverService.ts rename to packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts index 3d8f46fd9..5d14fa77a 100644 --- a/packages/core/src/internal/device-session/service/DefaultReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts @@ -17,14 +17,14 @@ import { FramerUtils } from "@internal/device-session/utils/FramerUtils"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { ReceiverService } from "./ReceiverService"; +import { ApduReceiverService } from "./ApduReceiverService"; type DefaultReceiverConstructorArgs = { channel?: Maybe; }; @injectable() -export class DefaultReceiverService implements ReceiverService { +export class DefaultApduReceiverService implements ApduReceiverService { private _channel: Maybe; private _logger: LoggerPublisherService; private _pendingFrames: Frame[]; From d3732da38d33ce8c5c60f0edeebafb4febf216e9 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 28 Mar 2024 10:16:22 +0100 Subject: [PATCH 139/253] =?UTF-8?q?=F0=9F=8E=A8=20(core):=20Change=20size?= =?UTF-8?q?=20suffix=20to=20length=20for=20apdu=20part?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device-session/data/ApduResponseConst.ts | 2 +- .../device-session/data/FramerConst.ts | 8 ++--- .../device-session/model/FrameHeader.ts | 14 ++++---- .../service/DefaultApduReceiverService.ts | 32 +++++++++---------- .../service/DefaultFramerService.ts | 18 +++++------ 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/packages/core/src/internal/device-session/data/ApduResponseConst.ts b/packages/core/src/internal/device-session/data/ApduResponseConst.ts index 5496d8162..0b8428a0d 100644 --- a/packages/core/src/internal/device-session/data/ApduResponseConst.ts +++ b/packages/core/src/internal/device-session/data/ApduResponseConst.ts @@ -1 +1 @@ -export const APDU_RESPONSE_STATUS_CODE_SIZE = 2; +export const APDU_RESPONSE_STATUS_CODE_LENGTH = 2; diff --git a/packages/core/src/internal/device-session/data/FramerConst.ts b/packages/core/src/internal/device-session/data/FramerConst.ts index c95f66951..17588db3f 100644 --- a/packages/core/src/internal/device-session/data/FramerConst.ts +++ b/packages/core/src/internal/device-session/data/FramerConst.ts @@ -1,5 +1,5 @@ export const HEAD_TAG = 0x05; -export const HEAD_TAG_SIZE = 1; -export const CHANNEL_SIZE = 2; -export const INDEX_SIZE = 2; -export const APDU_DATA_SIZE = 2; +export const HEAD_TAG_LENGTH = 1; +export const CHANNEL_LENGTH = 2; +export const INDEX_LENGTH = 2; +export const APDU_DATA_LENGTH_LENGTH = 2; diff --git a/packages/core/src/internal/device-session/model/FrameHeader.ts b/packages/core/src/internal/device-session/model/FrameHeader.ts index 12aa40471..30539358a 100644 --- a/packages/core/src/internal/device-session/model/FrameHeader.ts +++ b/packages/core/src/internal/device-session/model/FrameHeader.ts @@ -15,7 +15,7 @@ export class FrameHeader { protected _headTag: Uint8Array; protected _index: Uint8Array; protected _length: number; - protected _dataSize: Maybe; + protected _dataLength: Maybe; constructor({ uuid, dataSize, @@ -25,14 +25,14 @@ export class FrameHeader { channel, }: FrameHeaderConstructorArgs) { this._uuid = uuid; - this._dataSize = dataSize; + this._dataLength = dataSize; this._index = index; this._headTag = headTag; this._length = length; this._channel = channel; } - getDataSize(): Maybe { - return this._dataSize.caseOf({ + getDataLength(): Maybe { + return this._dataLength.caseOf({ Just: (value) => Maybe.of( value.reduce( @@ -45,7 +45,7 @@ export class FrameHeader { }); } setDataSize(dataSize: Maybe): FrameHeader { - this._dataSize = dataSize; + this._dataLength = dataSize; return this; } getLength(): number { @@ -54,7 +54,7 @@ export class FrameHeader { toString(): string { return JSON.stringify({ uuid: this._uuid.toString(), - dataSize: this._dataSize.extract()?.toString(), + dataSize: this._dataLength.extract()?.toString(), index: this._index.toString(), headTag: this._headTag.toString(), length: this._length.toString(), @@ -69,7 +69,7 @@ export class FrameHeader { }), ...this._headTag, ...this._index, - ...this._dataSize.caseOf({ + ...this._dataLength.caseOf({ Just: (dataSize) => [...dataSize], Nothing: () => [], }), diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts index 5d14fa77a..abe0115f9 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts @@ -2,12 +2,12 @@ import { inject, injectable } from "inversify"; import { Either, Just, Left, Maybe, Nothing, Right } from "purify-ts"; import { v4 } from "uuid"; -import { APDU_RESPONSE_STATUS_CODE_SIZE } from "@internal/device-session/data/ApduResponseConst"; +import { APDU_RESPONSE_STATUS_CODE_LENGTH } from "@internal/device-session/data/ApduResponseConst"; import { - APDU_DATA_SIZE, - CHANNEL_SIZE, - HEAD_TAG_SIZE, - INDEX_SIZE, + APDU_DATA_LENGTH_LENGTH, + CHANNEL_LENGTH, + HEAD_TAG_LENGTH, + INDEX_LENGTH, } from "@internal/device-session/data/FramerConst"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { ReceiverApduError } from "@internal/device-session/model/Errors"; @@ -56,7 +56,7 @@ export class DefaultApduReceiverService implements ApduReceiverService { this._logger.debug("handle frame", { data: { frame } }); this._pendingFrames.push(value); - const dataSize = this._pendingFrames[0]!.getHeader().getDataSize(); + const dataSize = this._pendingFrames[0]!.getHeader().getDataLength(); return this.getCompleteFrame(dataSize); }); } @@ -81,11 +81,11 @@ export class DefaultApduReceiverService implements ApduReceiverService { ); const data = FramerUtils.getFirstBytesFrom( concatenatedFramesData, - concatenatedFramesData.length - APDU_RESPONSE_STATUS_CODE_SIZE, + concatenatedFramesData.length - APDU_RESPONSE_STATUS_CODE_LENGTH, ); const statusCode = FramerUtils.getLastBytesFrom( concatenatedFramesData, - APDU_RESPONSE_STATUS_CODE_SIZE, + APDU_RESPONSE_STATUS_CODE_LENGTH, ); this._pendingFrames = []; @@ -101,14 +101,14 @@ export class DefaultApduReceiverService implements ApduReceiverService { private apduToFrame(apdu: Uint8Array): Either { const channelSize = this._channel.caseOf({ - Just: () => CHANNEL_SIZE, + Just: () => CHANNEL_LENGTH, Nothing: () => 0, }); - const headTag = apdu.slice(channelSize, channelSize + HEAD_TAG_SIZE); + const headTag = apdu.slice(channelSize, channelSize + HEAD_TAG_LENGTH); const index = apdu.slice( - channelSize + HEAD_TAG_SIZE, - channelSize + HEAD_TAG_SIZE + INDEX_SIZE, + channelSize + HEAD_TAG_LENGTH, + channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH, ); const isFirstIndex = index.reduce((curr, val) => curr + val, 0) === 0; @@ -117,12 +117,12 @@ export class DefaultApduReceiverService implements ApduReceiverService { return Left(new ReceiverApduError()); } - const dataSizeIndex = channelSize + HEAD_TAG_SIZE + INDEX_SIZE; - const dataSizeLength = isFirstIndex ? APDU_DATA_SIZE : 0; + const dataSizeIndex = channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH; + const dataSizeLength = isFirstIndex ? APDU_DATA_LENGTH_LENGTH : 0; if ( apdu.length < - channelSize + HEAD_TAG_SIZE + INDEX_SIZE + dataSizeLength + channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH + dataSizeLength ) { return Left(new ReceiverApduError("Unable to parse header from apdu")); } @@ -141,7 +141,7 @@ export class DefaultApduReceiverService implements ApduReceiverService { dataSize, headTag, index, - length: channelSize + HEAD_TAG_SIZE + INDEX_SIZE + dataSizeLength, + length: channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH + dataSizeLength, }), data, }); diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.ts b/packages/core/src/internal/device-session/service/DefaultFramerService.ts index 201b73352..feb7ec894 100644 --- a/packages/core/src/internal/device-session/service/DefaultFramerService.ts +++ b/packages/core/src/internal/device-session/service/DefaultFramerService.ts @@ -3,11 +3,11 @@ import { Either, Left, Maybe, Right } from "purify-ts"; import { v4 } from "uuid"; import { - APDU_DATA_SIZE, - CHANNEL_SIZE, + APDU_DATA_LENGTH_LENGTH, + CHANNEL_LENGTH, HEAD_TAG, - HEAD_TAG_SIZE, - INDEX_SIZE, + HEAD_TAG_LENGTH, + INDEX_LENGTH, } from "@internal/device-session/data/FramerConst"; import { FramerApduError, @@ -128,7 +128,7 @@ export class DefaultFramerService implements FramerService { const header = new FrameHeader({ uuid: v4(), channel: this._channel.map((channel) => - FramerUtils.getLastBytesFrom(channel, CHANNEL_SIZE), + FramerUtils.getLastBytesFrom(channel, CHANNEL_LENGTH), ), headTag: new Uint8Array([HEAD_TAG]), index: new Uint8Array([Math.floor(frameIndex / 0xff), frameIndex & 0xff]), @@ -170,12 +170,12 @@ export class DefaultFramerService implements FramerService { private getFrameHeaderSizeFromIndex(frameIndex: number): number { return ( this._channel.caseOf({ - Just: () => CHANNEL_SIZE, + Just: () => CHANNEL_LENGTH, Nothing: () => 0, }) + - INDEX_SIZE + - HEAD_TAG_SIZE + - (frameIndex === 0 ? APDU_DATA_SIZE : 0) + INDEX_LENGTH + + HEAD_TAG_LENGTH + + (frameIndex === 0 ? APDU_DATA_LENGTH_LENGTH : 0) ); } } From 140b71add5bccae6df8d0df2256751a928be8eae Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 28 Mar 2024 10:36:03 +0100 Subject: [PATCH 140/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Create?= =?UTF-8?q?=20helper=20bytesToNumber?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device-session/model/FrameHeader.ts | 16 ++++------------ .../device-session/utils/FramerUtils.test.ts | 19 +++++++++++++++++++ .../device-session/utils/FramerUtils.ts | 13 +++++++++++++ 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/packages/core/src/internal/device-session/model/FrameHeader.ts b/packages/core/src/internal/device-session/model/FrameHeader.ts index 30539358a..8cd260a79 100644 --- a/packages/core/src/internal/device-session/model/FrameHeader.ts +++ b/packages/core/src/internal/device-session/model/FrameHeader.ts @@ -1,4 +1,6 @@ -import { Maybe, Nothing } from "purify-ts"; +import { Maybe } from "purify-ts"; + +import { FramerUtils } from "@internal/device-session/utils/FramerUtils"; type FrameHeaderConstructorArgs = { uuid: string; @@ -32,17 +34,7 @@ export class FrameHeader { this._channel = channel; } getDataLength(): Maybe { - return this._dataLength.caseOf({ - Just: (value) => - Maybe.of( - value.reduce( - (acc, val, index) => - acc + val * Math.pow(0x100, value.length - 1 - index), - 0, - ), - ), - Nothing: () => Nothing, - }); + return this._dataLength.map((value) => FramerUtils.bytesToNumber(value)); } setDataSize(dataSize: Maybe): FrameHeader { this._dataLength = dataSize; diff --git a/packages/core/src/internal/device-session/utils/FramerUtils.test.ts b/packages/core/src/internal/device-session/utils/FramerUtils.test.ts index fc8cf3300..e71eb307d 100644 --- a/packages/core/src/internal/device-session/utils/FramerUtils.test.ts +++ b/packages/core/src/internal/device-session/utils/FramerUtils.test.ts @@ -60,4 +60,23 @@ describe("FramerUtils", () => { expect(result).toEqual(new Uint8Array([])); }); }); + + describe("bytesToNumber", () => { + it("should return a correct number", () => { + // Arrange + const array = new Uint8Array([0x67, 0x89]); + // Act + const result = FramerUtils.bytesToNumber(array); + // Assert + expect(result).toEqual(26505); + }); + it("should return 0 when array is empty", () => { + // Arrange + const array = new Uint8Array([]); + // Act + const result = FramerUtils.bytesToNumber(array); + // Assert + expect(result).toEqual(0); + }); + }); }); diff --git a/packages/core/src/internal/device-session/utils/FramerUtils.ts b/packages/core/src/internal/device-session/utils/FramerUtils.ts index 2feebe05e..b8bacb434 100644 --- a/packages/core/src/internal/device-session/utils/FramerUtils.ts +++ b/packages/core/src/internal/device-session/utils/FramerUtils.ts @@ -16,4 +16,17 @@ export const FramerUtils = { getFirstBytesFrom(array: Uint8Array, size: number): Uint8Array { return new Uint8Array(array.slice(0, size)); }, + + /* + * Get number from Uint8Array + * + * @param Uint8Array + */ + bytesToNumber(array: Uint8Array) { + return array.reduce( + (acc, val, index) => + acc + val * Math.pow(0x100, array.length - 1 - index), + 0, + ); + }, }; From 31d7aca4d511455e01784c5833b3ceaeab7af59e Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Thu, 28 Mar 2024 10:40:01 +0100 Subject: [PATCH 141/253] =?UTF-8?q?=F0=9F=92=A1=20(core):=20Add=20comments?= =?UTF-8?q?=20in=20DefaultApduReceiverService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DefaultApduReceiverService.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts index abe0115f9..8cd95ead5 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts @@ -99,6 +99,12 @@ export class DefaultApduReceiverService implements ApduReceiverService { }); } + /* + * Parse an Uint8Array to a Frame + * Return an error if the frame is not formatted correctly + * + * @param Uint8Array + */ private apduToFrame(apdu: Uint8Array): Either { const channelSize = this._channel.caseOf({ Just: () => CHANNEL_LENGTH, @@ -149,6 +155,11 @@ export class DefaultApduReceiverService implements ApduReceiverService { return Right(frame); } + /* + * Return true if all the datas has been received + * + * @param number + */ private isComplete(dataSize: number): boolean { const totalReceiveLength = this._pendingFrames.reduce( (prev: number, curr: Frame) => prev + curr.getData().length, From a417f0d58a66e9e64d18c7b2c12164d1f6b02ad9 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Mon, 25 Mar 2024 15:33:59 +0100 Subject: [PATCH 142/253] :recycle: (smpl): Base layout --- apps/sample/src/app/client-layout.tsx | 30 ++++++- apps/sample/src/app/page.tsx | 16 +--- apps/sample/src/components/Header/index.tsx | 33 ++++++++ apps/sample/src/components/MainView/index.tsx | 81 +++++-------------- apps/sample/src/components/Menu/index.tsx | 8 +- apps/sample/src/components/Sidebar/index.tsx | 27 ++++--- 6 files changed, 105 insertions(+), 90 deletions(-) create mode 100644 apps/sample/src/components/Header/index.tsx diff --git a/apps/sample/src/app/client-layout.tsx b/apps/sample/src/app/client-layout.tsx index 2371c4d75..57c527e5c 100644 --- a/apps/sample/src/app/client-layout.tsx +++ b/apps/sample/src/app/client-layout.tsx @@ -9,8 +9,12 @@ */ "use client"; -import { StyleProvider } from "@ledgerhq/react-ui"; +import React from "react"; +import { Flex, Icons, StyleProvider } from "@ledgerhq/react-ui"; +import styled, { DefaultTheme } from "styled-components"; +import { Header } from "@/components/Header"; +import { Sidebar } from "@/components/Sidebar"; import { SdkProvider } from "@/providers/DeviceSdkProvider"; import { GlobalStyle } from "@/styles/globalstyles"; @@ -18,13 +22,35 @@ type ClientRootLayoutProps = { children: React.ReactNode; }; +const Root = styled(Flex)` + flex-direction: row; + color: ${({ theme }: { theme: DefaultTheme }) => theme.colors.neutral.c90}; + height: 100%; + flex: 1; +`; + +const PageContainer = styled(Flex)` + flex-direction: column; + background-color: ${({ theme }: { theme: DefaultTheme }) => + theme.colors.background.main}; + flex: 1; +`; + const ClientRootLayout: React.FC = ({ children }) => { return ( - {children} + + + + +
    + {children} + + + diff --git a/apps/sample/src/app/page.tsx b/apps/sample/src/app/page.tsx index 08b6316d2..b698d7daa 100644 --- a/apps/sample/src/app/page.tsx +++ b/apps/sample/src/app/page.tsx @@ -1,24 +1,10 @@ "use client"; import React from "react"; -import { Flex } from "@ledgerhq/react-ui"; -import styled, { DefaultTheme } from "styled-components"; import { MainView } from "@/components/MainView"; -import { Sidebar } from "@/components/Sidebar"; - -const Root = styled(Flex)` - color: ${({ theme }: { theme: DefaultTheme }) => theme.colors.neutral.c90}; - flex-direction: row; - height: 100%; -`; const Home: React.FC = () => { - return ( - - - - - ); + return ; }; // eslint-disable-next-line no-restricted-syntax diff --git a/apps/sample/src/components/Header/index.tsx b/apps/sample/src/components/Header/index.tsx new file mode 100644 index 000000000..83fbd02eb --- /dev/null +++ b/apps/sample/src/components/Header/index.tsx @@ -0,0 +1,33 @@ +import React from "react"; +import { Flex, Icons } from "@ledgerhq/react-ui"; +import styled, { DefaultTheme } from "styled-components"; + +const Root = styled(Flex).attrs({ py: 3, px: 10, gridGap: 8 })` + color: ${({ theme }: { theme: DefaultTheme }) => theme.colors.neutral.c90}; + justify-content: flex-end; + align-items: center; +`; + +const Actions = styled(Flex)` + justify-content: flex-end; + align-items: center; + flex: 1 0 0; +`; +const IconBox = styled(Flex).attrs({ p: 3 })` + cursor: pointer; + align-items: center; + opacity: 0.7; +`; + +export const Header = () => ( + + + + + + + + + + +); diff --git a/apps/sample/src/components/MainView/index.tsx b/apps/sample/src/components/MainView/index.tsx index 9dbe2d5ab..b804eafef 100644 --- a/apps/sample/src/components/MainView/index.tsx +++ b/apps/sample/src/components/MainView/index.tsx @@ -1,34 +1,12 @@ import React, { useCallback, useEffect, useState } from "react"; import type { DiscoveredDevice } from "@ledgerhq/device-sdk-core"; -import { Button, Flex, Icons, Text } from "@ledgerhq/react-ui"; +import { Button, Flex, Text } from "@ledgerhq/react-ui"; import Image from "next/image"; import styled, { DefaultTheme } from "styled-components"; import { useSdk } from "@/providers/DeviceSdkProvider"; const Root = styled(Flex)` - flex-direction: column; - flex: 1; -`; - -const Header = styled(Flex).attrs({ py: 3, px: 10, gridGap: 8 })` - justify-content: flex-end; - align-items: center; -`; - -const Actions = styled(Flex)` - justify-content: flex-end; - align-items: center; - flex: 1 0 0; -`; - -const IconBox = styled(Flex).attrs({ p: 3 })` - cursor: pointer; - align-items: center; - opacity: 0.7; -`; - -const Container = styled(Flex)` flex: 1; justify-content: center; align-items: center; @@ -85,44 +63,27 @@ export const MainView: React.FC = () => { return ( -
    - - - - - - - - -
    - - - - - Ledger Device SDK - - - Use this application to test Ledger hardware device features. - + + + Ledger Device SDK + + + Use this application to test Ledger hardware device features. + - - +
    ); }; diff --git a/apps/sample/src/components/Menu/index.tsx b/apps/sample/src/components/Menu/index.tsx index bb8ba0a30..46656a7ec 100644 --- a/apps/sample/src/components/Menu/index.tsx +++ b/apps/sample/src/components/Menu/index.tsx @@ -1,17 +1,19 @@ -import { Flex, Icons, Text } from "@ledgerhq/react-ui"; +import { Flex, Icons, Link } from "@ledgerhq/react-ui"; +import { useRouter } from "next/navigation"; import styled from "styled-components"; const MenuItem = styled(Flex).attrs({ p: 3, pl: 5 })` align-items: center; `; -const MenuTitle = styled(Text).attrs({ +const MenuTitle = styled(Link).attrs({ variant: "paragraph", fontWeight: "semiBold", ml: 5, })``; export const Menu: React.FC = () => { + const router = useRouter(); return ( <> @@ -24,7 +26,7 @@ export const Menu: React.FC = () => { - APDU + router.push("/apdu")}>APDU diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx index a12c50773..ab8568b10 100644 --- a/apps/sample/src/components/Sidebar/index.tsx +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -1,5 +1,7 @@ +"use client"; import React, { useEffect, useState } from "react"; -import { Box, Flex, Icons, Text } from "@ledgerhq/react-ui"; +import { Box, Flex, Icons, Link, Text } from "@ledgerhq/react-ui"; +import { useRouter } from "next/navigation"; import styled, { DefaultTheme } from "styled-components"; import { @@ -18,10 +20,6 @@ const Root = styled(Flex).attrs({ py: 8, px: 6 })` theme.colors.background.main}; `; -const Title = styled(Text).attrs({ mb: 8 })` - opacity: 0.5; -`; - const Subtitle = styled(Text).attrs({ mb: 5 })``; const MenuContainer = styled(Box)` @@ -60,13 +58,22 @@ export const Sidebar: React.FC = () => { }); }, [sdk]); + const router = useRouter(); return ( - Ledger Device SDK - - {version ? ( - SDK Version: {version} - ) : null} + router.push("/")} + mb={8} + textProps={{ + textAlign: "left", + variant: "large", + }} + > + Ledger Device SDK + + + SDK Version: {version ? version : "Loading..."} + Device Date: Mon, 25 Mar 2024 15:35:35 +0100 Subject: [PATCH 143/253] :sparkles: (smpl): Apdu form /apdu --- apps/sample/src/app/apdu/page.tsx | 10 ++ apps/sample/src/components/ApduView/index.tsx | 148 ++++++++++++++++++ apps/sample/src/hooks/useApduForm.ts | 58 +++++++ 3 files changed, 216 insertions(+) create mode 100644 apps/sample/src/app/apdu/page.tsx create mode 100644 apps/sample/src/components/ApduView/index.tsx create mode 100644 apps/sample/src/hooks/useApduForm.ts diff --git a/apps/sample/src/app/apdu/page.tsx b/apps/sample/src/app/apdu/page.tsx new file mode 100644 index 000000000..0f7005690 --- /dev/null +++ b/apps/sample/src/app/apdu/page.tsx @@ -0,0 +1,10 @@ +"use client"; +import React from "react"; + +import { ApduView } from "@/components/ApduView"; + +const Apdu: React.FC = () => { + return ; +}; + +export default Apdu; diff --git a/apps/sample/src/components/ApduView/index.tsx b/apps/sample/src/components/ApduView/index.tsx new file mode 100644 index 000000000..02fd33e70 --- /dev/null +++ b/apps/sample/src/components/ApduView/index.tsx @@ -0,0 +1,148 @@ +import { Button, Divider, Flex, Grid, Input, Text } from "@ledgerhq/react-ui"; +import styled, { DefaultTheme } from "styled-components"; + +import { useApduForm } from "@/hooks/useApduForm"; + +const Root = styled(Flex).attrs({ mx: 15, mt: 10, mb: 5 })` + flex-direction: column; + flex: 1; + justify-content: center; + align-items: center; +`; + +const Title = styled(Text).attrs({ + variant: "large", + fontSize: 18, + mt: 8, +})``; + +const FormContainer = styled(Flex)` + background-color: ${({ theme }: { theme: DefaultTheme }) => + theme.colors.neutral.c30}; + height: 100%; + width: 100%; + flex-direction: column; + border-radius: 12px; +`; + +const FormHeader = styled(Flex).attrs({ px: 8, py: 6 })``; + +const Form = styled(Flex).attrs({ my: 6, px: 10 })` + flex: 1; + flex-direction: column; + justify-content: center; +`; + +const FormFooter = styled(Flex).attrs({ my: 8, px: 8 })` + flex-direction: row; + justify-content: flex-end; + align-self: flex-end; + align-items: flex-end; +`; + +const FormFooterButton = styled(Button).attrs({ + variant: "main", + size: "large", + color: "neutral.c00", +})``; + +const InputContainer = styled(Flex).attrs({ mx: 8, mb: 4 })` + flex-direction: column; + min-width: 150px; +`; + +const inputContainerProps = { style: { borderRadius: 4 } }; + +export const ApduView: React.FC = () => { + const { apduFormValues, setApduFormValue, apdu } = useApduForm(); + return ( + + + + APDU + + +
    + + + + Class instruction + + + setApduFormValue("classInstruction", value) + } + /> + + + + Instruction method + + + setApduFormValue("instructionMethod", value) + } + /> + + + + Parameter 1 + + setApduFormValue("firstParameter", value)} + /> + + + + Parameter 2 + + setApduFormValue("secondParameter", value)} + /> + + + + Data + + setApduFormValue("data", value)} + /> + + + + Data length + + setApduFormValue("dataLength", value)} + /> + + +
    + + + console.log(apdu)}> + Send APDU + + +
    +
    + ); +}; diff --git a/apps/sample/src/hooks/useApduForm.ts b/apps/sample/src/hooks/useApduForm.ts new file mode 100644 index 000000000..deee35fc2 --- /dev/null +++ b/apps/sample/src/hooks/useApduForm.ts @@ -0,0 +1,58 @@ +import { useCallback, useEffect, useState } from "react"; + +type ApduFormValues = { + classInstruction: string; + instructionMethod: string; + firstParameter: string; + secondParameter: string; + data: string; + dataLength: string; +}; + +export function useApduForm() { + const [values, setValues] = useState({ + classInstruction: "", + instructionMethod: "", + firstParameter: "", + secondParameter: "", + data: "", + dataLength: "", + }); + const [apdu, setApdu] = useState(Uint8Array.from([])); + + const setValue = useCallback((field: keyof ApduFormValues, value: string) => { + setValues((prev) => ({ ...prev, [field]: value })); + }, []); + + useEffect(() => { + const newApdu = Object.values(values).reduce( + (acc, curr) => [ + ...acc, + ...chunkString(curr.replace(/\s/g, "")) + .map((char) => Number(`0x${char}`)) + .filter((nbr) => !Number.isNaN(nbr)), + ], + [] as number[], + ); + setApdu(Uint8Array.from(newApdu)); + }, [values]); + + return { + apduFormValues: values, + setApduFormValue: setValue, + apdu, + }; +} + +const BYTE_SIZE = 2; + +const chunkString = (str: string, size = BYTE_SIZE): string[] => { + const numChunks = Math.ceil(str.length / size); + const chunks = new Array(numChunks); + + for (let i = 0, offset = 0; i < numChunks; ++i, offset += size) { + chunks[i] = str.slice(offset, offset + size); + } + + return chunks; +}; From 7144d2b87eeea2d1d732b901482849586c665b1b Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Wed, 27 Mar 2024 14:38:42 +0100 Subject: [PATCH 144/253] =?UTF-8?q?=E2=9E=96=20(chore):=20Remove=20husky?= =?UTF-8?q?=20dependency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .husky/pre-push | 1 - package.json | 4 +-- pnpm-lock.yaml | 92 ++++++++++++++++++++++++++++++++----------------- 3 files changed, 61 insertions(+), 36 deletions(-) delete mode 100644 .husky/pre-push diff --git a/.husky/pre-push b/.husky/pre-push deleted file mode 100644 index 009b3f89b..000000000 --- a/.husky/pre-push +++ /dev/null @@ -1 +0,0 @@ -pnpm lint diff --git a/package.json b/package.json index ed4da1959..c0e6898b2 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "trusted-apps": "pnpm --filter @ledgerhq/device-sdk-trusted-apps", "ui": "pnpm --filter @ledgerhq/device-sdk-ui", "sample": "pnpm --filter @ledgerhq/device-sdk-sample", - "prepare": "husky", "bump": "changeset version", "release": "changeset publish", "changelog": "changeset add", @@ -37,15 +36,14 @@ "danger": "^11.3.1", "eslint": "^8.56.0", "gitmoji-cli": "^9.1.0", - "husky": "^9.0.10", "hygen": "^6.2.11", "jest": "^29.7.0", "lint-staged": "^15.2.0", "prettier": "^3.1.1", "rimraf": "^5.0.5", + "ts-jest": "^29.1.1", "turbo": "^1.12.3", "typescript": "^5.3.3", - "ts-jest": "^29.1.1", "zx": "^7.2.3" }, "lint-staged": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 72bb584f3..5a074158c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,9 +29,6 @@ importers: gitmoji-cli: specifier: ^9.1.0 version: 9.1.0 - husky: - specifier: ^9.0.10 - version: 9.0.10 hygen: specifier: ^6.2.11 version: 6.2.11 @@ -49,7 +46,7 @@ importers: version: 5.0.5 ts-jest: specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3) + version: 29.1.1(@babel/core@7.23.6)(jest@29.7.0)(typescript@5.3.3) turbo: specifier: ^1.12.3 version: 1.12.3 @@ -321,10 +318,10 @@ packages: '@babel/helpers': 7.23.6 '@babel/parser': 7.23.6 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6(supports-color@5.5.0) + '@babel/traverse': 7.23.6 '@babel/types': 7.23.6 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -353,6 +350,7 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: false /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.56.0): resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} @@ -443,6 +441,7 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + dev: false /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} @@ -477,7 +476,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6(supports-color@5.5.0) + '@babel/traverse': 7.23.6 '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color @@ -492,6 +491,7 @@ packages: '@babel/types': 7.23.9 transitivePeerDependencies: - supports-color + dev: false /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} @@ -514,6 +514,7 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.9 + dev: false /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -675,6 +676,25 @@ packages: '@babel/code-frame': 7.23.5 '@babel/parser': 7.23.9 '@babel/types': 7.23.9 + dev: false + + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true /@babel/traverse@7.23.6(supports-color@5.5.0): resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} @@ -692,6 +712,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: false /@babel/traverse@7.23.9: resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} @@ -709,6 +730,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: false /@babel/types@7.23.6: resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} @@ -725,6 +747,7 @@ packages: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + dev: false /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1062,7 +1085,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.0 @@ -1158,7 +1181,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2723,7 +2746,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -2731,7 +2754,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -3771,7 +3794,7 @@ packages: chalk: 2.4.2 commander: 2.20.3 core-js: 3.36.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 fast-json-patch: 3.1.1 get-stdin: 6.0.0 http-proxy-agent: 5.0.0 @@ -3846,6 +3869,17 @@ packages: ms: 2.1.3 dev: true + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -4731,7 +4765,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -5243,7 +5277,7 @@ packages: dependencies: basic-ftp: 5.0.4 data-uri-to-buffer: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -5537,7 +5571,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -5547,7 +5581,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -5573,7 +5607,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -5582,7 +5616,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -5606,12 +5640,6 @@ packages: engines: {node: '>=16.17.0'} dev: true - /husky@9.0.10: - resolution: {integrity: sha512-TQGNknoiy6bURzIO77pPRu+XHi6zI7T93rX+QnJsoYFf3xdjKOur+IlfqzJGMHIK/wXrLg+GsvMs8Op7vI2jVA==} - engines: {node: '>=18'} - hasBin: true - dev: true - /hygen@6.2.11: resolution: {integrity: sha512-t6/zLI2XozP5gvV74nnl8LZSbwpVNFUkUs/O9DwuOdiiBbws5k4AQNVwKZ9FGzcKjdJ5EBBYkVzlcUHkLyY0FQ==} hasBin: true @@ -5619,7 +5647,7 @@ packages: '@types/node': 17.0.45 chalk: 4.1.2 change-case: 3.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 degit: 2.8.4 ejs: 3.1.9 enquirer: 2.4.1 @@ -6169,7 +6197,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6838,7 +6866,7 @@ packages: dependencies: chalk: 5.3.0 commander: 11.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 execa: 8.0.1 lilconfig: 3.0.0 listr2: 8.0.0 @@ -7601,7 +7629,7 @@ packages: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 get-uri: 6.0.3 http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 @@ -7892,7 +7920,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 lru-cache: 7.18.3 @@ -8554,7 +8582,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 socks: 2.7.3 transitivePeerDependencies: - supports-color @@ -9046,7 +9074,7 @@ packages: typescript: 5.3.3 dev: true - /ts-jest@29.1.1(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3): + /ts-jest@29.1.1(@babel/core@7.23.6)(jest@29.7.0)(typescript@5.3.3): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -9067,7 +9095,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.23.6 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.7.0(@types/node@20.10.6) From 638db3422f9f86894d4910f6c2e50eace88b2fca Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Fri, 29 Mar 2024 14:50:20 +0100 Subject: [PATCH 145/253] =?UTF-8?q?=F0=9F=91=B7=20(devx):=20Move=20actions?= =?UTF-8?q?=20to=20github=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions}/setup-toolchain-composite/action.yml | 0 .github/workflows/pull_request.yml | 4 ++-- .github/workflows/version.yml | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) rename {actions => .github/actions}/setup-toolchain-composite/action.yml (100%) diff --git a/actions/setup-toolchain-composite/action.yml b/.github/actions/setup-toolchain-composite/action.yml similarity index 100% rename from actions/setup-toolchain-composite/action.yml rename to .github/actions/setup-toolchain-composite/action.yml diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 8b9388b2f..480e3649e 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -17,7 +17,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: ./actions/setup-toolchain-composite + - uses: ./.github/actions/setup-toolchain-composite - uses: toshimaru/auto-author-assign@v2.1.0 @@ -35,7 +35,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: ./actions/setup-toolchain-composite + - uses: ./.github/actions/setup-toolchain-composite - name: Lint run: pnpm lint diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index b4b8b7650..d0eeec9ef 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -12,9 +12,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: ./actions/setup-toolchain-composite + + - uses: ./.github/actions/setup-toolchain-composite + - name: install dependencies run: pnpm install + - name: create release pull request uses: changesets/action@v1 with: From b53366fa69462488a3c6ab4abf2abdb64913bf2c Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 2 Apr 2024 15:35:45 +0200 Subject: [PATCH 146/253] =?UTF-8?q?=F0=9F=91=B7=20(devx):=20Add=20health?= =?UTF-8?q?=20check=20ci=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 11 +++-------- package.json | 1 + turbo.json | 3 +++ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 480e3649e..c21e0c139 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -30,6 +30,7 @@ jobs: run: pnpm danger ci --dangerfile danger/dangerfile.ts --failOnErrors health-check: + name: Pass health check needs: [danger] runs-on: [device-sdk-4xlarge-linux] steps: @@ -37,14 +38,8 @@ jobs: - uses: ./.github/actions/setup-toolchain-composite - - name: Lint - run: pnpm lint - - - name: Prettier - run: pnpm prettier - - - name: Typecheck - run: pnpm typecheck + - name: health check + run: pnpm health-check - name: Test run: pnpm test:coverage -- --max-warnings=0 diff --git a/package.json b/package.json index c0e6898b2..f913f4a16 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "test": "turbo run test --log-order=grouped", "test:coverage": "turbo run test:coverage --log-order=grouped", "typecheck": "turbo run typecheck --log-order=grouped", + "health-check": "turbo run health-check --log-order=grouped --output-logs=errors-only --continue", "core": "pnpm --filter @ledgerhq/device-sdk-core", "signer": "pnpm --filter @ledgerhq/device-sdk-signer", "trusted-apps": "pnpm --filter @ledgerhq/device-sdk-trusted-apps", diff --git a/turbo.json b/turbo.json index f58c258dd..98426dd75 100644 --- a/turbo.json +++ b/turbo.json @@ -35,6 +35,9 @@ }, "typecheck": { "dependsOn": ["build", "^typecheck"] + }, + "health-check": { + "dependsOn": ["build", "prettier", "lint", "typecheck"] } } } From 68a5d62ea03ab5f676fcbc3082464bb6c3628101 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 2 Apr 2024 15:12:14 +0200 Subject: [PATCH 147/253] =?UTF-8?q?=F0=9F=92=9A=20(devx):=20Fix=20prettier?= =?UTF-8?q?=20after=20unit=20test=20run?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/.prettierignore | 3 ++- packages/signer/.prettierignore | 3 ++- packages/trusted-apps/.prettierignore | 3 ++- packages/ui/.prettierignore | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/core/.prettierignore b/packages/core/.prettierignore index 4eb56dc37..af229265b 100644 --- a/packages/core/.prettierignore +++ b/packages/core/.prettierignore @@ -1 +1,2 @@ -lib/* \ No newline at end of file +lib/* +coverage/* diff --git a/packages/signer/.prettierignore b/packages/signer/.prettierignore index 4eb56dc37..af229265b 100644 --- a/packages/signer/.prettierignore +++ b/packages/signer/.prettierignore @@ -1 +1,2 @@ -lib/* \ No newline at end of file +lib/* +coverage/* diff --git a/packages/trusted-apps/.prettierignore b/packages/trusted-apps/.prettierignore index 4eb56dc37..af229265b 100644 --- a/packages/trusted-apps/.prettierignore +++ b/packages/trusted-apps/.prettierignore @@ -1 +1,2 @@ -lib/* \ No newline at end of file +lib/* +coverage/* diff --git a/packages/ui/.prettierignore b/packages/ui/.prettierignore index 4eb56dc37..af229265b 100644 --- a/packages/ui/.prettierignore +++ b/packages/ui/.prettierignore @@ -1 +1,2 @@ -lib/* \ No newline at end of file +lib/* +coverage/* From 8327cde12e4251aaa6acb77737c10464a148a6b9 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 2 Apr 2024 15:43:50 +0200 Subject: [PATCH 148/253] =?UTF-8?q?=F0=9F=91=B7=20(devx):=20Create=20speci?= =?UTF-8?q?fic=20job=20for=20unit=20tests/sonar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index c21e0c139..2403489a7 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -41,6 +41,15 @@ jobs: - name: health check run: pnpm health-check + unit-tests: + name: Launch unit tests + needs: [danger] + runs-on: [device-sdk-4xlarge-linux] + steps: + - uses: actions/checkout@v4 + + - uses: ./.github/actions/setup-toolchain-composite + - name: Test run: pnpm test:coverage -- --max-warnings=0 From c324e3c008f4ee708f1fdbceeda6e7afdcfb9e39 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 2 Apr 2024 10:09:07 +0200 Subject: [PATCH 149/253] =?UTF-8?q?=F0=9F=91=B7=20(devx):=20Create=20speci?= =?UTF-8?q?fic=20job=20for=20auto=20assign?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit auto assign is not really a check but an action Remove it from danger check job. --- .github/workflows/pull_request.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 2403489a7..a848fc2c6 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,6 +11,12 @@ concurrency: cancel-in-progress: true jobs: + auto-assign: + name: Auto assign + runs-on: [ubuntu-latest] + steps: + - uses: toshimaru/auto-author-assign@v2.1.0 + danger: name: Pass Danger check runs-on: [ubuntu-latest] @@ -19,8 +25,6 @@ jobs: - uses: ./.github/actions/setup-toolchain-composite - - uses: toshimaru/auto-author-assign@v2.1.0 - - name: Danger env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 77ce8ef1da3651bd7b7471a826240e734f50e0bd Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 2 Apr 2024 10:36:19 +0200 Subject: [PATCH 150/253] =?UTF-8?q?=F0=9F=91=B7=20(devx):=20Create=20dange?= =?UTF-8?q?r=20check=20ci=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allow the possibility to run it locally. For now, we need to set a github token because the repo is private. --- .github/actions/danger-check.sh | 27 +++++++++++++++++++++++++++ .github/workflows/pull_request.yml | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100755 .github/actions/danger-check.sh diff --git a/.github/actions/danger-check.sh b/.github/actions/danger-check.sh new file mode 100755 index 000000000..eca68890c --- /dev/null +++ b/.github/actions/danger-check.sh @@ -0,0 +1,27 @@ +#!/bin/bash +set -e + +is_running_on_github_actions() { + [ -n "$CI" ] && [ -n "$GITHUB_ACTIONS" ] +} + +run_danger_on_github_actions() { + echo "Script is running within GitHub Actions workflow." + pnpm danger ci --dangerfile danger/dangerfile.ts --failOnErrors +} + +run_danger_on_local() { + echo "Script is running locally." + pnpm danger pr --dangerfile danger/dangerfile.ts https://github.com/LedgerHQ/device-sdk-ts/pull/${1} +} + +if is_running_on_github_actions; then + run_danger_on_github_actions +else + if [ -z "$1" ]; then + echo "Argument PR number is missing" + exit 1 + fi + run_danger_on_local "$1" +fi + diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index a848fc2c6..54f90bb1d 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -31,7 +31,7 @@ jobs: # Workaround when using custom runners # https://github.com/danger/danger-js/issues/1374 DANGER_GITHUB_API_BASE_URL: "https://api.github.com" - run: pnpm danger ci --dangerfile danger/dangerfile.ts --failOnErrors + run: ./.github/actions/danger-check.sh health-check: name: Pass health check From 0eb35f7f3b74baf070b3d3e613265dbd1f3ad25a Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Thu, 4 Apr 2024 18:52:07 +0200 Subject: [PATCH 151/253] =?UTF-8?q?=F0=9F=94=A8=20(packages):=20Update=20t?= =?UTF-8?q?he=20bundling=20of=20the=20libraries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- danger/dangerfile.ts | 2 +- package.json | 24 +- packages/config/esbuild/config/common.js | 14 + packages/config/esbuild/index.js | 9 + packages/config/esbuild/package.json | 5 + packages/config/esbuild/plugins/alias.js | 57 + packages/config/esbuild/plugins/copy.js | 42 + packages/config/typescript/package.json | 4 +- packages/config/typescript/sdk.json | 1 - packages/core/package.json | 15 +- packages/core/scripts/build.mjs | 67 + packages/core/tsconfig.cjs.json | 10 + packages/core/tsconfig.esm.json | 9 + packages/core/tsconfig.json | 5 +- packages/core/tsconfig.prod.json | 4 - packages/signer/.eslintrc.js | 39 + packages/signer/package.json | 13 +- packages/signer/scripts/build.mjs | 69 + packages/signer/tsconfig.cjs.json | 10 + packages/signer/tsconfig.esm.json | 9 + packages/signer/tsconfig.json | 2 +- packages/trusted-apps/.eslintrc.js | 39 + packages/trusted-apps/package.json | 13 +- packages/trusted-apps/scripts/build.mjs | 69 + packages/trusted-apps/tsconfig.cjs.json | 10 + packages/trusted-apps/tsconfig.esm.json | 9 + packages/trusted-apps/tsconfig.json | 2 +- packages/ui/.eslintrc.js | 39 + packages/ui/package.json | 13 +- packages/ui/scripts/build.mjs | 69 + packages/ui/tsconfig.cjs.json | 10 + packages/ui/tsconfig.esm.json | 9 + packages/ui/tsconfig.json | 2 +- pnpm-lock.yaml | 1514 ++++++++++++---------- turbo.json | 18 +- 35 files changed, 1497 insertions(+), 729 deletions(-) create mode 100644 packages/config/esbuild/config/common.js create mode 100644 packages/config/esbuild/index.js create mode 100644 packages/config/esbuild/package.json create mode 100644 packages/config/esbuild/plugins/alias.js create mode 100644 packages/config/esbuild/plugins/copy.js create mode 100644 packages/core/scripts/build.mjs create mode 100644 packages/core/tsconfig.cjs.json create mode 100644 packages/core/tsconfig.esm.json delete mode 100644 packages/core/tsconfig.prod.json create mode 100644 packages/signer/scripts/build.mjs create mode 100644 packages/signer/tsconfig.cjs.json create mode 100644 packages/signer/tsconfig.esm.json create mode 100644 packages/trusted-apps/scripts/build.mjs create mode 100644 packages/trusted-apps/tsconfig.cjs.json create mode 100644 packages/trusted-apps/tsconfig.esm.json create mode 100644 packages/ui/scripts/build.mjs create mode 100644 packages/ui/tsconfig.cjs.json create mode 100644 packages/ui/tsconfig.esm.json diff --git a/danger/dangerfile.ts b/danger/dangerfile.ts index dfb465cb1..4239d394b 100644 --- a/danger/dangerfile.ts +++ b/danger/dangerfile.ts @@ -1,7 +1,7 @@ import { danger, fail } from "danger"; const branchRegex = - /^(feature|bugfix|support|chore|doc|refacto)\/((DSDK|dsdk)-[0-9]+|NO-ISSUE|no-issue)\-.*/; + /^(feature|bugfix|support|chore|doc|refacto)\/((dsdk)-[0-9]+|no-issue)\-.*/i; if (!branchRegex.test(danger.github.pr.head.ref)) { fail( "Please fix the PR branch name to match the convention, see [this documentation](https://ledgerhq.atlassian.net/wiki/spaces/WXP/pages/4527358147/DSDK+TS+Git+-+Github+conventions)" diff --git a/package.json b/package.json index f913f4a16..97c519b85 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "apps/*" ], "scripts": { - "build": "turbo build --log-order=grouped", - "dev": "turbo dev --log-order=grouped", + "build": "turbo run build --log-order=grouped", + "dev": "turbo run dev --filter=...device-sdk-sample", "lint": "turbo run lint --log-order=grouped", "lint:fix": "turbo run lint:fix --log-order=grouped", "prettier": "turbo run prettier --log-order=grouped", @@ -32,19 +32,23 @@ "devDependencies": { "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.1", - "@types/jest": "^29.5.11", - "@types/node": "^20.10.6", + "@types/jest": "^29.5.12", + "@types/node": "^20.12.4", + "concurrently": "^8.2.2", "danger": "^11.3.1", - "eslint": "^8.56.0", - "gitmoji-cli": "^9.1.0", + "esbuild": "^0.20.2", + "esbuild-plugin-d.ts": "^1.2.3", + "eslint": "^8.57.0", + "gitmoji-cli": "^9.2.0", "hygen": "^6.2.11", "jest": "^29.7.0", "lint-staged": "^15.2.0", - "prettier": "^3.1.1", + "prettier": "^3.2.5", "rimraf": "^5.0.5", - "ts-jest": "^29.1.1", - "turbo": "^1.12.3", - "typescript": "^5.3.3", + "ts-jest": "^29.1.2", + "tsc-alias": "^1.8.8", + "turbo": "^1.13.2", + "typescript": "^5.4.3", "zx": "^7.2.3" }, "lint-staged": { diff --git a/packages/config/esbuild/config/common.js b/packages/config/esbuild/config/common.js new file mode 100644 index 000000000..eec460033 --- /dev/null +++ b/packages/config/esbuild/config/common.js @@ -0,0 +1,14 @@ +const buildConfig = (config, packageJson) => ({ + sourcemap: true, + treeShaking: true, + color: true, + bundle: true, + minify: true, + ...config, + plugins: [...(config.plugins || [])], + external: Object.keys(packageJson.dependencies || {}).concat( + Object.keys(packageJson.peerDependencies || {}) + ), +}); + +module.exports = buildConfig; diff --git a/packages/config/esbuild/index.js b/packages/config/esbuild/index.js new file mode 100644 index 000000000..5c00d127a --- /dev/null +++ b/packages/config/esbuild/index.js @@ -0,0 +1,9 @@ +const alias = require("./plugins/alias"); +const copy = require("./plugins/copy"); +const buildConfig = require("./config/common"); + +module.exports = { + alias, + copy, + buildConfig, +}; diff --git a/packages/config/esbuild/package.json b/packages/config/esbuild/package.json new file mode 100644 index 000000000..c685174d3 --- /dev/null +++ b/packages/config/esbuild/package.json @@ -0,0 +1,5 @@ +{ + "name": "@ledgerhq/esbuild-tools", + "main": "index.js", + "private": true +} diff --git a/packages/config/esbuild/plugins/alias.js b/packages/config/esbuild/plugins/alias.js new file mode 100644 index 000000000..22714b83a --- /dev/null +++ b/packages/config/esbuild/plugins/alias.js @@ -0,0 +1,57 @@ +const path = require("path"); + +module.exports = (mappings) => ({ + name: "Alias", + setup(build) { + Object.entries(mappings).forEach(([filter, mappings]) => { + if (!Array.isArray(mappings)) { + mappings = [mappings]; + } + + const resolveCallback = async function (args) { + if (args.resolveDir === "") { + return; // Ignore unresolvable paths + } + + const errors = []; + + for (const mapping of mappings) { + const rawMappedPath = args.path.replace(filter, mapping); + const relativeMappedPath = path + .relative(args.resolveDir, rawMappedPath) + // Fixes windows paths + .replace(new RegExp("\\\\+", "g"), "/"); + + const mappedPath = relativeMappedPath.startsWith(".") + ? relativeMappedPath + : `./${relativeMappedPath}`; + + let result = await build.resolve(mappedPath, { + kind: "import-statement", + resolveDir: args.resolveDir, + }); + + if (result.errors.length > 0) { + errors.push(...result.errors); + result = await build.resolve(rawMappedPath, { + kind: "import-statement", + resolveDir: args.resolveDir, + }); + + if (result.errors.length > 0) { + errors.push(...result.errors); + continue; + } + } + + return result; + } + + return { errors }; + }; + + build.onResolve({ filter: new RegExp(`^${filter}$`) }, resolveCallback); + build.onResolve({ filter: new RegExp(`^${filter}/.+`) }, resolveCallback); + }); + }, +}); diff --git a/packages/config/esbuild/plugins/copy.js b/packages/config/esbuild/plugins/copy.js new file mode 100644 index 000000000..7f37ac858 --- /dev/null +++ b/packages/config/esbuild/plugins/copy.js @@ -0,0 +1,42 @@ +const fs = require("fs"); +const path = require("path"); + +// Copy a folder and its contents recursively. +function copyFolderRecursivelySync(source, target, options = {}) { + if (!fs.existsSync(target)) { + fs.mkdirSync(target, { recursive: true, ...options }); + } + + if (fs.statSync(source).isDirectory()) { + const files = fs.readdirSync(source); + files.forEach(function (file) { + var curSource = path.join(source, file); + if (fs.statSync(curSource).isDirectory()) { + copyFolderRecursivelySync(curSource, path.join(target, file)); + } else { + fs.copyFileSync(curSource, path.join(target, path.basename(file))); + } + }); + } +} + +module.exports = ({ patterns, options = {} }) => { + return { + name: "Copy", + setup(build) { + build.onEnd(({ errors }) => { + if (errors.length && !options.skipOnError) { + return; + } + + const targetBase = + build.initialOptions.outdir || + path.dirname(build.initialOptions.outfile); + + patterns.forEach(({ from, to }) => { + copyFolderRecursivelySync(from, path.join(targetBase, to), options); + }); + }); + }, + }; +}; diff --git a/packages/config/typescript/package.json b/packages/config/typescript/package.json index fa20f8a78..4ae43d06f 100644 --- a/packages/config/typescript/package.json +++ b/packages/config/typescript/package.json @@ -3,8 +3,8 @@ "version": "1.0.0", "private": true, "files": [ - "sdk.json", - "web.json" + "tsconfig.json", + "tsconfig.json" ], "devDependencies": { "@tsconfig/recommended": "^1.0.3", diff --git a/packages/config/typescript/sdk.json b/packages/config/typescript/sdk.json index 8cad79134..73c7da687 100644 --- a/packages/config/typescript/sdk.json +++ b/packages/config/typescript/sdk.json @@ -7,7 +7,6 @@ "declaration": true, "declarationMap": true, "skipLibCheck": false, - "baseUrl": ".", "strict": true, "allowUnusedLabels": false, "allowUnreachableCode": false, diff --git a/packages/core/package.json b/packages/core/package.json index 3fba186ae..8b514e16e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -2,13 +2,17 @@ "name": "@ledgerhq/device-sdk-core", "version": "0.0.1", "license": "MIT", - "main": "lib/index.js", - "types": "lib/index.d.ts", + "exports": { + ".": { + "require": "./lib/cjs/index.js", + "import": "./lib/esm/index.js" + } + }, "files": [ "./lib" ], "scripts": { - "build": "rimraf lib && tsc -p tsconfig.prod.json && tsc-alias -p tsconfig.prod.json", + "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc && (concurrently \"tsc -w -p tsconfig.prod.json\" \"tsc-alias -w -p tsconfig.prod.json\")", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", @@ -31,6 +35,7 @@ "uuid": "^9.0.1" }, "devDependencies": { + "@ledgerhq/esbuild-tools": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", "@ledgerhq/prettier-config-dsdk": "workspace:*", @@ -38,8 +43,6 @@ "@types/semver": "^7.5.6", "@types/uuid": "^9.0.8", "@types/w3c-web-hid": "^1.0.6", - "concurrently": "^8.2.2", - "ts-node": "^10.9.2", - "tsc-alias": "^1.8.8" + "ts-node": "^10.9.2" } } diff --git a/packages/core/scripts/build.mjs b/packages/core/scripts/build.mjs new file mode 100644 index 000000000..741cf6dae --- /dev/null +++ b/packages/core/scripts/build.mjs @@ -0,0 +1,67 @@ +#!/usr/bin/env zx +import { build } from "esbuild"; +import { alias, buildConfig } from "@ledgerhq/esbuild-tools"; +import path from "node:path"; +import dtsPlugin from "esbuild-plugin-d.ts"; + +const root = path.join(__dirname, ".."); +const srcRoot = path.join(root, "src"); +const outdir = path.join(root, "lib"); +const tsconfigEsm = path.join(root, "tsconfig.esm.json"); +const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); + +const pkg = fs.readFileSync(path.join(root, "package.json"), "utf-8"); +const packageJson = JSON.parse(pkg); + +const conf = { + entryPoints: [path.join(root, "index.ts")], + plugins: [ + alias({ + "@root": root, + "@internal": path.join(srcRoot, "internal"), + "@api": path.join(srcRoot, "api"), + }), + ], +}; + +const common = buildConfig(conf, packageJson); + +const buildEsm = async () => { + const config = { + ...common, + outdir: path.join(outdir, "esm"), + format: "esm", + tsconfig: tsconfigEsm, + plugins: [ + ...common.plugins, + dtsPlugin({ + tsconfig: tsconfigEsm, + }), + ], + }; + + await build(config); +}; + +const builCjs = async () => { + const config = { + ...common, + outdir: path.join(outdir, "cjs"), + format: "cjs", + tsconfig: tsconfigCjs, + plugins: [ + ...common.plugins, + dtsPlugin({ + tsconfig: tsconfigCjs, + }), + ], + }; + + await build(config); +}; + +const run = async () => await Promise.all([buildEsm(), builCjs()]); + +run().catch((e) => { + console.error(e); +}); diff --git a/packages/core/tsconfig.cjs.json b/packages/core/tsconfig.cjs.json new file mode 100644 index 000000000..a797cc717 --- /dev/null +++ b/packages/core/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/**/*.test.ts", "jest.*.ts"], + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "outDir": "./lib/cjs", + "declarationDir": "./lib/cjs" + } +} diff --git a/packages/core/tsconfig.esm.json b/packages/core/tsconfig.esm.json new file mode 100644 index 000000000..dd32a6fe4 --- /dev/null +++ b/packages/core/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/**/*.test.ts", "jest.*.ts"], + "compilerOptions": { + "module": "esnext", + "outDir": "./lib/esm", + "declarationDir": "./lib/esm" + } +} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 60095c963..915c92b8b 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,13 +1,14 @@ { "extends": "@ledgerhq/tsconfig-dsdk/sdk", "compilerOptions": { - "outDir": "./lib", "baseUrl": ".", "paths": { "@api/*": ["src/api/*"], "@internal/*": ["src/internal/*"], "@root/*": ["./*"] - } + }, + "experimentalDecorators": true, + "resolveJsonModule": true }, "include": ["src", "index.ts", "jest.*.ts"] } diff --git a/packages/core/tsconfig.prod.json b/packages/core/tsconfig.prod.json deleted file mode 100644 index 457b19611..000000000 --- a/packages/core/tsconfig.prod.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "exclude": ["src/**/*.test.ts", "jest.*.ts"] -} diff --git a/packages/signer/.eslintrc.js b/packages/signer/.eslintrc.js index f1495cd5c..4e17c249a 100644 --- a/packages/signer/.eslintrc.js +++ b/packages/signer/.eslintrc.js @@ -5,4 +5,43 @@ module.exports = { project: true, tsconfigRootDir: __dirname, }, + overrides: [ + { + files: ["**/*.mjs"], + env: { + es6: true, + node: true, + }, + globals: { + log: true, + $: true, + argv: true, + cd: true, + chalk: true, + echo: true, + expBackoff: true, + fs: true, + glob: true, + globby: true, + nothrow: true, + os: true, + path: true, + question: true, + quiet: true, + quote: true, + quotePowerShell: true, + retry: true, + sleep: true, + spinner: true, + ssh: true, + stdin: true, + which: true, + within: true, + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: "module", + }, + }, + ], }; diff --git a/packages/signer/package.json b/packages/signer/package.json index 0bd507f48..fcc1cf810 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -2,13 +2,19 @@ "name": "@ledgerhq/device-sdk-signer", "version": "1.0.0", "license": "MIT", - "main": "lib/index.js", - "types": "lib/index.d.ts", + "main": "lib/cjs/index.js", + "types": "lib/cjs/index.d.ts", + "exports": { + ".": { + "require": "./lib/cjs/index.js", + "import": "./lib/esm/index.js" + } + }, "files": [ "./lib" ], "scripts": { - "build": "rimraf lib && tsc", + "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", @@ -23,6 +29,7 @@ "reflect-metadata": "^0.2.1" }, "devDependencies": { + "@ledgerhq/esbuild-tools": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", diff --git a/packages/signer/scripts/build.mjs b/packages/signer/scripts/build.mjs new file mode 100644 index 000000000..49fc33fca --- /dev/null +++ b/packages/signer/scripts/build.mjs @@ -0,0 +1,69 @@ +#!/usr/bin/env zx +import { build } from "esbuild"; +import { /* alias, */ buildConfig } from "@ledgerhq/esbuild-tools"; +import dtsPlugin from "esbuild-plugin-d.ts"; + +const root = path.join(__dirname, ".."); +const srcRoot = path.join(root, "src"); +const outdir = path.join(root, "lib"); +const tsconfigEsm = path.join(root, "tsconfig.esm.json"); +const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); + +const pkg = fs.readFileSync(path.join(root, "package.json"), "utf-8"); +const packageJson = JSON.parse(pkg); + +const conf = { + entryPoints: [path.join(srcRoot, "index.ts")], + plugins: [ + // EXAMPLE USAGE, UNCOMMENT TO USE + // alias({ + // "@root": root, + // "@internal": path.join(srcRoot, "internal"), + // "@api": path.join(srcRoot, "api"), + // }), + ], +}; + +const common = buildConfig(conf, packageJson); + +const buildEsm = async () => { + const config = { + ...common, + outdir: path.join(outdir, "esm"), + format: "esm", + tsconfig: tsconfigEsm, + plugins: [ + ...common.plugins, + dtsPlugin({ + tsconfig: tsconfigEsm, + }), + ], + }; + + await build(config); +}; + +const builCjs = async () => { + const config = { + ...common, + outdir: path.join(outdir, "cjs"), + format: "cjs", + tsconfig: tsconfigCjs, + plugins: [ + ...common.plugins, + dtsPlugin({ + tsconfig: tsconfigCjs, + }), + ], + }; + + await build(config); +}; + +const run = async () => Promise.all([buildEsm(), builCjs()]); + +run() + .then(() => console.log("success")) + .catch((e) => { + console.error(e); + }); diff --git a/packages/signer/tsconfig.cjs.json b/packages/signer/tsconfig.cjs.json new file mode 100644 index 000000000..a797cc717 --- /dev/null +++ b/packages/signer/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/**/*.test.ts", "jest.*.ts"], + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "outDir": "./lib/cjs", + "declarationDir": "./lib/cjs" + } +} diff --git a/packages/signer/tsconfig.esm.json b/packages/signer/tsconfig.esm.json new file mode 100644 index 000000000..dd32a6fe4 --- /dev/null +++ b/packages/signer/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/**/*.test.ts", "jest.*.ts"], + "compilerOptions": { + "module": "esnext", + "outDir": "./lib/esm", + "declarationDir": "./lib/esm" + } +} diff --git a/packages/signer/tsconfig.json b/packages/signer/tsconfig.json index 52d8bbf1d..9e50330ae 100644 --- a/packages/signer/tsconfig.json +++ b/packages/signer/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "@ledgerhq/tsconfig-dsdk/sdk", "compilerOptions": { - "outDir": "./lib" + "baseUrl": "." }, "include": ["src/**/*", "jest.config.ts"] } diff --git a/packages/trusted-apps/.eslintrc.js b/packages/trusted-apps/.eslintrc.js index f1495cd5c..4e17c249a 100644 --- a/packages/trusted-apps/.eslintrc.js +++ b/packages/trusted-apps/.eslintrc.js @@ -5,4 +5,43 @@ module.exports = { project: true, tsconfigRootDir: __dirname, }, + overrides: [ + { + files: ["**/*.mjs"], + env: { + es6: true, + node: true, + }, + globals: { + log: true, + $: true, + argv: true, + cd: true, + chalk: true, + echo: true, + expBackoff: true, + fs: true, + glob: true, + globby: true, + nothrow: true, + os: true, + path: true, + question: true, + quiet: true, + quote: true, + quotePowerShell: true, + retry: true, + sleep: true, + spinner: true, + ssh: true, + stdin: true, + which: true, + within: true, + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: "module", + }, + }, + ], }; diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 43ff257b3..6ce829628 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -2,13 +2,19 @@ "name": "@ledgerhq/device-sdk-trusted-apps", "version": "1.0.0", "license": "MIT", - "main": "lib/index.js", - "types": "lib/index.d.ts", + "main": "lib/cjs/index.js", + "types": "lib/cjs/index.d.ts", + "exports": { + ".": { + "require": "./lib/cjs/index.js", + "import": "./lib/esm/index.js" + } + }, "files": [ "./lib" ], "scripts": { - "build": "rimraf lib && tsc", + "build": "rimraf lib && zx scripts/build.mjs", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", "prettier": "prettier . --check", @@ -23,6 +29,7 @@ "reflect-metadata": "^0.2.1" }, "devDependencies": { + "@ledgerhq/esbuild-tools": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", diff --git a/packages/trusted-apps/scripts/build.mjs b/packages/trusted-apps/scripts/build.mjs new file mode 100644 index 000000000..49fc33fca --- /dev/null +++ b/packages/trusted-apps/scripts/build.mjs @@ -0,0 +1,69 @@ +#!/usr/bin/env zx +import { build } from "esbuild"; +import { /* alias, */ buildConfig } from "@ledgerhq/esbuild-tools"; +import dtsPlugin from "esbuild-plugin-d.ts"; + +const root = path.join(__dirname, ".."); +const srcRoot = path.join(root, "src"); +const outdir = path.join(root, "lib"); +const tsconfigEsm = path.join(root, "tsconfig.esm.json"); +const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); + +const pkg = fs.readFileSync(path.join(root, "package.json"), "utf-8"); +const packageJson = JSON.parse(pkg); + +const conf = { + entryPoints: [path.join(srcRoot, "index.ts")], + plugins: [ + // EXAMPLE USAGE, UNCOMMENT TO USE + // alias({ + // "@root": root, + // "@internal": path.join(srcRoot, "internal"), + // "@api": path.join(srcRoot, "api"), + // }), + ], +}; + +const common = buildConfig(conf, packageJson); + +const buildEsm = async () => { + const config = { + ...common, + outdir: path.join(outdir, "esm"), + format: "esm", + tsconfig: tsconfigEsm, + plugins: [ + ...common.plugins, + dtsPlugin({ + tsconfig: tsconfigEsm, + }), + ], + }; + + await build(config); +}; + +const builCjs = async () => { + const config = { + ...common, + outdir: path.join(outdir, "cjs"), + format: "cjs", + tsconfig: tsconfigCjs, + plugins: [ + ...common.plugins, + dtsPlugin({ + tsconfig: tsconfigCjs, + }), + ], + }; + + await build(config); +}; + +const run = async () => Promise.all([buildEsm(), builCjs()]); + +run() + .then(() => console.log("success")) + .catch((e) => { + console.error(e); + }); diff --git a/packages/trusted-apps/tsconfig.cjs.json b/packages/trusted-apps/tsconfig.cjs.json new file mode 100644 index 000000000..a797cc717 --- /dev/null +++ b/packages/trusted-apps/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/**/*.test.ts", "jest.*.ts"], + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "outDir": "./lib/cjs", + "declarationDir": "./lib/cjs" + } +} diff --git a/packages/trusted-apps/tsconfig.esm.json b/packages/trusted-apps/tsconfig.esm.json new file mode 100644 index 000000000..dd32a6fe4 --- /dev/null +++ b/packages/trusted-apps/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/**/*.test.ts", "jest.*.ts"], + "compilerOptions": { + "module": "esnext", + "outDir": "./lib/esm", + "declarationDir": "./lib/esm" + } +} diff --git a/packages/trusted-apps/tsconfig.json b/packages/trusted-apps/tsconfig.json index 52d8bbf1d..9e50330ae 100644 --- a/packages/trusted-apps/tsconfig.json +++ b/packages/trusted-apps/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "@ledgerhq/tsconfig-dsdk/sdk", "compilerOptions": { - "outDir": "./lib" + "baseUrl": "." }, "include": ["src/**/*", "jest.config.ts"] } diff --git a/packages/ui/.eslintrc.js b/packages/ui/.eslintrc.js index f1495cd5c..4e17c249a 100644 --- a/packages/ui/.eslintrc.js +++ b/packages/ui/.eslintrc.js @@ -5,4 +5,43 @@ module.exports = { project: true, tsconfigRootDir: __dirname, }, + overrides: [ + { + files: ["**/*.mjs"], + env: { + es6: true, + node: true, + }, + globals: { + log: true, + $: true, + argv: true, + cd: true, + chalk: true, + echo: true, + expBackoff: true, + fs: true, + glob: true, + globby: true, + nothrow: true, + os: true, + path: true, + question: true, + quiet: true, + quote: true, + quotePowerShell: true, + retry: true, + sleep: true, + spinner: true, + ssh: true, + stdin: true, + which: true, + within: true, + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: "module", + }, + }, + ], }; diff --git a/packages/ui/package.json b/packages/ui/package.json index 1307b80de..1e90c2912 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -2,13 +2,19 @@ "name": "@ledgerhq/device-sdk-ui", "version": "1.0.0", "license": "MIT", - "main": "lib/index.js", - "types": "lib/index.d.ts", + "main": "lib/cjs/index.js", + "types": "lib/cjs/index.d.ts", + "exports": { + ".": { + "require": "./lib/cjs/index.js", + "import": "./lib/esm/index.js" + } + }, "files": [ "./lib" ], "scripts": { - "build": "rimraf lib && tsc", + "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", "lint:fix": "eslint --cache --fix --ext .ts \"src\"", @@ -23,6 +29,7 @@ "reflect-metadata": "^0.2.1" }, "devDependencies": { + "@ledgerhq/esbuild-tools": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", diff --git a/packages/ui/scripts/build.mjs b/packages/ui/scripts/build.mjs new file mode 100644 index 000000000..49fc33fca --- /dev/null +++ b/packages/ui/scripts/build.mjs @@ -0,0 +1,69 @@ +#!/usr/bin/env zx +import { build } from "esbuild"; +import { /* alias, */ buildConfig } from "@ledgerhq/esbuild-tools"; +import dtsPlugin from "esbuild-plugin-d.ts"; + +const root = path.join(__dirname, ".."); +const srcRoot = path.join(root, "src"); +const outdir = path.join(root, "lib"); +const tsconfigEsm = path.join(root, "tsconfig.esm.json"); +const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); + +const pkg = fs.readFileSync(path.join(root, "package.json"), "utf-8"); +const packageJson = JSON.parse(pkg); + +const conf = { + entryPoints: [path.join(srcRoot, "index.ts")], + plugins: [ + // EXAMPLE USAGE, UNCOMMENT TO USE + // alias({ + // "@root": root, + // "@internal": path.join(srcRoot, "internal"), + // "@api": path.join(srcRoot, "api"), + // }), + ], +}; + +const common = buildConfig(conf, packageJson); + +const buildEsm = async () => { + const config = { + ...common, + outdir: path.join(outdir, "esm"), + format: "esm", + tsconfig: tsconfigEsm, + plugins: [ + ...common.plugins, + dtsPlugin({ + tsconfig: tsconfigEsm, + }), + ], + }; + + await build(config); +}; + +const builCjs = async () => { + const config = { + ...common, + outdir: path.join(outdir, "cjs"), + format: "cjs", + tsconfig: tsconfigCjs, + plugins: [ + ...common.plugins, + dtsPlugin({ + tsconfig: tsconfigCjs, + }), + ], + }; + + await build(config); +}; + +const run = async () => Promise.all([buildEsm(), builCjs()]); + +run() + .then(() => console.log("success")) + .catch((e) => { + console.error(e); + }); diff --git a/packages/ui/tsconfig.cjs.json b/packages/ui/tsconfig.cjs.json new file mode 100644 index 000000000..a797cc717 --- /dev/null +++ b/packages/ui/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/**/*.test.ts", "jest.*.ts"], + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "outDir": "./lib/cjs", + "declarationDir": "./lib/cjs" + } +} diff --git a/packages/ui/tsconfig.esm.json b/packages/ui/tsconfig.esm.json new file mode 100644 index 000000000..dd32a6fe4 --- /dev/null +++ b/packages/ui/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/**/*.test.ts", "jest.*.ts"], + "compilerOptions": { + "module": "esnext", + "outDir": "./lib/esm", + "declarationDir": "./lib/esm" + } +} diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 52d8bbf1d..9e50330ae 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "@ledgerhq/tsconfig-dsdk/sdk", "compilerOptions": { - "outDir": "./lib" + "baseUrl": "." }, "include": ["src/**/*", "jest.config.ts"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5a074158c..e5b2ae33f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,44 +15,56 @@ importers: specifier: ^2.27.1 version: 2.27.1 '@types/jest': - specifier: ^29.5.11 - version: 29.5.11 + specifier: ^29.5.12 + version: 29.5.12 '@types/node': - specifier: ^20.10.6 - version: 20.10.6 + specifier: ^20.12.4 + version: 20.12.4 + concurrently: + specifier: ^8.2.2 + version: 8.2.2 danger: specifier: ^11.3.1 version: 11.3.1 + esbuild: + specifier: ^0.20.2 + version: 0.20.2 + esbuild-plugin-d.ts: + specifier: ^1.2.3 + version: 1.2.3(typescript@5.4.3) eslint: - specifier: ^8.56.0 - version: 8.56.0 + specifier: ^8.57.0 + version: 8.57.0 gitmoji-cli: - specifier: ^9.1.0 - version: 9.1.0 + specifier: ^9.2.0 + version: 9.2.0 hygen: specifier: ^6.2.11 version: 6.2.11 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.10.6) + version: 29.7.0(@types/node@20.12.4) lint-staged: specifier: ^15.2.0 version: 15.2.0 prettier: - specifier: ^3.1.1 - version: 3.1.1 + specifier: ^3.2.5 + version: 3.2.5 rimraf: specifier: ^5.0.5 version: 5.0.5 ts-jest: - specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.23.6)(jest@29.7.0)(typescript@5.3.3) + specifier: ^29.1.2 + version: 29.1.2(@babel/core@7.24.4)(esbuild@0.20.2)(jest@29.7.0)(typescript@5.4.3) + tsc-alias: + specifier: ^1.8.8 + version: 1.8.8 turbo: - specifier: ^1.12.3 - version: 1.12.3 + specifier: ^1.13.2 + version: 1.13.2 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: ^5.4.3 + version: 5.4.3 zx: specifier: ^7.2.3 version: 7.2.3 @@ -70,7 +82,7 @@ importers: version: 7.107.0(next@14.0.4)(react@18.2.0) next: specifier: 14.0.4 - version: 14.0.4(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) + version: 14.0.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18 version: 18.2.0 @@ -79,7 +91,7 @@ importers: version: 18.2.0(react@18.2.0) styled-components: specifier: ^5.3.11 - version: 5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + version: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -101,46 +113,48 @@ importers: version: 10.4.16(postcss@8.4.32) eslint-config-next: specifier: 14.0.4 - version: 14.0.4(eslint@8.56.0)(typescript@5.3.3) + version: 14.0.4(eslint@8.57.0)(typescript@5.4.3) postcss: specifier: ^8 version: 8.4.32 + packages/config/esbuild: {} + packages/config/eslint: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^6.14.0 - version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.3) '@typescript-eslint/parser': specifier: ^6.14.0 - version: 6.14.0(eslint@8.56.0)(typescript@5.3.3) + version: 6.14.0(eslint@8.57.0)(typescript@5.4.3) '@vercel/style-guide': specifier: ^5.1.0 - version: 5.1.0(eslint@8.56.0)(jest@29.7.0)(prettier@3.1.1)(typescript@5.3.3) + version: 5.1.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.3) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.56.0) + version: 9.1.0(eslint@8.57.0) eslint-config-turbo: specifier: ^1.10.12 - version: 1.11.2(eslint@8.56.0) + version: 1.11.2(eslint@8.57.0) eslint-plugin-only-warn: specifier: ^1.1.0 version: 1.1.0 eslint-plugin-simple-import-sort: specifier: ^10.0.0 - version: 10.0.0(eslint@8.56.0) + version: 10.0.0(eslint@8.57.0) packages/config/jest: devDependencies: ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) + version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) packages/config/prettier: devDependencies: prettier: specifier: ^3.1.1 - version: 3.1.1 + version: 3.2.5 packages/config/typescript: devDependencies: @@ -184,6 +198,9 @@ importers: specifier: ^9.0.1 version: 9.0.1 devDependencies: + '@ledgerhq/esbuild-tools': + specifier: workspace:* + version: link:../config/esbuild '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint @@ -205,15 +222,9 @@ importers: '@types/w3c-web-hid': specifier: ^1.0.6 version: 1.0.6 - concurrently: - specifier: ^8.2.2 - version: 8.2.2 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) - tsc-alias: - specifier: ^1.8.8 - version: 1.8.8 + version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) packages/signer: dependencies: @@ -224,6 +235,9 @@ importers: specifier: ^0.2.1 version: 0.2.1 devDependencies: + '@ledgerhq/esbuild-tools': + specifier: workspace:* + version: link:../config/esbuild '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint @@ -246,6 +260,9 @@ importers: specifier: ^0.2.1 version: 0.2.1 devDependencies: + '@ledgerhq/esbuild-tools': + specifier: workspace:* + version: link:../config/esbuild '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint @@ -268,6 +285,9 @@ importers: specifier: ^0.2.1 version: 0.2.1 devDependencies: + '@ledgerhq/esbuild-tools': + specifier: workspace:* + version: link:../config/esbuild '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint @@ -288,61 +308,38 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 /@babel/compat-data@7.23.5: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - /@babel/core@7.23.6: - resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} + /@babel/core@7.24.4: + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helpers': 7.23.6 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.6 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/core@7.23.9: - resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1(supports-color@5.5.0) + '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 @@ -350,36 +347,35 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: false - /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.56.0): + /@babel/eslint-parser@7.23.3(@babel/core@7.24.4)(eslint@8.57.0): resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.56.0 + eslint: 8.57.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: false /@babel/helper-compilation-targets@7.23.6: @@ -400,48 +396,33 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: false /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} @@ -451,16 +432,16 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.22.20: @@ -471,187 +452,157 @@ packages: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - /@babel/helpers@7.23.6: - resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} + /@babel/helpers@7.24.4: + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.6 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1(supports-color@5.5.0) + '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/helpers@7.23.9: - resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.0 - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.23.6 - - /@babel/parser@7.23.9: - resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.9 - dev: false + '@babel/types': 7.24.0 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -661,93 +612,38 @@ packages: dependencies: regenerator-runtime: 0.14.1 - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 - /@babel/template@7.23.9: - resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + /@babel/traverse@7.24.1(supports-color@5.5.0): + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - dev: false - - /@babel/traverse@7.23.6: - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/traverse@7.23.6(supports-color@5.5.0): - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4(supports-color@5.5.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/traverse@7.23.9: - resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: false - - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - /@babel/types@7.23.9: - resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 + '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - dev: false /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1065,13 +961,220 @@ packages: resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} dev: false - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.56.0 + eslint: 8.57.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1085,7 +1188,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.0 @@ -1097,8 +1200,8 @@ packages: - supports-color dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1176,12 +1279,12 @@ packages: xcase: 2.0.1 dev: true - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -1192,8 +1295,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} dev: true /@isaacs/cliui@8.0.2: @@ -1229,7 +1332,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.6 + '@types/node': 20.12.4 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1250,14 +1353,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.6 + '@types/node': 20.12.4 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.10.6) + jest-config: 29.7.0(@types/node@20.12.4) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1285,7 +1388,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.6 + '@types/node': 20.12.4 jest-mock: 29.7.0 dev: true @@ -1312,7 +1415,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.10.6 + '@types/node': 20.12.4 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1344,8 +1447,8 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.20 - '@types/node': 20.10.6 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.12.4 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1378,7 +1481,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -1407,9 +1510,9 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -1433,40 +1536,40 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.6 + '@types/node': 20.12.4 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 dev: true @@ -1483,7 +1586,7 @@ packages: dependencies: '@types/react': 18.2.45 react: 18.2.0 - styled-components: 5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false @@ -1500,7 +1603,7 @@ packages: dependencies: '@types/react': 18.2.45 react: 18.2.0 - styled-components: 5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false @@ -1532,7 +1635,7 @@ packages: react-select: 5.8.0(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) react-window: 1.8.10(react-dom@18.2.0)(react@18.2.0) - styled-components: 5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false @@ -1540,11 +1643,11 @@ packages: resolution: {integrity: sha512-mPvo78REWxhYTmkFI96ryCOAyZTV42f+l55AnuoeJ2tGn5nN7bmkOUIzZ4MJOx5VvGlWcvtY/+2dA0yEelCs9w==} dev: false - /@ljharb/through@2.3.12: - resolution: {integrity: sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==} + /@ljharb/through@2.3.13: + resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /@manypkg/find-root@1.1.0: @@ -2001,7 +2104,7 @@ packages: '@sentry/vercel-edge': 7.107.0 '@sentry/webpack-plugin': 1.21.0 chalk: 3.0.0 - next: 14.0.4(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) + next: 14.0.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 resolve: 1.22.8 rollup: 2.78.0 @@ -2257,8 +2360,8 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.4 @@ -2267,20 +2370,20 @@ packages: /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 dev: true /@types/babel__traverse@7.20.4: resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: true /@types/cacheable-request@6.0.3: @@ -2288,7 +2391,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.11.16 + '@types/node': 20.12.4 '@types/responselike': 1.0.3 dev: true @@ -2306,13 +2409,13 @@ packages: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.10.6 + '@types/node': 20.12.4 dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.12.4 dev: true /@types/hoist-non-react-statics@3.3.5: @@ -2342,8 +2445,8 @@ packages: '@types/istanbul-lib-report': 3.0.3 dev: true - /@types/jest@29.5.11: - resolution: {integrity: sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==} + /@types/jest@29.5.12: + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} dependencies: expect: 29.7.0 pretty-format: 29.7.0 @@ -2359,13 +2462,13 @@ packages: /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.12.4 dev: true /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.12.4 dev: true /@types/minimist@1.2.5: @@ -2380,20 +2483,14 @@ packages: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: true - /@types/node@18.19.3: - resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/node@20.10.6: - resolution: {integrity: sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==} + /@types/node@18.19.29: + resolution: {integrity: sha512-5pAX7ggTmWZdhUrhRWLPf+5oM7F80bcKVCBbr0zwEkTNzTJL2CWQjznpFgHYy6GrzkYi2Yjy7DHKoynFxqPV8g==} dependencies: undici-types: 5.26.5 dev: true - /@types/node@20.11.16: - resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} + /@types/node@20.12.4: + resolution: {integrity: sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==} dependencies: undici-types: 5.26.5 dev: true @@ -2435,7 +2532,7 @@ packages: /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.12.4 dev: true /@types/scheduler@0.16.8: @@ -2479,7 +2576,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.3): resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2491,24 +2588,24 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.57.0)(typescript@5.4.3) '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4(supports-color@5.5.0) - eslint: 8.56.0 + eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.0 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.3) + typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/parser@6.14.0(eslint@8.57.0)(typescript@5.4.3): resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2520,11 +2617,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.14.0 '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.3) '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4(supports-color@5.5.0) - eslint: 8.56.0 - typescript: 5.3.3 + eslint: 8.57.0 + typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: true @@ -2545,7 +2642,7 @@ packages: '@typescript-eslint/visitor-keys': 6.14.0 dev: true - /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@6.14.0(eslint@8.57.0)(typescript@5.4.3): resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2555,12 +2652,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.57.0)(typescript@5.4.3) debug: 4.3.4(supports-color@5.5.0) - eslint: 8.56.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + eslint: 8.57.0 + ts-api-utils: 1.0.3(typescript@5.4.3) + typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: true @@ -2575,7 +2672,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.3): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2590,13 +2687,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + tsutils: 3.21.0(typescript@5.4.3) + typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.4.3): resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2611,25 +2708,25 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.3) + typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.3): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - eslint: 8.56.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) + eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -2637,19 +2734,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/utils@6.14.0(eslint@8.57.0)(typescript@5.4.3): resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 6.14.0 '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - eslint: 8.56.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.3) + eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -2676,7 +2773,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.1.0(eslint@8.56.0)(jest@29.7.0)(prettier@3.1.1)(typescript@5.3.3): + /@vercel/style-guide@5.1.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.3): resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} engines: {node: '>=16'} peerDependencies: @@ -2694,28 +2791,28 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.23.6 - '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.56.0) + '@babel/core': 7.24.4 + '@babel/eslint-parser': 7.23.3(@babel/core@7.24.4)(eslint@8.57.0) '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - eslint-config-prettier: 9.1.0(eslint@8.56.0) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + eslint: 8.57.0 + eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.56.0)(typescript@5.3.3) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.57.0) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.3) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0) + eslint-plugin-react: 7.33.2(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) + eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.3) eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.56.0) - prettier: 3.1.1 - prettier-plugin-packagejson: 2.4.7(prettier@3.1.1) - typescript: 5.3.3 + eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) + prettier: 3.2.5 + prettier-plugin-packagejson: 2.4.7(prettier@3.2.5) + typescript: 5.4.3 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -2746,7 +2843,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -2754,7 +2851,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -2876,7 +2973,7 @@ packages: /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 is-array-buffer: 3.0.2 dev: true @@ -2884,10 +2981,10 @@ packages: resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 is-string: 1.0.7 dev: true @@ -2900,18 +2997,18 @@ packages: resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 dev: true /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 @@ -2921,7 +3018,7 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 @@ -2930,11 +3027,11 @@ packages: /array.prototype.tosorted@1.1.2: resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 dev: true /arraybuffer.prototype.slice@1.0.2: @@ -2942,10 +3039,10 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 dev: true @@ -3025,17 +3122,17 @@ packages: dequal: 2.0.3 dev: true - /babel-jest@29.7.0(@babel/core@7.23.6): + /babel-jest@29.7.0(@babel/core@7.24.4): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.6) + babel-preset-jest: 29.6.3(@babel/core@7.24.4) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3060,8 +3157,8 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.4 dev: true @@ -3075,50 +3172,50 @@ packages: resolve: 1.22.8 dev: false - /babel-plugin-styled-components@2.1.4(@babel/core@7.23.9)(styled-components@5.3.11): + /babel-plugin-styled-components@2.1.4(@babel/core@7.24.4)(styled-components@5.3.11): resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} peerDependencies: styled-components: '>= 2' dependencies: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.15 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.4) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) transitivePeerDependencies: - '@babel/core' dev: false - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.23.6): + '@babel/core': 7.24.4 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.24.4): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) dev: true /balanced-match@1.0.2: @@ -3301,12 +3398,15 @@ packages: responselike: 2.0.1 dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 dev: true /callsites@3.1.0: @@ -3693,7 +3793,7 @@ packages: yaml: 1.10.2 dev: false - /create-jest@29.7.0(@types/node@20.10.6): + /create-jest@29.7.0(@types/node@20.12.4): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3702,7 +3802,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.10.6) + jest-config: 29.7.0(@types/node@20.12.4) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3794,7 +3894,7 @@ packages: chalk: 2.4.2 commander: 2.20.3 core-js: 3.36.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) fast-json-patch: 3.1.1 get-stdin: 6.0.0 http-proxy-agent: 5.0.0 @@ -3869,17 +3969,6 @@ packages: ms: 2.1.3 dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -3969,13 +4058,13 @@ packages: engines: {node: '>=10'} dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 dev: true /define-lazy-prop@3.0.0: @@ -3987,8 +4076,8 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: true @@ -4195,18 +4284,18 @@ packages: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + call-bind: 1.0.7 es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 internal-slot: 1.0.6 is-array-buffer: 3.0.2 is-callable: 1.2.7 @@ -4233,19 +4322,31 @@ packages: which-typed-array: 1.1.13 dev: true + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + /es-iterator-helpers@1.0.15: resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} dependencies: asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 es-set-tostringtag: 2.0.2 function-bind: 1.1.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 internal-slot: 1.0.6 iterator.prototype: 1.1.2 @@ -4256,15 +4357,15 @@ packages: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-tostringtag: 1.0.0 - hasown: 2.0.0 + hasown: 2.0.2 dev: true /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 dev: true /es-to-primitive@1.2.1: @@ -4276,6 +4377,48 @@ packages: is-symbol: 1.0.4 dev: true + /esbuild-plugin-d.ts@1.2.3(typescript@5.4.3): + resolution: {integrity: sha512-JkNqcCTkv0N39izAOLaiAQcFA6DfbhDkef1ZO6NvnHtTT+7i+4VHjCcAM2yFslRTBTK1TuF41FLSwWvGm88N7w==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + dependencies: + chalk: 4.1.2 + lodash.merge: 4.6.2 + typescript: 5.4.3 + dev: true + + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -4315,7 +4458,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-next@14.0.4(eslint@8.56.0)(typescript@5.3.3): + /eslint-config-next@14.0.4(eslint@8.57.0)(typescript@5.4.3): resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -4326,36 +4469,36 @@ packages: dependencies: '@next/eslint-plugin-next': 14.0.4 '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - typescript: 5.3.3 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-react: 7.33.2(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) + typescript: 5.4.3 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color dev: true - /eslint-config-prettier@9.1.0(eslint@8.56.0): + /eslint-config-prettier@9.1.0(eslint@8.57.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.56.0 + eslint: 8.57.0 dev: true - /eslint-config-turbo@1.11.2(eslint@8.56.0): + /eslint-config-turbo@1.11.2(eslint@8.57.0): resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} peerDependencies: eslint: '>6.6.0' dependencies: - eslint: 8.56.0 - eslint-plugin-turbo: 1.11.2(eslint@8.56.0) + eslint: 8.57.0 + eslint-plugin-turbo: 1.11.2(eslint@8.57.0) dev: true /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): @@ -4364,7 +4507,7 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.57.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -4377,7 +4520,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4386,9 +4529,9 @@ packages: dependencies: debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.15.0 - eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint: 8.57.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -4400,7 +4543,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4409,9 +4552,9 @@ packages: dependencies: debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.15.0 - eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint: 8.57.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -4423,7 +4566,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4444,16 +4587,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) debug: 3.2.7 - eslint: 8.56.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4474,26 +4617,26 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint: 8.57.0 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.56.0 + eslint: 8.57.0 ignore: 5.3.0 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4503,17 +4646,17 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.56.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - hasown: 2.0.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 @@ -4528,7 +4671,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4538,17 +4681,17 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.56.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - hasown: 2.0.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 @@ -4563,7 +4706,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3): + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.3): resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4576,16 +4719,16 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - jest: 29.7.0(@types/node@20.10.6) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + eslint: 8.57.0 + jest: 29.7.0(@types/node@20.12.4) transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} engines: {node: '>=4.0'} peerDependencies: @@ -4601,8 +4744,8 @@ packages: damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - hasown: 2.0.0 + eslint: 8.57.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 @@ -4615,7 +4758,7 @@ packages: engines: {node: '>=6'} dev: true - /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.56.0): + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0): resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} peerDependencies: eslint: '>=7' @@ -4624,20 +4767,20 @@ packages: eslint-plugin-jest: optional: true dependencies: - eslint: 8.56.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3) + eslint: 8.57.0 + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.3) dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.56.0 + eslint: 8.57.0 dev: true - /eslint-plugin-react@7.33.2(eslint@8.56.0): + /eslint-plugin-react@7.33.2(eslint@8.57.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: @@ -4648,7 +4791,7 @@ packages: array.prototype.tosorted: 1.1.2 doctrine: 2.1.0 es-iterator-helpers: 1.0.15 - eslint: 8.56.0 + eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -4662,22 +4805,22 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.56.0): + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.57.0): resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.56.0 + eslint: 8.57.0 dev: true - /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.3.3): + /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.3): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript @@ -4690,26 +4833,26 @@ packages: '@microsoft/tsdoc-config': 0.16.2 dev: true - /eslint-plugin-turbo@1.11.2(eslint@8.56.0): + /eslint-plugin-turbo@1.11.2(eslint@8.57.0): resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} peerDependencies: eslint: '>6.6.0' dependencies: dotenv: 16.0.3 - eslint: 8.56.0 + eslint: 8.57.0 dev: true - /eslint-plugin-unicorn@48.0.1(eslint@8.56.0): + /eslint-plugin-unicorn@48.0.1(eslint@8.57.0): resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} engines: {node: '>=16'} peerDependencies: eslint: '>=8.44.0' dependencies: '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) ci-info: 3.9.0 clean-regexp: 1.0.0 - eslint: 8.56.0 + eslint: 8.57.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -4749,23 +4892,23 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -5182,7 +5325,7 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 functions-have-names: 1.2.3 @@ -5216,13 +5359,15 @@ packages: engines: {node: '>=18'} dev: true - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 dev: true /get-package-type@0.1.0: @@ -5261,8 +5406,8 @@ packages: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 dev: true /get-tsconfig@4.7.2: @@ -5277,7 +5422,7 @@ packages: dependencies: basic-ftp: 5.0.4 data-uri-to-buffer: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -5296,8 +5441,8 @@ packages: resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} dev: true - /gitmoji-cli@9.1.0: - resolution: {integrity: sha512-/pzhoYW1O+PU3GoZfFfsVng8oTYsIPzeb/YDx8/NLbQCzFAAdQ+zLSVya3PPPP9PoMCerilYkma/gpkN/FSk+A==} + /gitmoji-cli@9.2.0: + resolution: {integrity: sha512-U/uKNO+Z4tcFdP5Ip2FBihsGgTvyX8RJVx4twgnv6JB+MKcvqjIE2RiJvxE2uu7dq4wafTzGDpHL3KDiJV1hxQ==} engines: {node: '>=18'} hasBin: true dependencies: @@ -5305,9 +5450,9 @@ packages: conf: 12.0.0 execa: 8.0.1 fuse.js: 7.0.0 - inquirer: 9.2.14 - inquirer-autocomplete-prompt: 3.0.1(inquirer@9.2.14) - meow: 12.1.1 + inquirer: 9.2.17 + inquirer-autocomplete-prompt: 3.0.1(inquirer@9.2.17) + meow: 13.2.0 node-fetch: 3.3.2 ora: 8.0.1 path-exists: 5.0.0 @@ -5432,7 +5577,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 dev: true /got@11.8.6: @@ -5505,14 +5650,14 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} dev: true @@ -5528,8 +5673,8 @@ packages: has-symbols: 1.0.3 dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -5571,7 +5716,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -5581,7 +5726,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -5607,7 +5752,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -5616,7 +5761,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -5647,7 +5792,7 @@ packages: '@types/node': 17.0.45 chalk: 4.1.2 change-case: 3.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) degit: 2.8.4 ejs: 3.1.9 enquirer: 2.4.1 @@ -5748,7 +5893,7 @@ packages: engines: {node: '>=10'} dev: true - /inquirer-autocomplete-prompt@3.0.1(inquirer@9.2.14): + /inquirer-autocomplete-prompt@3.0.1(inquirer@9.2.17): resolution: {integrity: sha512-DQBXwX2fVQPVUzu4v4lGgtNgyjcX2+rTyphb2MeSOQh3xUayKAfHAF4y0KgsMi06m6ZiR3xIOdzMZMfQgX2m9w==} engines: {node: '>=16'} peerDependencies: @@ -5756,17 +5901,17 @@ packages: dependencies: ansi-escapes: 6.2.0 figures: 5.0.0 - inquirer: 9.2.14 + inquirer: 9.2.17 picocolors: 1.0.0 run-async: 2.4.1 rxjs: 7.8.1 dev: true - /inquirer@9.2.14: - resolution: {integrity: sha512-4ByIMt677Iz5AvjyKrDpzaepIyMewNvDcvwpVVRZNmy9dLakVoVgdCHZXbK1SlVJra1db0JZ6XkJyHsanpdrdQ==} + /inquirer@9.2.17: + resolution: {integrity: sha512-Vr3Ia2ud5sGnioURkE69endl4SkeJcMzTF6SosKcX5GALJfId7C+JvO5ZZb6y1LOXnEofCPbwzoQ1q0e8Gaduw==} engines: {node: '>=18'} dependencies: - '@ljharb/through': 2.3.12 + '@ljharb/through': 2.3.13 ansi-escapes: 4.3.2 chalk: 5.3.0 cli-cursor: 3.1.0 @@ -5787,8 +5932,8 @@ packages: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 + get-intrinsic: 1.2.4 + hasown: 2.0.2 side-channel: 1.0.4 dev: true @@ -5813,8 +5958,8 @@ packages: /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-typed-array: 1.1.12 dev: true @@ -5849,7 +5994,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-tostringtag: 1.0.0 dev: true @@ -5868,7 +6013,7 @@ packages: /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -5902,7 +6047,7 @@ packages: /is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-fullwidth-code-point@3.0.0: @@ -6040,7 +6185,7 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-tostringtag: 1.0.0 dev: true @@ -6051,7 +6196,7 @@ packages: /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-stream@2.0.1: @@ -6124,14 +6269,14 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 dev: true /is-windows@1.0.2: @@ -6162,8 +6307,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.6 - '@babel/parser': 7.23.6 + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -6175,8 +6320,8 @@ packages: resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.6 - '@babel/parser': 7.23.6 + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.5.4 @@ -6197,7 +6342,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6216,7 +6361,7 @@ packages: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.4 set-function-name: 2.0.1 @@ -6259,7 +6404,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.6 + '@types/node': 20.12.4 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -6280,7 +6425,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.10.6): + /jest-cli@29.7.0(@types/node@20.12.4): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6294,10 +6439,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.10.6) + create-jest: 29.7.0(@types/node@20.12.4) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.10.6) + jest-config: 29.7.0(@types/node@20.12.4) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6308,7 +6453,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.10.6): + /jest-config@29.7.0(@types/node@20.12.4): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -6320,11 +6465,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.6 - babel-jest: 29.7.0(@babel/core@7.23.6) + '@types/node': 20.12.4 + babel-jest: 29.7.0(@babel/core@7.24.4) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -6383,7 +6528,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.6 + '@types/node': 20.12.4 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -6399,7 +6544,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.10.6 + '@types/node': 20.12.4 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6434,7 +6579,7 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -6450,7 +6595,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.6 + '@types/node': 20.12.4 jest-util: 29.7.0 dev: true @@ -6505,7 +6650,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.6 + '@types/node': 20.12.4 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6536,7 +6681,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.6 + '@types/node': 20.12.4 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -6559,15 +6704,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.6 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) - '@babel/types': 7.23.6 + '@babel/core': 7.24.4 + '@babel/generator': 7.24.4 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.4) + '@babel/types': 7.24.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -6588,7 +6733,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.6 + '@types/node': 20.12.4 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6613,7 +6758,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.6 + '@types/node': 20.12.4 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6625,13 +6770,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.12.4 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.10.6): + /jest@29.7.0(@types/node@20.12.4): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6644,7 +6789,7 @@ packages: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.10.6) + jest-cli: 29.7.0(@types/node@20.12.4) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6866,7 +7011,7 @@ packages: dependencies: chalk: 5.3.0 commander: 11.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) execa: 8.0.1 lilconfig: 3.0.0 listr2: 8.0.0 @@ -7114,9 +7259,9 @@ packages: resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} dev: false - /meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} + /meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} dev: true /meow@6.1.1: @@ -7284,7 +7429,7 @@ packages: engines: {node: '>= 0.4.0'} dev: true - /next@14.0.4(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0): + /next@14.0.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} engines: {node: '>=18.17.0'} hasBin: true @@ -7307,7 +7452,7 @@ packages: postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.23.9)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.24.4)(react@18.2.0) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 14.0.4 @@ -7435,7 +7580,7 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -7445,7 +7590,7 @@ packages: resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -7454,7 +7599,7 @@ packages: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -7462,10 +7607,10 @@ packages: /object.groupby@1.0.1: resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 dev: true /object.hasown@1.1.3: @@ -7479,7 +7624,7 @@ packages: resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -7629,7 +7774,7 @@ packages: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) get-uri: 6.0.3 http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 @@ -7692,7 +7837,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -7849,7 +7994,7 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-packagejson@2.4.7(prettier@3.1.1): + /prettier-plugin-packagejson@2.4.7(prettier@3.2.5): resolution: {integrity: sha512-/n1HGcBbuJyTlD3tb2/tW1mT5WIR6FCo+bAijHF6pNoSBf8YoxoskawjSY2ku9/8d6mdzci7oMchziI7CYEWYg==} peerDependencies: prettier: '>= 1.16.0' @@ -7857,7 +8002,7 @@ packages: prettier: optional: true dependencies: - prettier: 3.1.1 + prettier: 3.2.5 sort-package-json: 2.6.0 synckit: 0.8.6 dev: true @@ -7868,8 +8013,8 @@ packages: hasBin: true dev: true - /prettier@3.1.1: - resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true dev: true @@ -7920,7 +8065,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 lru-cache: 7.18.3 @@ -8166,16 +8311,17 @@ packages: /reflect-metadata@0.2.1: resolution: {integrity: sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==} + deprecated: This version has a critical bug in fallback handling. Please upgrade to reflect-metadata@0.2.2 or newer. dev: false /reflect.getprototypeof@1.0.4: resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 globalthis: 1.0.3 which-builtin-type: 1.1.3 dev: true @@ -8196,7 +8342,7 @@ packages: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 set-function-name: 2.0.1 dev: true @@ -8387,8 +8533,8 @@ packages: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -8400,8 +8546,8 @@ packages: /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-regex: 1.1.4 dev: true @@ -8449,23 +8595,25 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /shallowequal@1.1.0: @@ -8503,8 +8651,8 @@ packages: /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 object-inspect: 1.13.1 dev: true @@ -8582,7 +8730,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) socks: 2.7.3 transitivePeerDependencies: - supports-color @@ -8591,6 +8739,7 @@ packages: /socks@2.7.3: resolution: {integrity: sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + deprecated: please use 2.7.4 or 2.8.1 to fix package-lock issue dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 @@ -8770,10 +8919,10 @@ packages: /string.prototype.matchall@4.0.10: resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 internal-slot: 1.0.6 regexp.prototype.flags: 1.5.1 @@ -8785,7 +8934,7 @@ packages: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -8793,7 +8942,7 @@ packages: /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -8801,7 +8950,7 @@ packages: /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -8867,7 +9016,7 @@ packages: resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} dev: true - /styled-components@5.3.11(@babel/core@7.23.9)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0): + /styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0): resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} engines: {node: '>=10'} peerDependencies: @@ -8876,11 +9025,11 @@ packages: react-is: '>= 16.8.0' dependencies: '@babel/helper-module-imports': 7.22.15 - '@babel/traverse': 7.23.6(supports-color@5.5.0) + '@babel/traverse': 7.24.1(supports-color@5.5.0) '@emotion/is-prop-valid': 1.2.1 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.23.9)(styled-components@5.3.11) + babel-plugin-styled-components: 2.1.4(@babel/core@7.24.4)(styled-components@5.3.11) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 @@ -8892,7 +9041,7 @@ packages: - '@babel/core' dev: false - /styled-jsx@5.1.1(@babel/core@7.23.9)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.24.4)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -8905,7 +9054,7 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 client-only: 0.0.1 react: 18.2.0 dev: false @@ -9065,18 +9214,18 @@ packages: engines: {node: '>=8'} dev: true - /ts-api-utils@1.0.3(typescript@5.3.3): + /ts-api-utils@1.0.3(typescript@5.4.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.3 dev: true - /ts-jest@29.1.1(@babel/core@7.23.6)(jest@29.7.0)(typescript@5.3.3): - resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /ts-jest@29.1.2(@babel/core@7.24.4)(esbuild@0.20.2)(jest@29.7.0)(typescript@5.4.3): + resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} + engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' @@ -9095,20 +9244,21 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.24.4 bs-logger: 0.2.6 + esbuild: 0.20.2 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.10.6) + jest: 29.7.0(@types/node@20.12.4) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.5.4 - typescript: 5.3.3 + typescript: 5.4.3 yargs-parser: 21.1.1 dev: true - /ts-node@10.9.2(@types/node@20.11.16)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.12.4)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -9127,14 +9277,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.16 + '@types/node': 20.12.4 acorn: 8.11.2 acorn-walk: 8.3.1 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.3 + typescript: 5.4.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -9166,14 +9316,14 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.3.3): + /tsutils@3.21.0(typescript@5.4.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.3.3 + typescript: 5.4.3 dev: true /tty-table@4.2.3: @@ -9190,64 +9340,64 @@ packages: yargs: 17.7.2 dev: true - /turbo-darwin-64@1.12.3: - resolution: {integrity: sha512-dDglIaux+A4jOnB9CDH69sujmrnuLJLrKw1t3J+if6ySlFuxSwC++gDq9TVuOZo2+S7lFkGh+x5ytn3wp+jE8Q==} + /turbo-darwin-64@1.13.2: + resolution: {integrity: sha512-CCSuD8CfmtncpohCuIgq7eAzUas0IwSbHfI8/Q3vKObTdXyN8vAo01gwqXjDGpzG9bTEVedD0GmLbD23dR0MLA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@1.12.3: - resolution: {integrity: sha512-5TqqeujEyHMoVUWGzSzUl5ERSg7HDCdbU3gBs5ziWTpFRpeJ/+Y15kYyZJcMQcubRIH3Y1hL/yA5IhlGdgXOMA==} + /turbo-darwin-arm64@1.13.2: + resolution: {integrity: sha512-0HySm06/D2N91rJJ89FbiI/AodmY8B3WDSFTVEpu2+8spUw7hOJ8okWOT0e5iGlyayUP9gr31eOeL3VFZkpfCw==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@1.12.3: - resolution: {integrity: sha512-yUreU+/gq4vlBtcdyfjz7slwz4zM1RG8sSXvyHmAS+QXqSrGkegg4qLl2fRbv/c3EyA/XbfcZuD6tcrXkejr6g==} + /turbo-linux-64@1.13.2: + resolution: {integrity: sha512-7HnibgbqZrjn4lcfIouzlPu8ZHSBtURG4c7Bedu7WJUDeZo+RE1crlrQm8wuwO54S0siYqUqo7GNHxu4IXbioQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@1.12.3: - resolution: {integrity: sha512-XRwAsp2eRSqZmaMVNrmHoKqofeJMuD87zmefZLTRAObh38hIwKgyl2QRsJIbteob5RN77yFbv3lAJ36UIY5h7w==} + /turbo-linux-arm64@1.13.2: + resolution: {integrity: sha512-sUq4dbpk6SNKg/Hkwn256Vj2AEYSQdG96repio894h5/LEfauIK2QYiC/xxAeW3WBMc6BngmvNyURIg7ltrePg==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@1.12.3: - resolution: {integrity: sha512-CPnRfnUCtmFeShOtUdMCthySjmyHaoTyh9JueiYFvtCNeO3WfDMj63dpOQstQWHdJFYmIrIGfhAclcds9ePQYA==} + /turbo-windows-64@1.13.2: + resolution: {integrity: sha512-DqzhcrciWq3dpzllJR2VVIyOhSlXYCo4mNEWl98DJ3FZ08PEzcI3ceudlH6F0t/nIcfSItK1bDP39cs7YoZHEA==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@1.12.3: - resolution: {integrity: sha512-cYA/wlzvp4vlCNHYJ2AjNS3FLXWwUC/5CJompBkTeKFFB6AviE/iLkbIhFikCVSNXZk/3AGanpMUXIkt3bdlwg==} + /turbo-windows-arm64@1.13.2: + resolution: {integrity: sha512-WnPMrwfCXxK69CdDfS1/j2DlzcKxSmycgDAqV0XCYpK/812KB0KlvsVAt5PjEbZGXkY88pCJ1BLZHAjF5FcbqA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@1.12.3: - resolution: {integrity: sha512-a6q8I0TK9ohACYbkmxzG/JYPuDC4VCvfmXLTlf321qQ4BIAhoyaOj/O2g+zJ6L1vNYnZ82G4LrbMfgLLngbLsg==} + /turbo@1.13.2: + resolution: {integrity: sha512-rX/d9f4MgRT3yK6cERPAkfavIxbpBZowDQpgvkYwGMGDQ0Nvw1nc0NVjruE76GrzXQqoxR1UpnmEP54vBARFHQ==} hasBin: true optionalDependencies: - turbo-darwin-64: 1.12.3 - turbo-darwin-arm64: 1.12.3 - turbo-linux-64: 1.12.3 - turbo-linux-arm64: 1.12.3 - turbo-windows-64: 1.12.3 - turbo-windows-arm64: 1.12.3 + turbo-darwin-64: 1.13.2 + turbo-darwin-arm64: 1.13.2 + turbo-linux-64: 1.13.2 + turbo-linux-arm64: 1.13.2 + turbo-windows-64: 1.13.2 + turbo-windows-arm64: 1.13.2 dev: true /type-check@0.4.0: @@ -9311,8 +9461,8 @@ packages: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-typed-array: 1.1.12 dev: true @@ -9320,9 +9470,9 @@ packages: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 + has-proto: 1.0.3 is-typed-array: 1.1.12 dev: true @@ -9331,16 +9481,16 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 + has-proto: 1.0.3 is-typed-array: 1.1.12 dev: true /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 is-typed-array: 1.1.12 dev: true @@ -9351,8 +9501,8 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.3: + resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -9365,7 +9515,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -9475,7 +9625,7 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 dev: true @@ -9594,7 +9744,7 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 @@ -9788,7 +9938,7 @@ packages: dependencies: '@types/fs-extra': 11.0.4 '@types/minimist': 1.2.5 - '@types/node': 18.19.3 + '@types/node': 18.19.29 '@types/ps-tree': 1.1.6 '@types/which': 3.0.3 chalk: 5.3.0 diff --git a/turbo.json b/turbo.json index 98426dd75..2e0f02dc0 100644 --- a/turbo.json +++ b/turbo.json @@ -3,14 +3,14 @@ "pipeline": { "build": { "dependsOn": ["^build"], - "outputs": ["lib/**"], - "inputs": ["src/**/*.ts"] + "outputs": ["lib/**", ".next/**"], + "inputs": ["src/**/*.ts", "index.ts"] }, "lint": { - "dependsOn": ["build", "^lint"] + "dependsOn": ["^build"] }, "lint:fix": { - "dependsOn": ["^lint:fix"] + "dependsOn": ["^build"] }, "prettier": { "dependsOn": ["^prettier"] @@ -19,22 +19,22 @@ "dependsOn": ["^prettier:fix"] }, "dev": { - "dependsOn": ["build"], + "dependsOn": ["^build"], "cache": false, "persistent": true }, "test": { - "dependsOn": ["build"], - "outputs": [], + "dependsOn": ["^build"], + "outputs": ["coverage/**"], "inputs": ["src/**/*.ts", "tests/**/*.ts"] }, "test:coverage": { - "dependsOn": ["build", "lint"], + "dependsOn": ["^build"], "outputs": [], "inputs": ["src/**/*.ts", "tests/**/*.ts"] }, "typecheck": { - "dependsOn": ["build", "^typecheck"] + "dependsOn": ["^build", "^typecheck"] }, "health-check": { "dependsOn": ["build", "prettier", "lint", "typecheck"] From b1babbddcfaed94c34894af9764db3232e4b7ef3 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 5 Apr 2024 14:29:19 +0200 Subject: [PATCH 152/253] =?UTF-8?q?=F0=9F=91=B7=20(release):=20Publish=20t?= =?UTF-8?q?o=20npmjs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 31 ++++ .github/workflows/version.yml | 9 +- package.json | 11 +- pnpm-lock.yaml | 320 ++++++++++++---------------------- 4 files changed, 153 insertions(+), 218 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..d036c7532 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,31 @@ +name: publish npm packages +on: + push: + branches: + - develop + +env: + FORCE_COLOR: "1" + +jobs: + publish: + environment: Production + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: ./.github/actions/setup-toolchain-composite + + - name: install dependencies + run: pnpm install + + - name: build libraries + run: pnpm build + + - name: publish + uses: changesets/action@v1 + with: + publish: pnpm release + env: + GITHUB_TOKEN: ${{ github.token }} + NPM_TOKEN: ${{ secrets.NPMJS_TOKEN }} diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index d0eeec9ef..15bd09136 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -18,9 +18,14 @@ jobs: - name: install dependencies run: pnpm install - - name: create release pull request + - name: build libraries + run: pnpm build + + - name: create release pull request or publish uses: changesets/action@v1 with: version: pnpm bump + commit: "🔖 (release): versioning packages" + title: "🔖 (release) [NO-ISSUE]: versioning packages" env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ github.token }} diff --git a/package.json b/package.json index 97c519b85..6db5d0880 100644 --- a/package.json +++ b/package.json @@ -42,22 +42,15 @@ "gitmoji-cli": "^9.2.0", "hygen": "^6.2.11", "jest": "^29.7.0", - "lint-staged": "^15.2.0", "prettier": "^3.2.5", "rimraf": "^5.0.5", "ts-jest": "^29.1.2", "tsc-alias": "^1.8.8", "turbo": "^1.13.2", - "typescript": "^5.4.3", + "typescript": "^5.4.4", "zx": "^7.2.3" }, - "lint-staged": { - "*.ts": [ - "eslint --fix", - "prettier --write" - ] - }, - "packageManager": "pnpm@8.8.0", + "packageManager": "pnpm@8.15.6", "engines": { "node": ">=18" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5b2ae33f..c86222347 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,7 +31,7 @@ importers: version: 0.20.2 esbuild-plugin-d.ts: specifier: ^1.2.3 - version: 1.2.3(typescript@5.4.3) + version: 1.2.3(typescript@5.4.4) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -44,9 +44,6 @@ importers: jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.12.4) - lint-staged: - specifier: ^15.2.0 - version: 15.2.0 prettier: specifier: ^3.2.5 version: 3.2.5 @@ -55,7 +52,7 @@ importers: version: 5.0.5 ts-jest: specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.24.4)(esbuild@0.20.2)(jest@29.7.0)(typescript@5.4.3) + version: 29.1.2(@babel/core@7.24.4)(esbuild@0.20.2)(jest@29.7.0)(typescript@5.4.4) tsc-alias: specifier: ^1.8.8 version: 1.8.8 @@ -63,8 +60,8 @@ importers: specifier: ^1.13.2 version: 1.13.2 typescript: - specifier: ^5.4.3 - version: 5.4.3 + specifier: ^5.4.4 + version: 5.4.4 zx: specifier: ^7.2.3 version: 7.2.3 @@ -113,7 +110,7 @@ importers: version: 10.4.16(postcss@8.4.32) eslint-config-next: specifier: 14.0.4 - version: 14.0.4(eslint@8.57.0)(typescript@5.4.3) + version: 14.0.4(eslint@8.57.0)(typescript@5.4.4) postcss: specifier: ^8 version: 8.4.32 @@ -124,13 +121,13 @@ importers: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^6.14.0 - version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.3) + version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.4) '@typescript-eslint/parser': specifier: ^6.14.0 - version: 6.14.0(eslint@8.57.0)(typescript@5.4.3) + version: 6.14.0(eslint@8.57.0)(typescript@5.4.4) '@vercel/style-guide': specifier: ^5.1.0 - version: 5.1.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.3) + version: 5.1.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -148,7 +145,7 @@ importers: devDependencies: ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) + version: 10.9.2(@types/node@20.12.4)(typescript@5.4.4) packages/config/prettier: devDependencies: @@ -224,7 +221,7 @@ importers: version: 1.0.6 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) + version: 10.9.2(@types/node@20.12.4)(typescript@5.4.4) packages/signer: dependencies: @@ -338,10 +335,10 @@ packages: '@babel/helpers': 7.24.4 '@babel/parser': 7.24.4 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1(supports-color@5.5.0) + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -457,7 +454,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1(supports-color@5.5.0) + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color @@ -620,6 +617,23 @@ packages: '@babel/parser': 7.24.4 '@babel/types': 7.24.0 + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + /@babel/traverse@7.24.1(supports-color@5.5.0): resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} @@ -636,6 +650,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: false /@babel/types@7.24.0: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} @@ -1188,7 +1203,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.0 @@ -1284,7 +1299,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2576,7 +2591,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.4): resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2588,10 +2603,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/type-utils': 6.14.0(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/type-utils': 6.14.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/utils': 6.14.0(eslint@8.57.0)(typescript@5.4.4) '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 @@ -2599,13 +2614,13 @@ packages: ignore: 5.3.0 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.3) - typescript: 5.4.3 + ts-api-utils: 1.0.3(typescript@5.4.4) + typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.14.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/parser@6.14.0(eslint@8.57.0)(typescript@5.4.4): resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2617,11 +2632,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.14.0 '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.4) '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 - typescript: 5.4.3 + typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true @@ -2642,7 +2657,7 @@ packages: '@typescript-eslint/visitor-keys': 6.14.0 dev: true - /@typescript-eslint/type-utils@6.14.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/type-utils@6.14.0(eslint@8.57.0)(typescript@5.4.4): resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2652,12 +2667,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.4) + '@typescript-eslint/utils': 6.14.0(eslint@8.57.0)(typescript@5.4.4) debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.4.3) - typescript: 5.4.3 + ts-api-utils: 1.0.3(typescript@5.4.4) + typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true @@ -2672,7 +2687,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.3): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2687,13 +2702,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.4.3) - typescript: 5.4.3 + tsutils: 3.21.0(typescript@5.4.4) + typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.14.0(typescript@5.4.3): + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.4.4): resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2708,13 +2723,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.3) - typescript: 5.4.3 + ts-api-utils: 1.0.3(typescript@5.4.4) + typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2725,7 +2740,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.4) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -2734,7 +2749,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.14.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/utils@6.14.0(eslint@8.57.0)(typescript@5.4.4): resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2745,7 +2760,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 6.14.0 '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.4) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -2773,7 +2788,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.1.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.3): + /@vercel/style-guide@5.1.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4): resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} engines: {node: '>=16'} peerDependencies: @@ -2794,25 +2809,25 @@ packages: '@babel/core': 7.24.4 '@babel/eslint-parser': 7.23.3(@babel/core@7.24.4)(eslint@8.57.0) '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.57.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.3) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.3) + eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.7(prettier@3.2.5) - typescript: 5.4.3 + typescript: 5.4.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -2843,7 +2858,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -2851,7 +2866,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -3590,14 +3605,6 @@ packages: engines: {node: '>=6'} dev: true - /cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} - dependencies: - slice-ansi: 5.0.0 - string-width: 7.0.0 - dev: true - /cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -3676,10 +3683,6 @@ packages: color-string: 1.9.1 dev: false - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true - /colors@1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} engines: {node: '>=0.1.90'} @@ -3692,11 +3695,6 @@ packages: delayed-stream: 1.0.0 dev: true - /commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - dev: true - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -3894,7 +3892,7 @@ packages: chalk: 2.4.2 commander: 2.20.3 core-js: 3.36.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 fast-json-patch: 3.1.1 get-stdin: 6.0.0 http-proxy-agent: 5.0.0 @@ -3969,6 +3967,17 @@ packages: ms: 2.1.3 dev: true + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -4377,7 +4386,7 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-plugin-d.ts@1.2.3(typescript@5.4.3): + /esbuild-plugin-d.ts@1.2.3(typescript@5.4.4): resolution: {integrity: sha512-JkNqcCTkv0N39izAOLaiAQcFA6DfbhDkef1ZO6NvnHtTT+7i+4VHjCcAM2yFslRTBTK1TuF41FLSwWvGm88N7w==} engines: {node: '>=12.0.0'} peerDependencies: @@ -4385,7 +4394,7 @@ packages: dependencies: chalk: 4.1.2 lodash.merge: 4.6.2 - typescript: 5.4.3 + typescript: 5.4.4 dev: true /esbuild@0.20.2: @@ -4458,7 +4467,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-next@14.0.4(eslint@8.57.0)(typescript@5.4.3): + /eslint-config-next@14.0.4(eslint@8.57.0)(typescript@5.4.4): resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -4469,7 +4478,7 @@ packages: dependencies: '@next/eslint-plugin-next': 14.0.4 '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -4477,7 +4486,7 @@ packages: eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - typescript: 5.4.3 + typescript: 5.4.4 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -4587,7 +4596,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -4617,7 +4626,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -4646,7 +4655,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -4681,7 +4690,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -4706,7 +4715,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.3): + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4): resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4719,8 +4728,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.4) eslint: 8.57.0 jest: 29.7.0(@types/node@20.12.4) transitivePeerDependencies: @@ -4768,7 +4777,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.3) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4) dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): @@ -4813,13 +4822,13 @@ packages: eslint: 8.57.0 dev: true - /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.3): + /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.4): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -4908,7 +4917,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -4999,10 +5008,6 @@ packages: through: 2.3.8 dev: true - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true - /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -5422,7 +5427,7 @@ packages: dependencies: basic-ftp: 5.0.4 data-uri-to-buffer: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -5716,7 +5721,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -5726,7 +5731,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -5752,7 +5757,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -5761,7 +5766,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -5792,7 +5797,7 @@ packages: '@types/node': 17.0.45 chalk: 4.1.2 change-case: 3.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 degit: 2.8.4 ejs: 3.1.9 enquirer: 2.4.1 @@ -6055,18 +6060,6 @@ packages: engines: {node: '>=8'} dev: true - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true - - /is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} - dependencies: - get-east-asian-width: 1.2.0 - dev: true - /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} @@ -6342,7 +6335,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6996,45 +6989,9 @@ packages: immediate: 3.0.6 dev: false - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - dev: true - /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /lint-staged@15.2.0: - resolution: {integrity: sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==} - engines: {node: '>=18.12.0'} - hasBin: true - dependencies: - chalk: 5.3.0 - commander: 11.1.0 - debug: 4.3.4(supports-color@5.5.0) - execa: 8.0.1 - lilconfig: 3.0.0 - listr2: 8.0.0 - micromatch: 4.0.5 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /listr2@8.0.0: - resolution: {integrity: sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==} - engines: {node: '>=18.0.0'} - dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.0.0 - rfdc: 1.3.0 - wrap-ansi: 9.0.0 - dev: true - /load-yaml-file@0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} engines: {node: '>=6'} @@ -7140,17 +7097,6 @@ packages: is-unicode-supported: 1.3.0 dev: true - /log-update@6.0.0: - resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} - engines: {node: '>=18'} - dependencies: - ansi-escapes: 6.2.0 - cli-cursor: 4.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 - dev: true - /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -7774,7 +7720,7 @@ packages: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 get-uri: 6.0.3 http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 @@ -7919,12 +7865,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - dev: true - /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -8065,7 +8005,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 lru-cache: 7.18.3 @@ -8474,10 +8414,6 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: true - /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -8685,22 +8621,6 @@ packages: engines: {node: '>=12'} dev: true - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - dev: true - - /slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} - engines: {node: '>=18'} - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 - dev: true - /smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -8730,7 +8650,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 socks: 2.7.3 transitivePeerDependencies: - supports-color @@ -8876,11 +8796,6 @@ packages: engines: {node: '>=4'} dev: true - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true - /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -9214,16 +9129,16 @@ packages: engines: {node: '>=8'} dev: true - /ts-api-utils@1.0.3(typescript@5.4.3): + /ts-api-utils@1.0.3(typescript@5.4.4): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.3 + typescript: 5.4.4 dev: true - /ts-jest@29.1.2(@babel/core@7.24.4)(esbuild@0.20.2)(jest@29.7.0)(typescript@5.4.3): + /ts-jest@29.1.2(@babel/core@7.24.4)(esbuild@0.20.2)(jest@29.7.0)(typescript@5.4.4): resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -9254,11 +9169,11 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.5.4 - typescript: 5.4.3 + typescript: 5.4.4 yargs-parser: 21.1.1 dev: true - /ts-node@10.9.2(@types/node@20.12.4)(typescript@5.4.3): + /ts-node@10.9.2(@types/node@20.12.4)(typescript@5.4.4): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -9284,7 +9199,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.3 + typescript: 5.4.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -9316,14 +9231,14 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.4.3): + /tsutils@3.21.0(typescript@5.4.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.3 + typescript: 5.4.4 dev: true /tty-table@4.2.3: @@ -9501,8 +9416,8 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript@5.4.3: - resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} + /typescript@5.4.4: + resolution: {integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -9806,15 +9721,6 @@ packages: strip-ansi: 7.1.0 dev: true - /wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} - dependencies: - ansi-styles: 6.2.1 - string-width: 7.0.0 - strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} From 0f2e079bfc1560adbc4a98c377540a1b2469ce2f Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 5 Apr 2024 15:59:34 +0200 Subject: [PATCH 153/253] =?UTF-8?q?=F0=9F=93=9D=20(tools):=20Update=20alia?= =?UTF-8?q?s=20esbuild=20plugin=20with=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/config/esbuild/plugins/alias.js | 9 +++++++++ packages/config/typescript/package.json | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/config/esbuild/plugins/alias.js b/packages/config/esbuild/plugins/alias.js index 22714b83a..ae16a59d1 100644 --- a/packages/config/esbuild/plugins/alias.js +++ b/packages/config/esbuild/plugins/alias.js @@ -1,5 +1,14 @@ const path = require("path"); +/** + * Alias Plugin for Esbuild (copied from Ledger Live) + * + * Replace a string by another string in the import path, should match the same + * config as the tsconfig.json paths. + * @param {*} mappings + * @example { "@root": path.join(__dirname, "..") } will replace root by the specicified path + * @returns void + */ module.exports = (mappings) => ({ name: "Alias", setup(build) { diff --git a/packages/config/typescript/package.json b/packages/config/typescript/package.json index 4ae43d06f..fa20f8a78 100644 --- a/packages/config/typescript/package.json +++ b/packages/config/typescript/package.json @@ -3,8 +3,8 @@ "version": "1.0.0", "private": true, "files": [ - "tsconfig.json", - "tsconfig.json" + "sdk.json", + "web.json" ], "devDependencies": { "@tsconfig/recommended": "^1.0.3", From 29c9f478d98db59403412f9e8071f9324b15d0a0 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 2 Apr 2024 15:04:14 +0200 Subject: [PATCH 154/253] :truck: (core): Rename FramerService to ApduSenderService --- ...{FramerService.ts => ApduSenderService.ts} | 2 +- .../service/DefaultApduSenderService.stub.ts | 22 +++++++++++++ ...st.ts => DefaultApduSenderService.test.ts} | 32 +++++++++---------- ...Service.ts => DefaultApduSenderService.ts} | 8 ++--- .../device-session/utils/FramerUtils.ts | 2 +- 5 files changed, 44 insertions(+), 22 deletions(-) rename packages/core/src/internal/device-session/service/{FramerService.ts => ApduSenderService.ts} (74%) create mode 100644 packages/core/src/internal/device-session/service/DefaultApduSenderService.stub.ts rename packages/core/src/internal/device-session/service/{DefaultFramerService.test.ts => DefaultApduSenderService.test.ts} (91%) rename packages/core/src/internal/device-session/service/{DefaultFramerService.ts => DefaultApduSenderService.ts} (95%) diff --git a/packages/core/src/internal/device-session/service/FramerService.ts b/packages/core/src/internal/device-session/service/ApduSenderService.ts similarity index 74% rename from packages/core/src/internal/device-session/service/FramerService.ts rename to packages/core/src/internal/device-session/service/ApduSenderService.ts index dc295ae3b..1578c0520 100644 --- a/packages/core/src/internal/device-session/service/FramerService.ts +++ b/packages/core/src/internal/device-session/service/ApduSenderService.ts @@ -1,5 +1,5 @@ import { Frame } from "@internal/device-session/model/Frame"; -export interface FramerService { +export interface ApduSenderService { getFrames: (apdu: Uint8Array) => Frame[]; } diff --git a/packages/core/src/internal/device-session/service/DefaultApduSenderService.stub.ts b/packages/core/src/internal/device-session/service/DefaultApduSenderService.stub.ts new file mode 100644 index 000000000..207e16058 --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultApduSenderService.stub.ts @@ -0,0 +1,22 @@ +import { Maybe } from "purify-ts"; + +import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; +import { + DefaultApduSenderService, + DefaultApduSenderServiceConstructorArgs, +} from "@internal/device-session/service/DefaultApduSenderService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +export const defaultApduSenderServiceStubBuilder = ( + props: Partial = {}, + loggerFactory: (tag: string) => LoggerPublisherService, +): ApduSenderService => + new DefaultApduSenderService( + { + frameSize: 64, + channel: Maybe.of(new Uint8Array([0x12, 0x34])), + padding: true, + ...props, + }, + loggerFactory, + ); diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts b/packages/core/src/internal/device-session/service/DefaultApduSenderService.test.ts similarity index 91% rename from packages/core/src/internal/device-session/service/DefaultFramerService.test.ts rename to packages/core/src/internal/device-session/service/DefaultApduSenderService.test.ts index c3157003f..6dd9567fa 100644 --- a/packages/core/src/internal/device-session/service/DefaultFramerService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduSenderService.test.ts @@ -7,11 +7,11 @@ import { Frame } from "@internal/device-session/model/Frame"; import { FrameHeader } from "@internal/device-session/model/FrameHeader"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; -import { DefaultFramerService } from "./DefaultFramerService"; +import { DefaultApduSenderService } from "./DefaultApduSenderService"; const loggerService = new DefaultLoggerPublisherService([], "frame"); -describe("DefaultFramerService", () => { +describe("DefaultApduSenderService", () => { beforeAll(() => { jest.spyOn(uuid, "v4").mockReturnValue("42"); }); @@ -20,7 +20,7 @@ describe("DefaultFramerService", () => { it("should return 1 frame", () => { // given const channel = Maybe.of(new Uint8Array([0x12, 0x34])); - const framerService = new DefaultFramerService( + const apduSenderService = new DefaultApduSenderService( { frameSize: 64, padding: true, @@ -32,7 +32,7 @@ describe("DefaultFramerService", () => { const apdu = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); // when - const frames = framerService.getFrames(apdu); + const frames = apduSenderService.getFrames(apdu); // then expect(frames).toEqual([ @@ -70,7 +70,7 @@ describe("DefaultFramerService", () => { it("should return 2 frames", () => { // given const channel = Maybe.of(new Uint8Array([0x12, 0x34])); - const framerService = new DefaultFramerService( + const apduSenderService = new DefaultApduSenderService( { frameSize: 64, padding: true, @@ -91,7 +91,7 @@ describe("DefaultFramerService", () => { ]); // when - const frames = framerService.getFrames(apdu); + const frames = apduSenderService.getFrames(apdu); // then expect(frames).toEqual([ @@ -156,7 +156,7 @@ describe("DefaultFramerService", () => { describe("[BLE] Without padding nor channel", () => { it("should return 1 frame", () => { // given - const framerService = new DefaultFramerService( + const apduSenderService = new DefaultApduSenderService( { frameSize: 123, }, @@ -165,7 +165,7 @@ describe("DefaultFramerService", () => { const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); // when - const frames = framerService.getFrames(command); + const frames = apduSenderService.getFrames(command); // then expect(frames).toEqual([ @@ -190,7 +190,7 @@ describe("DefaultFramerService", () => { it("should return 3 frames", () => { // given - const framerService = new DefaultFramerService( + const apduSenderService = new DefaultApduSenderService( { frameSize: 10, }, @@ -202,7 +202,7 @@ describe("DefaultFramerService", () => { ]); // when - const frames = framerService.getFrames(command); + const frames = apduSenderService.getFrames(command); // then expect(frames).toEqual([ @@ -255,7 +255,7 @@ describe("DefaultFramerService", () => { describe("Errors", () => { it("should return a well formatted header with very big channel", () => { // given - const framerService = new DefaultFramerService( + const apduSenderService = new DefaultApduSenderService( { frameSize: 64, channel: Maybe.of( @@ -267,7 +267,7 @@ describe("DefaultFramerService", () => { const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); // when - const frames = framerService.getFrames(command); + const frames = apduSenderService.getFrames(command); // then expect(frames).toEqual([ @@ -292,7 +292,7 @@ describe("DefaultFramerService", () => { }); it("should return empty if packet size smaller than header size", () => { // given - const framerService = new DefaultFramerService( + const apduSenderService = new DefaultApduSenderService( { frameSize: Math.random() & 4, channel: Maybe.of(new Uint8Array([0x12, 0x34])), @@ -302,7 +302,7 @@ describe("DefaultFramerService", () => { const command = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); // when - const frames = framerService.getFrames(command); + const frames = apduSenderService.getFrames(command); // then expect(frames.length).toEqual(0); @@ -310,7 +310,7 @@ describe("DefaultFramerService", () => { it("should return empty if no apdu length", () => { // given - const framerService = new DefaultFramerService( + const apduSenderService = new DefaultApduSenderService( { // random frameSize < 0xff frameSize: Math.random() & 0xff, @@ -323,7 +323,7 @@ describe("DefaultFramerService", () => { const command = new Uint8Array([]); // when - const frames = framerService.getFrames(command); + const frames = apduSenderService.getFrames(command); // then expect(frames.length).toEqual(0); diff --git a/packages/core/src/internal/device-session/service/DefaultFramerService.ts b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts similarity index 95% rename from packages/core/src/internal/device-session/service/DefaultFramerService.ts rename to packages/core/src/internal/device-session/service/DefaultApduSenderService.ts index feb7ec894..ae5c6ca5f 100644 --- a/packages/core/src/internal/device-session/service/DefaultFramerService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts @@ -20,16 +20,16 @@ import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { SdkError } from "@root/src/api/Error"; -import type { FramerService } from "./FramerService"; +import type { ApduSenderService } from "./ApduSenderService"; -export type DefaultFramerServiceConstructorArgs = { +export type DefaultApduSenderServiceConstructorArgs = { frameSize: number; channel?: Maybe; padding?: boolean; }; @injectable() -export class DefaultFramerService implements FramerService { +export class DefaultApduSenderService implements ApduSenderService { protected _frameSize: number; protected _channel: Maybe; protected _padding: boolean; @@ -40,7 +40,7 @@ export class DefaultFramerService implements FramerService { frameSize, channel = Maybe.zero(), padding = false, - }: DefaultFramerServiceConstructorArgs, + }: DefaultApduSenderServiceConstructorArgs, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerServiceFactory: (tag: string) => LoggerPublisherService, diff --git a/packages/core/src/internal/device-session/utils/FramerUtils.ts b/packages/core/src/internal/device-session/utils/FramerUtils.ts index b8bacb434..b368de6e2 100644 --- a/packages/core/src/internal/device-session/utils/FramerUtils.ts +++ b/packages/core/src/internal/device-session/utils/FramerUtils.ts @@ -22,7 +22,7 @@ export const FramerUtils = { * * @param Uint8Array */ - bytesToNumber(array: Uint8Array) { + bytesToNumber(array: Uint8Array): number { return array.reduce( (acc, val, index) => acc + val * Math.pow(0x100, array.length - 1 - index), From 315d784780fcf44be1abf57de18124334fd2b26d Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 2 Apr 2024 15:17:24 +0200 Subject: [PATCH 155/253] :sparkles: (core): Send apdu through Device Session --- .../device-session/di/deviceSessionModule.ts | 44 +++++++++++++++++-- .../device-session/di/deviceSessionTypes.ts | 3 +- .../device-session/model/ApduResponse.stub.ts | 10 +++++ .../device-session/model/ApduResponse.ts | 2 +- .../internal/device-session/model/Session.ts | 27 +++++++++--- .../service/ApduReceiverService.ts | 4 +- .../service/DefaultApduReceiverService.ts | 17 ++++--- .../service/DefaultSessionService.ts | 8 ++-- .../device-session/service/SessionService.ts | 11 +++++ 9 files changed, 98 insertions(+), 28 deletions(-) create mode 100644 packages/core/src/internal/device-session/model/ApduResponse.stub.ts create mode 100644 packages/core/src/internal/device-session/service/SessionService.ts diff --git a/packages/core/src/internal/device-session/di/deviceSessionModule.ts b/packages/core/src/internal/device-session/di/deviceSessionModule.ts index 124150c80..fa4a07031 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionModule.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionModule.ts @@ -1,8 +1,19 @@ -import { ContainerModule } from "inversify"; +import { ContainerModule, interfaces } from "inversify"; import { Session } from "@internal/device-session/model/Session"; -import { DefaultFramerService } from "@internal/device-session/service/DefaultFramerService"; +import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; +import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; +import { + DefaultApduReceiverConstructorArgs, + DefaultApduReceiverService, +} from "@internal/device-session/service/DefaultApduReceiverService"; +import { + DefaultApduSenderService, + DefaultApduSenderServiceConstructorArgs, +} from "@internal/device-session/service/DefaultApduSenderService"; import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { deviceSessionTypes } from "./deviceSessionTypes"; @@ -22,7 +33,32 @@ export const deviceSessionModuleFactory = () => _onActivation, _onDeactivation, ) => { - bind(deviceSessionTypes.FramerService).to(DefaultFramerService); - bind(deviceSessionTypes.SessionService).to(DefaultSessionService); + bind>( + deviceSessionTypes.ApduSenderServiceFactory, + ).toFactory((context) => { + const logger = context.container.get< + (name: string) => LoggerPublisherService + >(loggerTypes.LoggerPublisherServiceFactory); + + return (args: DefaultApduSenderServiceConstructorArgs) => { + return new DefaultApduSenderService(args, logger); + }; + }); + + bind>( + deviceSessionTypes.ApduReceiverServiceFactory, + ).toFactory((context) => { + const logger = context.container.get< + (name: string) => LoggerPublisherService + >(loggerTypes.LoggerPublisherServiceFactory); + + return (args: DefaultApduReceiverConstructorArgs) => { + return new DefaultApduReceiverService(args, logger); + }; + }); + + bind(deviceSessionTypes.SessionService) + .to(DefaultSessionService) + .inSingletonScope(); }, ); diff --git a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts index 9162bd182..44b9da359 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts @@ -1,4 +1,5 @@ export const deviceSessionTypes = { - FramerService: Symbol.for("FramerService"), + ApduSenderServiceFactory: Symbol.for("ApduSenderServiceFactory"), + ApduReceiverServiceFactory: Symbol.for("ApduReceiverServiceFactory"), SessionService: Symbol.for("SessionService"), }; diff --git a/packages/core/src/internal/device-session/model/ApduResponse.stub.ts b/packages/core/src/internal/device-session/model/ApduResponse.stub.ts new file mode 100644 index 000000000..2b22a8502 --- /dev/null +++ b/packages/core/src/internal/device-session/model/ApduResponse.stub.ts @@ -0,0 +1,10 @@ +import { ApduResponse, ApduResponseConstructorArgs } from "./ApduResponse"; + +type ApduResponseStub = ( + props?: Partial, +) => ApduResponse; + +export const defaultApduResponseStubBuilder: ApduResponseStub = ({ + statusCode = Uint8Array.from([0x90, 0x00]), + data = Uint8Array.from([]), +} = {}) => new ApduResponse({ statusCode, data }); diff --git a/packages/core/src/internal/device-session/model/ApduResponse.ts b/packages/core/src/internal/device-session/model/ApduResponse.ts index 63d617ff0..851a52cc8 100644 --- a/packages/core/src/internal/device-session/model/ApduResponse.ts +++ b/packages/core/src/internal/device-session/model/ApduResponse.ts @@ -1,4 +1,4 @@ -type ApduResponseConstructorArgs = { +export type ApduResponseConstructorArgs = { statusCode: Uint8Array; data: Uint8Array; }; diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index c116c47ad..83446d4e5 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -1,20 +1,33 @@ -import { Either } from "purify-ts"; +import { EitherAsync } from "purify-ts"; import { v4 as uuidv4 } from "uuid"; +import { SdkError } from "@api/Error"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; + export type SessionId = ReturnType; /** * Represents a session with a device. */ -// [TODO] replace this code with actual implementation export class Session { - id: SessionId; + private readonly _id: SessionId; + private readonly _connectedDevice: ConnectedDevice; + + constructor({ connectedDevice }: { connectedDevice: ConnectedDevice }) { + this._id = uuidv4(); + this._connectedDevice = connectedDevice; + } + + public get id(): SessionId { + return this._id; + } - constructor() { - this.id = uuidv4(); + public get connectedDevice(): ConnectedDevice { + return this._connectedDevice; } - sendApdu(_args: Uint8Array): Promise> { - return Promise.resolve(Either.of("yolo")); + sendApdu(_args: Uint8Array): EitherAsync { + return this._connectedDevice.sendApdu(_args); } } diff --git a/packages/core/src/internal/device-session/service/ApduReceiverService.ts b/packages/core/src/internal/device-session/service/ApduReceiverService.ts index 42ba0d86e..a8407bc21 100644 --- a/packages/core/src/internal/device-session/service/ApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/ApduReceiverService.ts @@ -1,8 +1,8 @@ import { Either, Maybe } from "purify-ts"; +import { SdkError } from "@api/Error"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; -import { ReceiverApduError } from "@internal/device-session/model/Errors"; export interface ApduReceiverService { - handleFrame(apdu: Uint8Array): Either>; + handleFrame(apdu: Uint8Array): Either>; } diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts index 8cd95ead5..aaaecd91c 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts @@ -2,6 +2,7 @@ import { inject, injectable } from "inversify"; import { Either, Just, Left, Maybe, Nothing, Right } from "purify-ts"; import { v4 } from "uuid"; +import { SdkError } from "@api/Error"; import { APDU_RESPONSE_STATUS_CODE_LENGTH } from "@internal/device-session/data/ApduResponseConst"; import { APDU_DATA_LENGTH_LENGTH, @@ -19,18 +20,18 @@ import { LoggerPublisherService } from "@internal/logger-publisher/service/Logge import { ApduReceiverService } from "./ApduReceiverService"; -type DefaultReceiverConstructorArgs = { +export type DefaultApduReceiverConstructorArgs = { channel?: Maybe; }; @injectable() export class DefaultApduReceiverService implements ApduReceiverService { - private _channel: Maybe; - private _logger: LoggerPublisherService; + private readonly _channel: Maybe; + private readonly _logger: LoggerPublisherService; private _pendingFrames: Frame[]; constructor( - { channel = Maybe.zero() }: DefaultReceiverConstructorArgs, + { channel = Maybe.zero() }: DefaultApduReceiverConstructorArgs, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerModuleFactory: (tag: string) => LoggerPublisherService, ) { @@ -47,16 +48,14 @@ export class DefaultApduReceiverService implements ApduReceiverService { * * @param Uint8Array */ - public handleFrame( - apdu: Uint8Array, - ): Either> { + public handleFrame(apdu: Uint8Array): Either> { const frame = this.apduToFrame(apdu); return frame.map((value) => { this._logger.debug("handle frame", { data: { frame } }); this._pendingFrames.push(value); - const dataSize = this._pendingFrames[0]!.getHeader().getDataLength(); + const dataSize = this._pendingFrames.at(0)!.getHeader().getDataLength(); return this.getCompleteFrame(dataSize); }); } @@ -105,7 +104,7 @@ export class DefaultApduReceiverService implements ApduReceiverService { * * @param Uint8Array */ - private apduToFrame(apdu: Uint8Array): Either { + private apduToFrame(apdu: Uint8Array): Either { const channelSize = this._channel.caseOf({ Just: () => CHANNEL_LENGTH, Nothing: () => 0, diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.ts index f6bdafe7f..f7b986149 100644 --- a/packages/core/src/internal/device-session/service/DefaultSessionService.ts +++ b/packages/core/src/internal/device-session/service/DefaultSessionService.ts @@ -3,20 +3,20 @@ import { Maybe } from "purify-ts"; import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; import { Session } from "@internal/device-session/model/Session"; +import { SessionService } from "@internal/device-session/service/SessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; @injectable() -export class DefaultSessionService { - private _sessions: Session[] = []; +export class DefaultSessionService implements SessionService { + private _sessions: Session[]; private _logger: LoggerPublisherService; constructor( @inject(loggerTypes.LoggerPublisherServiceFactory) loggerModuleFactory: (tag: string) => LoggerPublisherService, - sessions: Session[], ) { - this._sessions = sessions; + this._sessions = []; this._logger = loggerModuleFactory("session"); } diff --git a/packages/core/src/internal/device-session/service/SessionService.ts b/packages/core/src/internal/device-session/service/SessionService.ts new file mode 100644 index 000000000..374eb174d --- /dev/null +++ b/packages/core/src/internal/device-session/service/SessionService.ts @@ -0,0 +1,11 @@ +import { Either } from "purify-ts"; + +import { SdkError } from "@api/Error"; +import { Session } from "@internal/device-session/model/Session"; + +export interface SessionService { + addSession(session: Session): SessionService; + getSession(sessionId: string): Either; + removeSession(sessionId: string): SessionService; + getSessions(): Session[]; +} From 0dcdadecfb9ffc05377f3c7bf1fc89d8a81ea689 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 2 Apr 2024 15:19:38 +0200 Subject: [PATCH 156/253] :sparkles: (core): Connect use case returns session id --- .../discovery/use-case/ConnectUseCase.test.ts | 11 +++--- .../discovery/use-case/ConnectUseCase.ts | 37 +++++++++++++++---- .../logger-publisher/di/loggerTypes.ts | 1 - 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts index c647ca120..7124acf6b 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts @@ -1,23 +1,21 @@ import { Left, Right } from "purify-ts"; import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; -import { DeviceModel } from "@internal/device-model/model/DeviceModel"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; +import { connectedDeviceBuilder } from "@internal/usb/model/ConnectedDevice.stub"; import { UnknownDeviceError } from "@internal/usb/model/Errors"; +import { UsbHidDeviceConnection } from "@internal/usb/model/UsbHidDeviceConnection"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { ConnectUseCase } from "./ConnectUseCase"; let transport: WebUsbHidTransport; let logger: LoggerPublisherService; +let usbHidDeviceConnection: UsbHidDeviceConnection; describe("ConnectUseCase", () => { - const stubConnectedDevice: ConnectedDevice = { - id: "", - deviceModel: {} as DeviceModel, - }; + const stubConnectedDevice = connectedDeviceBuilder("1"); const tag = "logger-tag"; beforeAll(() => { @@ -25,6 +23,7 @@ describe("ConnectUseCase", () => { transport = new WebUsbHidTransport( {} as DeviceModelDataSource, () => logger, + () => usbHidDeviceConnection({}), ); }); diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts index a21836a0c..de09780de 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -1,8 +1,12 @@ import { inject, injectable } from "inversify"; import { DeviceId } from "@internal/device-model/model/DeviceModel"; +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; +import { Session, SessionId } from "@internal/device-session/model/Session"; +import type { SessionService } from "@internal/device-session/service/SessionService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; -import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; export type ConnectUseCaseArgs = { @@ -14,19 +18,38 @@ export type ConnectUseCaseArgs = { */ @injectable() export class ConnectUseCase { + private readonly _usbHidTransport: UsbHidTransport; + private readonly _sessionService: SessionService; + private readonly _logger: LoggerPublisherService; + constructor( @inject(usbDiTypes.UsbHidTransport) - private usbHidTransport: UsbHidTransport, - // Later: @inject(usbDiTypes.BleTransport) private bleTransport: BleTransport, - ) {} + usbHidTransport: UsbHidTransport, + @inject(deviceSessionTypes.SessionService) + sessionService: SessionService, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerFactory: (tag: string) => LoggerPublisherService, + ) { + this._sessionService = sessionService; + this._usbHidTransport = usbHidTransport; + this._logger = loggerFactory("ConnectUseCase"); + } + + async execute({ deviceId }: ConnectUseCaseArgs): Promise | never { + const either = await this._usbHidTransport.connect({ deviceId }); - async execute({ deviceId }: ConnectUseCaseArgs): Promise { - const either = await this.usbHidTransport.connect({ deviceId }); return either.caseOf({ Left: (error) => { + this._logger.error("Error connecting to device", { + data: { deviceId, error }, + }); throw error; }, - Right: (connectedDevice) => connectedDevice, + Right: (connectedDevice) => { + const session = new Session({ connectedDevice }); + this._sessionService.addSession(session); + return session.id; + }, }); } } diff --git a/packages/core/src/internal/logger-publisher/di/loggerTypes.ts b/packages/core/src/internal/logger-publisher/di/loggerTypes.ts index 820a66ef5..64880ee0d 100644 --- a/packages/core/src/internal/logger-publisher/di/loggerTypes.ts +++ b/packages/core/src/internal/logger-publisher/di/loggerTypes.ts @@ -1,4 +1,3 @@ export const loggerTypes = { - LoggerPublisherService: Symbol.for("LoggerPublisherService"), LoggerPublisherServiceFactory: Symbol.for("LoggerPublisherServiceFactory"), }; From 1a730d943c7c988e6c45e6978df76fc4209d4c67 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 2 Apr 2024 15:21:01 +0200 Subject: [PATCH 157/253] :sparkles: (core): Send Apdu use case calls session --- .../core/src/internal/send/di/sendModule.ts | 4 +- .../core/src/internal/send/di/sendTypes.ts | 2 +- .../internal/send/use-case/SendApduUseCase.ts | 63 +++++++++++++++++++ .../internal/send/usecase/SendApduUseCase.ts | 39 ------------ 4 files changed, 66 insertions(+), 42 deletions(-) create mode 100644 packages/core/src/internal/send/use-case/SendApduUseCase.ts delete mode 100644 packages/core/src/internal/send/usecase/SendApduUseCase.ts diff --git a/packages/core/src/internal/send/di/sendModule.ts b/packages/core/src/internal/send/di/sendModule.ts index 879d8d57a..6fb233ebc 100644 --- a/packages/core/src/internal/send/di/sendModule.ts +++ b/packages/core/src/internal/send/di/sendModule.ts @@ -1,6 +1,6 @@ import { ContainerModule } from "inversify"; -import { SendApduUseCase } from "@internal/send/usecase/SendApduUseCase"; +import { SendApduUseCase } from "@internal/send/use-case/SendApduUseCase"; import { sendTypes } from "./sendTypes"; @@ -19,6 +19,6 @@ export const sendModuleFactory = (_args: Partial = {}) => _onActivation, _onDeactivation, ) => { - bind(sendTypes.SendService).to(SendApduUseCase); + bind(sendTypes.SendApduUseCase).to(SendApduUseCase); }, ); diff --git a/packages/core/src/internal/send/di/sendTypes.ts b/packages/core/src/internal/send/di/sendTypes.ts index 34c246651..8639ecf5e 100644 --- a/packages/core/src/internal/send/di/sendTypes.ts +++ b/packages/core/src/internal/send/di/sendTypes.ts @@ -1,3 +1,3 @@ export const sendTypes = { - SendService: Symbol.for("SendService"), + SendApduUseCase: Symbol.for("SendApduUseCase"), }; diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.ts new file mode 100644 index 000000000..d936e842b --- /dev/null +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.ts @@ -0,0 +1,63 @@ +import { inject, injectable } from "inversify"; + +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { SessionId } from "@internal/device-session/model/Session"; +import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +export type SendApduUseCaseArgs = { + sessionId: SessionId; + apdu: Uint8Array; +}; + +/** + * Sends an APDU to a connected device. + */ +@injectable() +export class SendApduUseCase { + private readonly _sessionService: DefaultSessionService; + private readonly _logger: LoggerPublisherService; + + constructor( + @inject(deviceSessionTypes.SessionService) + sessionService: DefaultSessionService, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerFactory: (tag: string) => LoggerPublisherService, + ) { + this._sessionService = sessionService; + this._logger = loggerFactory("SendApduUseCase"); + } + + async execute({ + sessionId, + apdu, + }: SendApduUseCaseArgs): Promise { + const deviceSession = this._sessionService.getSession(sessionId); + + return deviceSession.caseOf({ + Right: async (session) => { + const response = await session.sendApdu(apdu); + return response.caseOf({ + Right: (data) => { + this._logger.info("APDU sent", { data: { sessionId, apdu } }); + return data; + }, + Left: (error) => { + this._logger.error("Error sending APDU", { + data: { sessionId, apdu, error }, + }); + throw error; + }, + }); + }, + Left: () => { + this._logger.error("Error getting session", { + data: { error: deviceSession.extract() }, + }); + throw deviceSession.extract(); + }, + }); + } +} diff --git a/packages/core/src/internal/send/usecase/SendApduUseCase.ts b/packages/core/src/internal/send/usecase/SendApduUseCase.ts deleted file mode 100644 index 495958cd9..000000000 --- a/packages/core/src/internal/send/usecase/SendApduUseCase.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { inject, injectable } from "inversify"; - -import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import { SessionId } from "@internal/device-session/model/Session"; -import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; - -export type SendApduUseCaseArgs = { - sessionId: SessionId; - apdu: Uint8Array; -}; - -/** - * Sends an APDU to a connected device. - */ -@injectable() -export class SendApduUseCase { - constructor( - @inject(deviceSessionTypes.SessionService) - private sessionService: DefaultSessionService, - // @inject(loggerTypes.LoggerService) private logger: LoggerService, - ) {} - - async execute({ sessionId }: SendApduUseCaseArgs): Promise { - // [TODO] implement logging - // [SHOULD] this is temporary example code, to de replaced with actual implementation - const uint8Array = new Uint8Array([0x00, 0x00, 0x00, 0x00, 0x00]); - const deviceSession = this.sessionService.getSession(sessionId); - if (deviceSession.isLeft()) { - throw deviceSession.extract(); - } - - if (deviceSession.isRight()) { - const res = await deviceSession.extract().sendApdu(uint8Array); - return res; - } - - return; - } -} From 955157b997d70cc9b07c179ef5810507fac8988d Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 2 Apr 2024 15:22:52 +0200 Subject: [PATCH 158/253] :sparkles: (core): Send and receive response through DeviceConnection --- .../src/internal/usb/data/UsbHidConfig.ts | 3 +- .../core/src/internal/usb/di/usbDiTypes.ts | 2 + .../core/src/internal/usb/di/usbModule.ts | 49 +++++++++- .../usb/model/ConnectedDevice.stub.ts | 21 +++++ .../src/internal/usb/model/ConnectedDevice.ts | 48 +++++++++- .../core/src/internal/usb/model/Errors.ts | 20 +++-- .../src/internal/usb/model/HIDDevice.stub.ts | 18 ++++ .../usb/transport/UsbHidDeviceConnection.ts | 89 +++++++++++++++++++ .../usb/transport/WebUsbHidTransport.test.ts | 23 +++-- .../usb/transport/WebUsbHidTransport.ts | 36 ++++++-- .../usb/use-case/GetConnectedDeviceUseCase.ts | 45 ++++++++++ 11 files changed, 328 insertions(+), 26 deletions(-) create mode 100644 packages/core/src/internal/usb/model/ConnectedDevice.stub.ts create mode 100644 packages/core/src/internal/usb/model/HIDDevice.stub.ts create mode 100644 packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts create mode 100644 packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts diff --git a/packages/core/src/internal/usb/data/UsbHidConfig.ts b/packages/core/src/internal/usb/data/UsbHidConfig.ts index bd56c7d3b..97a63ddc0 100644 --- a/packages/core/src/internal/usb/data/UsbHidConfig.ts +++ b/packages/core/src/internal/usb/data/UsbHidConfig.ts @@ -1,2 +1,3 @@ // [SHOULD] Move it to device-model module -export const ledgerVendorId = 0x2c97; +export const LEDGER_VENDOR_ID = 0x2c97; +export const FRAME_SIZE = 64; diff --git a/packages/core/src/internal/usb/di/usbDiTypes.ts b/packages/core/src/internal/usb/di/usbDiTypes.ts index aea94a6d1..0f40ecfdd 100644 --- a/packages/core/src/internal/usb/di/usbDiTypes.ts +++ b/packages/core/src/internal/usb/di/usbDiTypes.ts @@ -1,3 +1,5 @@ export const usbDiTypes = { UsbHidTransport: Symbol.for("UsbHidTransport"), + UsbHidDeviceConnectionFactory: Symbol.for("UsbHidDeviceConnectionFactory"), + GetConnectedDeviceUseCase: Symbol.for("GetConnectedDeviceUseCase"), }; diff --git a/packages/core/src/internal/usb/di/usbModule.ts b/packages/core/src/internal/usb/di/usbModule.ts index 498a18075..9e5a51fa2 100644 --- a/packages/core/src/internal/usb/di/usbModule.ts +++ b/packages/core/src/internal/usb/di/usbModule.ts @@ -1,6 +1,17 @@ -import { ContainerModule } from "inversify"; +import { ContainerModule, interfaces } from "inversify"; +import { Maybe } from "purify-ts"; +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; +import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; +import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; +import { DefaultApduReceiverConstructorArgs } from "@internal/device-session/service/DefaultApduReceiverService"; +import { DefaultApduSenderServiceConstructorArgs } from "@internal/device-session/service/DefaultApduSenderService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { FRAME_SIZE } from "@internal/usb/data/UsbHidConfig"; +import { UsbHidDeviceConnection } from "@internal/usb/transport/UsbHidDeviceConnection"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; +import { GetConnectedDeviceUseCase } from "@internal/usb/use-case/GetConnectedDeviceUseCase"; import { usbDiTypes } from "./usbDiTypes"; @@ -15,6 +26,42 @@ export const usbModuleFactory = ({ // The transport needs to be a singleton to keep the internal states of the devices bind(usbDiTypes.UsbHidTransport).to(WebUsbHidTransport).inSingletonScope(); + // UsbHidDeviceConnectionFactory + bind>( + usbDiTypes.UsbHidDeviceConnectionFactory, + ).toFactory((context) => { + const apduSenderFactory = context.container.get< + (args: DefaultApduSenderServiceConstructorArgs) => ApduSenderService + >(deviceSessionTypes.ApduSenderServiceFactory); + const apduReceiverFactory = context.container.get< + (args: DefaultApduReceiverConstructorArgs) => ApduReceiverService + >(deviceSessionTypes.ApduReceiverServiceFactory); + const loggerFactory = context.container.get< + (name: string) => LoggerPublisherService + >(loggerTypes.LoggerPublisherServiceFactory); + + return (device: HIDDevice) => { + const channel = Maybe.of( + new Uint8Array([Math.random() % 0xff, Math.random() % 0xff]), + ); + return new UsbHidDeviceConnection( + { + device, + apduSender: apduSenderFactory({ + frameSize: FRAME_SIZE, + channel, + padding: true, + }), + apduReceiver: apduReceiverFactory({ channel }), + }, + loggerFactory, + ); + }; + }); + + // GetConnectedDeviceUseCase + bind(usbDiTypes.GetConnectedDeviceUseCase).to(GetConnectedDeviceUseCase); + if (stub) { // We can rebind our interfaces to their mock implementations // rebind(...).to(....); diff --git a/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts b/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts new file mode 100644 index 000000000..b279f959f --- /dev/null +++ b/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts @@ -0,0 +1,21 @@ +import { EitherAsync, Right } from "purify-ts"; + +import { deviceModelStubBuilder } from "@internal/device-model/model/DeviceModel.stub"; +import { defaultApduResponseStubBuilder } from "@internal/device-session/model/ApduResponse.stub"; +import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; + +export function connectedDeviceBuilder( + id = "42", + type: "USB" | "BLE" | "MOCK" = "USB", +): ConnectedDevice { + const deviceModel = deviceModelStubBuilder(); + return new ConnectedDevice({ + deviceModel, + id, + type, + sendApdu: () => + EitherAsync.fromPromise(async () => + Promise.resolve(Right(defaultApduResponseStubBuilder())), + ), + }); +} diff --git a/packages/core/src/internal/usb/model/ConnectedDevice.ts b/packages/core/src/internal/usb/model/ConnectedDevice.ts index 76673023c..f0f499159 100644 --- a/packages/core/src/internal/usb/model/ConnectedDevice.ts +++ b/packages/core/src/internal/usb/model/ConnectedDevice.ts @@ -2,11 +2,55 @@ import { DeviceId, DeviceModel, } from "@internal/device-model/model/DeviceModel"; +import { SendApduFnType } from "@internal/usb/transport/UsbHidDeviceConnection"; + +export type ConnectionType = "USB" | "BLE" | "MOCK"; /** * Represents a connected device. */ -export type ConnectedDevice = { - id: DeviceId; // UUID to map with the associated transport device +export type ConnectedDeviceConstructorArgs = { + id: DeviceId; deviceModel: DeviceModel; + type: ConnectionType; + sendApdu: SendApduFnType; }; + +export class ConnectedDevice { + private readonly _id: DeviceId; + private readonly _deviceModel: DeviceModel; + private readonly _sendApdu: SendApduFnType; + private readonly _type: ConnectionType; + + constructor({ + id, + deviceModel, + sendApdu, + type, + }: ConnectedDeviceConstructorArgs) { + this._id = id; + this._deviceModel = deviceModel; + this._sendApdu = sendApdu; + this._type = type; + } + + public get id(): DeviceId { + return this._id; + } + + public get deviceModel(): DeviceModel { + return this._deviceModel; + } + + public get deviceName(): string { + return this._deviceModel.productName; + } + + public get type(): ConnectionType { + return this._type; + } + + public get sendApdu(): SendApduFnType { + return this._sendApdu; + } +} diff --git a/packages/core/src/internal/usb/model/Errors.ts b/packages/core/src/internal/usb/model/Errors.ts index ee0c0958f..15150fc13 100644 --- a/packages/core/src/internal/usb/model/Errors.ts +++ b/packages/core/src/internal/usb/model/Errors.ts @@ -1,10 +1,12 @@ +import { SdkError } from "@api/Error"; + export type PromptDeviceAccessError = | UsbHidTransportNotSupportedError | NoAccessibleDeviceError; export type ConnectError = UnknownDeviceError | OpeningConnectionError; -export class DeviceNotRecognizedError { +export class DeviceNotRecognizedError implements SdkError { readonly _tag = "DeviceNotRecognizedError"; originalError?: Error; constructor(readonly err?: Error) { @@ -12,7 +14,7 @@ export class DeviceNotRecognizedError { } } -export class NoAccessibleDeviceError { +export class NoAccessibleDeviceError implements SdkError { readonly _tag = "NoAccessibleDeviceError"; originalError?: Error; constructor(readonly err?: Error) { @@ -20,7 +22,7 @@ export class NoAccessibleDeviceError { } } -export class OpeningConnectionError { +export class OpeningConnectionError implements SdkError { readonly _tag = "ConnectionOpeningError"; originalError?: Error; constructor(readonly err?: Error) { @@ -28,7 +30,7 @@ export class OpeningConnectionError { } } -export class UnknownDeviceError { +export class UnknownDeviceError implements SdkError { readonly _tag = "UnknownDeviceError"; originalError?: Error; constructor(readonly err?: Error) { @@ -36,10 +38,18 @@ export class UnknownDeviceError { } } -export class UsbHidTransportNotSupportedError { +export class UsbHidTransportNotSupportedError implements SdkError { readonly _tag = "UsbHidTransportNotSupportedError"; originalError?: Error; constructor(readonly err?: Error) { this.originalError = err; } } + +export class SendApduConcurrencyError implements SdkError { + readonly _tag = "SendApduConcurrencyError"; + originalError?: Error; + constructor(readonly err?: Error) { + this.originalError = err; + } +} diff --git a/packages/core/src/internal/usb/model/HIDDevice.stub.ts b/packages/core/src/internal/usb/model/HIDDevice.stub.ts new file mode 100644 index 000000000..3bfa75107 --- /dev/null +++ b/packages/core/src/internal/usb/model/HIDDevice.stub.ts @@ -0,0 +1,18 @@ +export const hidDeviceStubBuilder = (props: Partial = {}) => ({ + opened: false, + productId: 0x4011, + vendorId: 0x2c97, + productName: "Ledger Nano X", + collections: [], + open: jest.fn(), + oninputreport: jest.fn(), + close: jest.fn(), + sendReport: jest.fn(), + sendFeatureReport: jest.fn(), + forget: jest.fn(), + receiveFeatureReport: jest.fn(), + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + dispatchEvent: jest.fn(), + ...props, +}); diff --git a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts new file mode 100644 index 000000000..7ef12e021 --- /dev/null +++ b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts @@ -0,0 +1,89 @@ +import { inject } from "inversify"; +import { EitherAsync, Left, Right } from "purify-ts"; +import { Subject } from "rxjs"; + +import { SdkError } from "@api/Error"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; +import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +type UsbHidDeviceConnectionConstructorArgs = { + device: HIDDevice; + apduSender: ApduSenderService; + apduReceiver: ApduReceiverService; +}; + +export type SendApduFnType = typeof UsbHidDeviceConnection.prototype.sendApdu; + +export class UsbHidDeviceConnection { + private readonly _device: HIDDevice; + private readonly _apduSender: ApduSenderService; + private readonly _apduReceiver: ApduReceiverService; + private _sendApduSubject: Subject; + private readonly _logger: LoggerPublisherService; + + constructor( + { device, apduSender, apduReceiver }: UsbHidDeviceConnectionConstructorArgs, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerServiceFactory: (tag: string) => LoggerPublisherService, + ) { + this._device = device; + this._apduSender = apduSender; + this._apduReceiver = apduReceiver; + this._sendApduSubject = new Subject(); + this._device.addEventListener("inputreport", this.receiveApdu.bind(this)); + this._logger = loggerServiceFactory("UsbHidDeviceConnection"); + } + + public get device(): HIDDevice { + return this._device; + } + + private receiveApdu(event: HIDInputReportEvent) { + const data = new Uint8Array(event.data.buffer); + const response = this._apduReceiver.handleFrame(data); + response.caseOf({ + Right: (maybeApduResponse) => { + if (maybeApduResponse.isJust()) { + this._logger.info("Received APDU Response", { + data: { response: maybeApduResponse.extract() }, + }); + this._sendApduSubject.next(maybeApduResponse.extract()); + this._sendApduSubject.complete(); + } + }, + Left: (err: SdkError) => { + this._sendApduSubject.error(err); + }, + }); + } + + public sendApdu = (apdu: Uint8Array): EitherAsync => { + this._sendApduSubject = new Subject(); + + return EitherAsync.fromPromise(async () => { + this._logger.info("Sending APDU", { data: { apdu } }); + const frames = this._apduSender.getFrames(apdu); + for (const frame of frames) { + await this._device.sendReport(0, frame.getRawData()); + } + try { + const ret = await new Promise((resolve, reject) => { + this._sendApduSubject.subscribe({ + next: (r) => { + resolve(r); + }, + error: (err) => { + reject(err); + }, + }); + }); + return Right(ret); + } catch (err) { + return Left(err as SdkError); + } + }); + }; +} diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index 674980fda..a5d400e81 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -5,6 +5,7 @@ import { DeviceModel, DeviceModelId, } from "@internal/device-model/model/DeviceModel"; +import { defaultApduSenderServiceStubBuilder } from "@internal/device-session/service/DefaultApduSenderService.stub"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { DeviceNotRecognizedError, @@ -13,6 +14,8 @@ import { UnknownDeviceError, UsbHidTransportNotSupportedError, } from "@internal/usb/model/Errors"; +import { hidDeviceStubBuilder } from "@internal/usb/model/HIDDevice.stub"; +import { UsbHidDeviceConnection } from "@internal/usb/model/UsbHidDeviceConnection"; import { WebUsbHidTransport } from "./WebUsbHidTransport"; @@ -21,21 +24,23 @@ jest.mock("@internal/logger-publisher/service/LoggerPublisherService"); // Our StaticDeviceModelDataSource can directly be used in our unit tests const usbDeviceModelDataSource = new StaticDeviceModelDataSource(); const logger = new DefaultLoggerPublisherService([], "web-usb-hid"); +const usbHideDeviceConnectionFactory = () => + new UsbHidDeviceConnection({ + device: hidDeviceStubBuilder(), + senderFramer: defaultApduSenderServiceStubBuilder({}, () => logger), + }); -const stubDevice = { - opened: false, - productId: 0x4011, - vendorId: 0x2c97, - productName: "Ledger Nano X", - collections: [], - open: jest.fn(), -}; +const stubDevice: HIDDevice = hidDeviceStubBuilder(); describe("WebUsbHidTransport", () => { let transport: WebUsbHidTransport; beforeEach(() => { - transport = new WebUsbHidTransport(usbDeviceModelDataSource, () => logger); + transport = new WebUsbHidTransport( + usbDeviceModelDataSource, + () => logger, + usbHideDeviceConnectionFactory, + ); }); afterEach(() => { diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 7ba87e2cf..83c5889d4 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -9,7 +9,8 @@ import { deviceModelTypes } from "@internal/device-model/di/deviceModelTypes"; import { DeviceId } from "@internal/device-model/model/DeviceModel"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { ledgerVendorId } from "@internal/usb/data/UsbHidConfig"; +import { LEDGER_VENDOR_ID } from "@internal/usb/data/UsbHidConfig"; +import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { @@ -21,6 +22,7 @@ import { UnknownDeviceError, UsbHidTransportNotSupportedError, } from "@internal/usb/model/Errors"; +import { UsbHidDeviceConnection } from "@internal/usb/transport/UsbHidDeviceConnection"; import { UsbHidTransport } from "./UsbHidTransport"; @@ -29,7 +31,6 @@ type WebHidInternalDevice = { id: DeviceId; hidDevice: HIDDevice; discoveredDevice: DiscoveredDevice; - connectedDevice?: ConnectedDevice; }; @injectable() @@ -38,16 +39,26 @@ export class WebUsbHidTransport implements UsbHidTransport { private internalDevicesById: Map; private connectionListenersAbortController: AbortController; private logger: LoggerPublisherService; + private _usbHidDeviceConnectionFactory: ( + device: HIDDevice, + ) => UsbHidDeviceConnection; + private usbHidDeviceConnections: Map; constructor( @inject(deviceModelTypes.DeviceModelDataSource) private deviceModelDataSource: DeviceModelDataSource, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerServiceFactory: (tag: string) => LoggerPublisherService, + @inject(usbDiTypes.UsbHidDeviceConnectionFactory) + usbHidDeviceConnectionFactory: ( + device: HIDDevice, + ) => UsbHidDeviceConnection, ) { this.internalDevicesById = new Map(); this.connectionListenersAbortController = new AbortController(); this.logger = loggerServiceFactory("WebUsbHidTransport"); + this.usbHidDeviceConnections = new Map(); + this._usbHidDeviceConnectionFactory = usbHidDeviceConnectionFactory; } /** @@ -92,7 +103,7 @@ export class WebUsbHidTransport implements UsbHidTransport { try { hidDevices = await hidApi.requestDevice({ - filters: [{ vendorId: ledgerVendorId }], + filters: [{ vendorId: LEDGER_VENDOR_ID }], }); } catch (error) { const deviceError = new NoAccessibleDeviceError(error as Error); @@ -284,13 +295,22 @@ export class WebUsbHidTransport implements UsbHidTransport { } } - internalDevice.connectedDevice = { + const { + discoveredDevice: { deviceModel }, + } = internalDevice; + + const deviceConnection = this._usbHidDeviceConnectionFactory( + internalDevice.hidDevice, + ); + const connectedDevice = new ConnectedDevice({ + sendApdu: deviceConnection.sendApdu, + deviceModel, id: deviceId, - deviceModel: internalDevice.discoveredDevice.deviceModel, - }; + type: "USB", + }); - // TODO: return a device session USB - return Right(internalDevice.connectedDevice); + this.usbHidDeviceConnections.set(deviceId, deviceConnection); + return Right(connectedDevice); } /** diff --git a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts new file mode 100644 index 000000000..8e1e4a93c --- /dev/null +++ b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts @@ -0,0 +1,45 @@ +import { inject, injectable } from "inversify"; + +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; +import { SessionId } from "@internal/device-session/model/Session"; +import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; + +export type GetConnectedDeviceUseCaseArgs = { + sessionId: SessionId; +}; + +/** + * Get a connected device from session id. + */ +@injectable() +export class GetConnectedDeviceUseCase { + private readonly _sessionService: DefaultSessionService; + private readonly _logger: LoggerPublisherService; + + constructor( + @inject(deviceSessionTypes.SessionService) + sessionService: DefaultSessionService, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerFactory: (tag: string) => LoggerPublisherService, + ) { + this._sessionService = sessionService; + this._logger = loggerFactory("GetConnectedDeviceUseCase"); + } + + execute({ sessionId }: GetConnectedDeviceUseCaseArgs): ConnectedDevice { + const deviceSession = this._sessionService.getSession(sessionId); + + return deviceSession.caseOf({ + Right: (session) => session.connectedDevice, + Left: () => { + this._logger.error("Error getting session", { + data: { error: deviceSession.extract() }, + }); + throw deviceSession.extract(); + }, + }); + } +} From 5f22f210eec173f4e6ccafbe367d572abba59870 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 2 Apr 2024 15:23:43 +0200 Subject: [PATCH 159/253] :sparkles: (smpl): Send APDU and receive response through sample app --- apps/sample/src/app/client-layout.tsx | 13 ++-- apps/sample/src/components/ApduView/index.tsx | 16 ++++- apps/sample/src/components/Device/index.tsx | 23 ++----- apps/sample/src/components/MainView/index.tsx | 13 +++- apps/sample/src/components/Sidebar/index.tsx | 26 ++++---- .../src/providers/DeviceSdkProvider/index.tsx | 2 +- apps/sample/src/reducers/sessions.tsx | 64 +++++++++++++++++++ packages/core/src/api/DeviceSdk.ts | 22 +++++-- packages/core/src/api/index.ts | 6 +- packages/core/src/api/types.ts | 9 +++ 10 files changed, 147 insertions(+), 47 deletions(-) create mode 100644 apps/sample/src/reducers/sessions.tsx create mode 100644 packages/core/src/api/types.ts diff --git a/apps/sample/src/app/client-layout.tsx b/apps/sample/src/app/client-layout.tsx index 57c527e5c..d2c462b15 100644 --- a/apps/sample/src/app/client-layout.tsx +++ b/apps/sample/src/app/client-layout.tsx @@ -16,6 +16,7 @@ import styled, { DefaultTheme } from "styled-components"; import { Header } from "@/components/Header"; import { Sidebar } from "@/components/Sidebar"; import { SdkProvider } from "@/providers/DeviceSdkProvider"; +import { SessionProvider } from "@/reducers/sessions"; import { GlobalStyle } from "@/styles/globalstyles"; type ClientRootLayoutProps = { @@ -44,11 +45,13 @@ const ClientRootLayout: React.FC = ({ children }) => { - - -
    - {children} - + + + +
    + {children} + + diff --git a/apps/sample/src/components/ApduView/index.tsx b/apps/sample/src/components/ApduView/index.tsx index 02fd33e70..42efd2d67 100644 --- a/apps/sample/src/components/ApduView/index.tsx +++ b/apps/sample/src/components/ApduView/index.tsx @@ -2,6 +2,8 @@ import { Button, Divider, Flex, Grid, Input, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; import { useApduForm } from "@/hooks/useApduForm"; +import { useSdk } from "@/providers/DeviceSdkProvider"; +import { useSessionContext } from "@/reducers/sessions"; const Root = styled(Flex).attrs({ mx: 15, mt: 10, mb: 5 })` flex-direction: column; @@ -55,6 +57,10 @@ const inputContainerProps = { style: { borderRadius: 4 } }; export const ApduView: React.FC = () => { const { apduFormValues, setApduFormValue, apdu } = useApduForm(); + const sdk = useSdk(); + const { + state: { selected: selectedSessionId }, + } = useSessionContext(); return ( @@ -138,7 +144,15 @@ export const ApduView: React.FC = () => { - console.log(apdu)}> + { + const response = await sdk.sendApdu({ + sessionId: selectedSessionId as string, + apdu, + }); + console.log(response); + }} + > Send APDU diff --git a/apps/sample/src/components/Device/index.tsx b/apps/sample/src/components/Device/index.tsx index 300e65e43..a0fa4ab1b 100644 --- a/apps/sample/src/components/Device/index.tsx +++ b/apps/sample/src/components/Device/index.tsx @@ -1,4 +1,5 @@ import React from "react"; +import { ConnectionType, DeviceModelId } from "@ledgerhq/device-sdk-core"; import { Box, Flex, Icons, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; @@ -25,38 +26,24 @@ export enum DeviceStatus { NOT_CONNECTED = "Not Connected", } -export enum DeviceType { - USB = "USB", - BLE = "BLE", -} - -export enum DeviceModel { - STAX = "Stax", - LNX = "LNX", -} - // These props are subject to change. type DeviceProps = { name: string; - type: DeviceType; - model: DeviceModel; + type: ConnectionType; + model: DeviceModelId; status?: DeviceStatus; }; export const Device: React.FC = ({ name, - status, + status = DeviceStatus.AVAILABLE, type, model, }) => { return ( - {model === DeviceModel.STAX ? ( - - ) : ( - - )} + {model === "stax" ? : } {name} diff --git a/apps/sample/src/components/MainView/index.tsx b/apps/sample/src/components/MainView/index.tsx index b804eafef..13f9e11bd 100644 --- a/apps/sample/src/components/MainView/index.tsx +++ b/apps/sample/src/components/MainView/index.tsx @@ -5,6 +5,7 @@ import Image from "next/image"; import styled, { DefaultTheme } from "styled-components"; import { useSdk } from "@/providers/DeviceSdkProvider"; +import { useSessionContext } from "@/reducers/sessions"; const Root = styled(Flex)` flex: 1; @@ -23,6 +24,7 @@ const NanoLogo = styled(Image).attrs({ mb: 8 })` export const MainView: React.FC = () => { const sdk = useSdk(); + const { dispatch } = useSessionContext(); const [discoveredDevice, setDiscoveredDevice] = useState(null); @@ -50,10 +52,17 @@ export const MainView: React.FC = () => { if (discoveredDevice) { sdk .connect({ deviceId: discoveredDevice.id }) - .then((connectedDevice) => { + .then((sessionId) => { console.log( - `🦖 Response from connect: ${JSON.stringify(connectedDevice)} 🎉`, + `🦖 Response from connect: ${JSON.stringify(sessionId)} 🎉`, ); + dispatch({ + type: "add_session", + payload: { + sessionId, + connectedDevice: sdk.getConnectedDevice({ sessionId }), + }, + }); }) .catch((error) => { console.error(`Error from connection or get-version`, error); diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx index ab8568b10..665c8a7b5 100644 --- a/apps/sample/src/components/Sidebar/index.tsx +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -4,14 +4,10 @@ import { Box, Flex, Icons, Link, Text } from "@ledgerhq/react-ui"; import { useRouter } from "next/navigation"; import styled, { DefaultTheme } from "styled-components"; -import { - Device, - DeviceModel, - DeviceStatus, - DeviceType, -} from "@/components/Device"; +import { Device } from "@/components/Device"; import { Menu } from "@/components/Menu"; import { useSdk } from "@/providers/DeviceSdkProvider"; +import { useSessionContext } from "@/reducers/sessions"; const Root = styled(Flex).attrs({ py: 8, px: 6 })` flex-direction: column; @@ -47,6 +43,9 @@ const VersionText = styled(Text)` export const Sidebar: React.FC = () => { const [version, setVersion] = useState(""); const sdk = useSdk(); + const { + state: { devicesMap }, + } = useSessionContext(); useEffect(() => { sdk @@ -76,12 +75,15 @@ export const Sidebar: React.FC = () => { Device - + + {Object.entries(devicesMap).map(([sessionId, device]) => ( + + ))} Menu diff --git a/apps/sample/src/providers/DeviceSdkProvider/index.tsx b/apps/sample/src/providers/DeviceSdkProvider/index.tsx index 3c3d4728c..6f93b833c 100644 --- a/apps/sample/src/providers/DeviceSdkProvider/index.tsx +++ b/apps/sample/src/providers/DeviceSdkProvider/index.tsx @@ -19,6 +19,6 @@ export const SdkProvider: React.FC = ({ children }) => { return {children}; }; -export const useSdk = () => { +export const useSdk = (): DeviceSdk => { return useContext(SdkContext); }; diff --git a/apps/sample/src/reducers/sessions.tsx b/apps/sample/src/reducers/sessions.tsx new file mode 100644 index 000000000..09440bcdc --- /dev/null +++ b/apps/sample/src/reducers/sessions.tsx @@ -0,0 +1,64 @@ +import { Context, createContext, Reducer, useContext, useReducer } from "react"; +import { ConnectedDevice, SessionId } from "@ledgerhq/device-sdk-core"; + +type SessionState = { + list: SessionId[]; + selected: SessionId | null; + devicesMap: Record; +}; + +type AddSessionAction = { + type: "add_session"; + payload: { sessionId: SessionId; connectedDevice: ConnectedDevice }; +}; + +export const SessionsInitialState: SessionState = { + list: [], + selected: null, + devicesMap: {}, +}; + +export const sessionReducer: Reducer = ( + state, + action, +) => { + switch (action.type) { + case "add_session": + return { + ...state, + selected: action.payload.sessionId, + devicesMap: { + ...state.devicesMap, + [action.payload.sessionId]: action.payload.connectedDevice, + }, + }; + default: + return state; + } +}; + +type SessionContextType = { + state: SessionState; + dispatch: (value: AddSessionAction) => void; +}; + +const SessionContext: Context = + createContext({ + state: SessionsInitialState, + dispatch: (value: AddSessionAction) => {}, + }); + +export const SessionProvider: React.FC = ({ + children, +}) => { + const [state, dispatch] = useReducer(sessionReducer, SessionsInitialState); + + return ( + + {children} + + ); +}; + +export const useSessionContext = () => + useContext(SessionContext); diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index b0a9e8ea5..f8d2a0f0b 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -3,6 +3,8 @@ import { Observable } from "rxjs"; import { configTypes } from "@internal/config/di/configTypes"; import { GetSdkVersionUseCase } from "@internal/config/use-case/GetSdkVersionUseCase"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { SessionId } from "@internal/device-session/model/Session"; import { discoveryTypes } from "@internal/discovery/di/discoveryTypes"; import { ConnectUseCase, @@ -14,8 +16,14 @@ import { sendTypes } from "@internal/send/di/sendTypes"; import { SendApduUseCase, SendApduUseCaseArgs, -} from "@internal/send/usecase/SendApduUseCase"; +} from "@internal/send/use-case/SendApduUseCase"; +import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; +import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; +import { + GetConnectedDeviceUseCase, + GetConnectedDeviceUseCaseArgs, +} from "@internal/usb/use-case/GetConnectedDeviceUseCase"; import { makeContainer, MakeContainerProps } from "@root/src/di"; export class DeviceSdk { @@ -54,15 +62,21 @@ export class DeviceSdk { .execute(); } - connect(args: ConnectUseCaseArgs) { + connect(args: ConnectUseCaseArgs): Promise { return this.container .get(discoveryTypes.ConnectUseCase) .execute(args); } - sendApdu(args: SendApduUseCaseArgs) { + sendApdu(args: SendApduUseCaseArgs): Promise { + return this.container + .get(sendTypes.SendApduUseCase) + .execute(args); + } + + getConnectedDevice(args: GetConnectedDeviceUseCaseArgs): ConnectedDevice { return this.container - .get(sendTypes.SendService) + .get(usbDiTypes.GetConnectedDeviceUseCase) .execute(args); } } diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 8e28b19dc..840d2bceb 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -3,8 +3,6 @@ export { DeviceSdk } from "./DeviceSdk"; export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; export { LogLevel } from "./logger-subscriber/model/LogLevel"; -export type { LogSubscriberOptions } from "./logger-subscriber/model/LogSubscriberOptions"; export { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; - -// [SHOULD] be exported from another file -export type { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; +export * from "./types"; +export { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; diff --git a/packages/core/src/api/types.ts b/packages/core/src/api/types.ts new file mode 100644 index 000000000..636b5ad07 --- /dev/null +++ b/packages/core/src/api/types.ts @@ -0,0 +1,9 @@ +export type { LogSubscriberOptions } from "./logger-subscriber/model/LogSubscriberOptions"; +export type { + DeviceId, + DeviceModel, + DeviceModelId, +} from "@internal/device-model/model/DeviceModel"; +export type { SessionId } from "@internal/device-session/model/Session"; +export type { ConnectionType } from "@internal/usb/model/ConnectedDevice"; +export type { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; From 789d2e5d6c58eaa58cadc2cbbeddf528c43c208a Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Wed, 3 Apr 2024 12:25:06 +0200 Subject: [PATCH 160/253] :art: (core): Review UsbHidDeviceConnectionFactory & typings --- .../internal/device-session/model/Session.ts | 9 +-- .../DefaultApduReceiverService.stub.ts | 20 +++++++ .../internal/send/use-case/SendApduUseCase.ts | 6 +- .../core/src/internal/usb/di/usbModule.ts | 47 ++------------- .../usb/model/ConnectedDevice.stub.ts | 8 +-- .../src/internal/usb/model/ConnectedDevice.ts | 10 ++-- .../service/UsbHidDeviceConnectionFactory.ts | 48 +++++++++++++++ .../usb/transport/UsbHidDeviceConnection.ts | 59 +++++++++---------- .../usb/transport/WebUsbHidTransport.test.ts | 21 ++++--- .../usb/transport/WebUsbHidTransport.ts | 17 ++---- 10 files changed, 133 insertions(+), 112 deletions(-) create mode 100644 packages/core/src/internal/device-session/service/DefaultApduReceiverService.stub.ts create mode 100644 packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index 83446d4e5..a64d2bf43 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -1,8 +1,5 @@ -import { EitherAsync } from "purify-ts"; import { v4 as uuidv4 } from "uuid"; -import { SdkError } from "@api/Error"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; export type SessionId = ReturnType; @@ -19,15 +16,15 @@ export class Session { this._connectedDevice = connectedDevice; } - public get id(): SessionId { + public get id() { return this._id; } - public get connectedDevice(): ConnectedDevice { + public get connectedDevice() { return this._connectedDevice; } - sendApdu(_args: Uint8Array): EitherAsync { + sendApdu(_args: Uint8Array) { return this._connectedDevice.sendApdu(_args); } } diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.stub.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.stub.ts new file mode 100644 index 000000000..547fddae6 --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.stub.ts @@ -0,0 +1,20 @@ +import { Maybe } from "purify-ts"; + +import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; +import { + DefaultApduReceiverConstructorArgs, + DefaultApduReceiverService, +} from "@internal/device-session/service/DefaultApduReceiverService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +export const defaultApduReceiverServiceStubBuilder = ( + props: Partial = {}, + loggerFactory: (tag: string) => LoggerPublisherService, +): ApduReceiverService => + new DefaultApduReceiverService( + { + channel: Maybe.of(new Uint8Array([0x12, 0x34])), + ...props, + }, + loggerFactory, + ); diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.ts index d936e842b..ea8c1050a 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.ts @@ -52,11 +52,11 @@ export class SendApduUseCase { }, }); }, - Left: () => { + Left: (error) => { this._logger.error("Error getting session", { - data: { error: deviceSession.extract() }, + data: { error }, }); - throw deviceSession.extract(); + throw error; }, }); } diff --git a/packages/core/src/internal/usb/di/usbModule.ts b/packages/core/src/internal/usb/di/usbModule.ts index 9e5a51fa2..602fb4e6b 100644 --- a/packages/core/src/internal/usb/di/usbModule.ts +++ b/packages/core/src/internal/usb/di/usbModule.ts @@ -1,15 +1,6 @@ -import { ContainerModule, interfaces } from "inversify"; -import { Maybe } from "purify-ts"; +import { ContainerModule } from "inversify"; -import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; -import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; -import { DefaultApduReceiverConstructorArgs } from "@internal/device-session/service/DefaultApduReceiverService"; -import { DefaultApduSenderServiceConstructorArgs } from "@internal/device-session/service/DefaultApduSenderService"; -import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; -import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { FRAME_SIZE } from "@internal/usb/data/UsbHidConfig"; -import { UsbHidDeviceConnection } from "@internal/usb/transport/UsbHidDeviceConnection"; +import { UsbHidDeviceConnectionFactory } from "@internal/usb/service/UsbHidDeviceConnectionFactory"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { GetConnectedDeviceUseCase } from "@internal/usb/use-case/GetConnectedDeviceUseCase"; @@ -27,37 +18,9 @@ export const usbModuleFactory = ({ bind(usbDiTypes.UsbHidTransport).to(WebUsbHidTransport).inSingletonScope(); // UsbHidDeviceConnectionFactory - bind>( - usbDiTypes.UsbHidDeviceConnectionFactory, - ).toFactory((context) => { - const apduSenderFactory = context.container.get< - (args: DefaultApduSenderServiceConstructorArgs) => ApduSenderService - >(deviceSessionTypes.ApduSenderServiceFactory); - const apduReceiverFactory = context.container.get< - (args: DefaultApduReceiverConstructorArgs) => ApduReceiverService - >(deviceSessionTypes.ApduReceiverServiceFactory); - const loggerFactory = context.container.get< - (name: string) => LoggerPublisherService - >(loggerTypes.LoggerPublisherServiceFactory); - - return (device: HIDDevice) => { - const channel = Maybe.of( - new Uint8Array([Math.random() % 0xff, Math.random() % 0xff]), - ); - return new UsbHidDeviceConnection( - { - device, - apduSender: apduSenderFactory({ - frameSize: FRAME_SIZE, - channel, - padding: true, - }), - apduReceiver: apduReceiverFactory({ channel }), - }, - loggerFactory, - ); - }; - }); + bind(usbDiTypes.UsbHidDeviceConnectionFactory).to( + UsbHidDeviceConnectionFactory, + ); // GetConnectedDeviceUseCase bind(usbDiTypes.GetConnectedDeviceUseCase).to(GetConnectedDeviceUseCase); diff --git a/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts b/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts index b279f959f..417afc962 100644 --- a/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts +++ b/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts @@ -1,4 +1,4 @@ -import { EitherAsync, Right } from "purify-ts"; +import { Right } from "purify-ts"; import { deviceModelStubBuilder } from "@internal/device-model/model/DeviceModel.stub"; import { defaultApduResponseStubBuilder } from "@internal/device-session/model/ApduResponse.stub"; @@ -13,9 +13,7 @@ export function connectedDeviceBuilder( deviceModel, id, type, - sendApdu: () => - EitherAsync.fromPromise(async () => - Promise.resolve(Right(defaultApduResponseStubBuilder())), - ), + sendApdu: async () => + Promise.resolve(Right(defaultApduResponseStubBuilder())), }); } diff --git a/packages/core/src/internal/usb/model/ConnectedDevice.ts b/packages/core/src/internal/usb/model/ConnectedDevice.ts index f0f499159..bd24857b5 100644 --- a/packages/core/src/internal/usb/model/ConnectedDevice.ts +++ b/packages/core/src/internal/usb/model/ConnectedDevice.ts @@ -34,23 +34,23 @@ export class ConnectedDevice { this._type = type; } - public get id(): DeviceId { + public get id() { return this._id; } - public get deviceModel(): DeviceModel { + public get deviceModel() { return this._deviceModel; } - public get deviceName(): string { + public get deviceName() { return this._deviceModel.productName; } - public get type(): ConnectionType { + public get type() { return this._type; } - public get sendApdu(): SendApduFnType { + public get sendApdu() { return this._sendApdu; } } diff --git a/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts b/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts new file mode 100644 index 000000000..ecb8b0b54 --- /dev/null +++ b/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts @@ -0,0 +1,48 @@ +import { inject, injectable } from "inversify"; +import { Maybe } from "purify-ts"; + +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; +import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; +import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; +import { DefaultApduReceiverConstructorArgs } from "@internal/device-session/service/DefaultApduReceiverService"; +import { DefaultApduSenderServiceConstructorArgs } from "@internal/device-session/service/DefaultApduSenderService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { FRAME_SIZE } from "@internal/usb/data/UsbHidConfig"; +import { UsbHidDeviceConnection } from "@internal/usb/transport/UsbHidDeviceConnection"; + +@injectable() +export class UsbHidDeviceConnectionFactory { + constructor( + @inject(deviceSessionTypes.ApduSenderServiceFactory) + private readonly apduSenderFactory: ( + args: DefaultApduSenderServiceConstructorArgs, + ) => ApduSenderService, + @inject(deviceSessionTypes.ApduReceiverServiceFactory) + private readonly apduReceiverFactory: ( + args: DefaultApduReceiverConstructorArgs, + ) => ApduReceiverService, + @inject(loggerTypes.LoggerPublisherServiceFactory) + private readonly loggerFactory: (name: string) => LoggerPublisherService, + ) {} + + public create( + device: HIDDevice, + channel = Maybe.of( + new Uint8Array([Math.random() % 0xff, Math.random() % 0xff]), + ), + ): UsbHidDeviceConnection { + return new UsbHidDeviceConnection( + { + device, + apduSender: this.apduSenderFactory({ + frameSize: FRAME_SIZE, + channel, + padding: true, + }), + apduReceiver: this.apduReceiverFactory({ channel }), + }, + this.loggerFactory, + ); + } +} diff --git a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts index 7ef12e021..05289023a 100644 --- a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts +++ b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts @@ -1,5 +1,5 @@ import { inject } from "inversify"; -import { EitherAsync, Left, Right } from "purify-ts"; +import { Either, Left, Right } from "purify-ts"; import { Subject } from "rxjs"; import { SdkError } from "@api/Error"; @@ -15,7 +15,9 @@ type UsbHidDeviceConnectionConstructorArgs = { apduReceiver: ApduReceiverService; }; -export type SendApduFnType = typeof UsbHidDeviceConnection.prototype.sendApdu; +export type SendApduFnType = ( + apdu: Uint8Array, +) => Promise>; export class UsbHidDeviceConnection { private readonly _device: HIDDevice; @@ -33,57 +35,50 @@ export class UsbHidDeviceConnection { this._apduSender = apduSender; this._apduReceiver = apduReceiver; this._sendApduSubject = new Subject(); - this._device.addEventListener("inputreport", this.receiveApdu.bind(this)); + this._device.addEventListener("inputreport", this.receiveApdu); this._logger = loggerServiceFactory("UsbHidDeviceConnection"); } - public get device(): HIDDevice { + public get device() { return this._device; } - private receiveApdu(event: HIDInputReportEvent) { + private receiveApdu = (event: HIDInputReportEvent) => { const data = new Uint8Array(event.data.buffer); const response = this._apduReceiver.handleFrame(data); response.caseOf({ Right: (maybeApduResponse) => { - if (maybeApduResponse.isJust()) { + maybeApduResponse.map((apduResponse) => { this._logger.info("Received APDU Response", { - data: { response: maybeApduResponse.extract() }, + data: { response: apduResponse }, }); - this._sendApduSubject.next(maybeApduResponse.extract()); + this._sendApduSubject.next(apduResponse); this._sendApduSubject.complete(); - } + }); }, Left: (err: SdkError) => { this._sendApduSubject.error(err); }, }); - } + }; - public sendApdu = (apdu: Uint8Array): EitherAsync => { + public sendApdu: SendApduFnType = async (apdu) => { this._sendApduSubject = new Subject(); - return EitherAsync.fromPromise(async () => { - this._logger.info("Sending APDU", { data: { apdu } }); - const frames = this._apduSender.getFrames(apdu); - for (const frame of frames) { - await this._device.sendReport(0, frame.getRawData()); - } - try { - const ret = await new Promise((resolve, reject) => { - this._sendApduSubject.subscribe({ - next: (r) => { - resolve(r); - }, - error: (err) => { - reject(err); - }, - }); - }); - return Right(ret); - } catch (err) { - return Left(err as SdkError); - } + this._logger.info("Sending APDU", { data: { apdu } }); + const frames = this._apduSender.getFrames(apdu); + for (const frame of frames) { + await this._device.sendReport(0, frame.getRawData()); + } + return new Promise((resolve) => { + this._sendApduSubject.subscribe({ + next: (r) => { + resolve(Right(r)); + }, + error: (err) => { + resolve(Left(err)); + }, + }); }); }; } diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index a5d400e81..394966b56 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -5,6 +5,7 @@ import { DeviceModel, DeviceModelId, } from "@internal/device-model/model/DeviceModel"; +import { defaultApduReceiverServiceStubBuilder } from "@internal/device-session/service/DefaultApduReceiverService.stub"; import { defaultApduSenderServiceStubBuilder } from "@internal/device-session/service/DefaultApduSenderService.stub"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { @@ -15,7 +16,7 @@ import { UsbHidTransportNotSupportedError, } from "@internal/usb/model/Errors"; import { hidDeviceStubBuilder } from "@internal/usb/model/HIDDevice.stub"; -import { UsbHidDeviceConnection } from "@internal/usb/model/UsbHidDeviceConnection"; +import { UsbHidDeviceConnectionFactory } from "@internal/usb/service/UsbHidDeviceConnectionFactory"; import { WebUsbHidTransport } from "./WebUsbHidTransport"; @@ -24,11 +25,17 @@ jest.mock("@internal/logger-publisher/service/LoggerPublisherService"); // Our StaticDeviceModelDataSource can directly be used in our unit tests const usbDeviceModelDataSource = new StaticDeviceModelDataSource(); const logger = new DefaultLoggerPublisherService([], "web-usb-hid"); -const usbHideDeviceConnectionFactory = () => - new UsbHidDeviceConnection({ - device: hidDeviceStubBuilder(), - senderFramer: defaultApduSenderServiceStubBuilder({}, () => logger), - }); +const apduSenderFactory = jest.fn(() => + defaultApduSenderServiceStubBuilder({}, () => logger), +); +const apduReceiverFactory = jest.fn(() => + defaultApduReceiverServiceStubBuilder({}, () => logger), +); +const usbHidDeviceConnectionFactory = new UsbHidDeviceConnectionFactory( + apduSenderFactory, + apduReceiverFactory, + () => logger, +); const stubDevice: HIDDevice = hidDeviceStubBuilder(); @@ -39,7 +46,7 @@ describe("WebUsbHidTransport", () => { transport = new WebUsbHidTransport( usbDeviceModelDataSource, () => logger, - usbHideDeviceConnectionFactory, + usbHidDeviceConnectionFactory, ); }); diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 83c5889d4..685699812 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -22,7 +22,7 @@ import { UnknownDeviceError, UsbHidTransportNotSupportedError, } from "@internal/usb/model/Errors"; -import { UsbHidDeviceConnection } from "@internal/usb/transport/UsbHidDeviceConnection"; +import { UsbHidDeviceConnectionFactory } from "@internal/usb/service/UsbHidDeviceConnectionFactory"; import { UsbHidTransport } from "./UsbHidTransport"; @@ -39,10 +39,7 @@ export class WebUsbHidTransport implements UsbHidTransport { private internalDevicesById: Map; private connectionListenersAbortController: AbortController; private logger: LoggerPublisherService; - private _usbHidDeviceConnectionFactory: ( - device: HIDDevice, - ) => UsbHidDeviceConnection; - private usbHidDeviceConnections: Map; + private _usbHidDeviceConnectionFactory: UsbHidDeviceConnectionFactory; constructor( @inject(deviceModelTypes.DeviceModelDataSource) @@ -50,14 +47,11 @@ export class WebUsbHidTransport implements UsbHidTransport { @inject(loggerTypes.LoggerPublisherServiceFactory) loggerServiceFactory: (tag: string) => LoggerPublisherService, @inject(usbDiTypes.UsbHidDeviceConnectionFactory) - usbHidDeviceConnectionFactory: ( - device: HIDDevice, - ) => UsbHidDeviceConnection, + usbHidDeviceConnectionFactory: UsbHidDeviceConnectionFactory, ) { this.internalDevicesById = new Map(); this.connectionListenersAbortController = new AbortController(); this.logger = loggerServiceFactory("WebUsbHidTransport"); - this.usbHidDeviceConnections = new Map(); this._usbHidDeviceConnectionFactory = usbHidDeviceConnectionFactory; } @@ -74,7 +68,7 @@ export class WebUsbHidTransport implements UsbHidTransport { ); }; - isSupported(): boolean { + isSupported() { try { const result = !!navigator?.hid; this.logger.debug(`isSupported: ${result}`); @@ -299,7 +293,7 @@ export class WebUsbHidTransport implements UsbHidTransport { discoveredDevice: { deviceModel }, } = internalDevice; - const deviceConnection = this._usbHidDeviceConnectionFactory( + const deviceConnection = this._usbHidDeviceConnectionFactory.create( internalDevice.hidDevice, ); const connectedDevice = new ConnectedDevice({ @@ -309,7 +303,6 @@ export class WebUsbHidTransport implements UsbHidTransport { type: "USB", }); - this.usbHidDeviceConnections.set(deviceId, deviceConnection); return Right(connectedDevice); } From 8c63b370ac2fbd1116add8b3de7687144af1da3d Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 4 Apr 2024 17:30:46 +0200 Subject: [PATCH 161/253] :white_check_mark: (core): Improve coverage --- .../service/ConsoleLogger.test.ts | 32 ++++++-- .../service/ConsoleLogger.ts | 10 +-- .../device-session/model/ApduResponse.ts | 8 -- .../device-session/model/Session.stub.ts | 7 ++ .../service/DefaultApduReceiverService.ts | 10 ++- .../service/DefaultApduSenderService.ts | 2 +- .../service/DefaultSessionService.test.ts | 8 +- .../discovery/di/discoveryModule.test.ts | 2 + .../discovery/use-case/ConnectUseCase.test.ts | 25 ++++--- .../use-case/StartDiscoveringUseCase.test.ts | 2 + .../use-case/StopDiscoveringUseCase.test.ts | 2 + .../send/use-case/SendApduUseCase.test.ts | 57 +++++++++++++++ .../internal/send/use-case/SendApduUseCase.ts | 6 +- .../src/internal/usb/di/usbModule.test.ts | 7 +- .../usb/model/ConnectedDevice.stub.ts | 5 +- .../src/internal/usb/model/ConnectedDevice.ts | 2 +- .../src/internal/usb/model/HIDDevice.stub.ts | 9 ++- .../UsbHidDeviceConnectionFactory.stub.ts | 13 ++++ .../service/UsbHidDeviceConnectionFactory.ts | 4 +- .../usb/transport/DeviceConnection.ts | 12 +++ .../transport/UsbHidDeviceConnection.test.ts | 44 +++++++++++ .../usb/transport/UsbHidDeviceConnection.ts | 58 ++++++++------- .../usb/transport/WebUsbHidTransport.test.ts | 17 +---- .../usb/transport/WebUsbHidTransport.ts | 73 ++++++++++--------- .../GetConnectedDeviceUseCase.test.ts | 43 +++++++++++ .../usb/use-case/GetConnectedDeviceUseCase.ts | 12 +-- 26 files changed, 336 insertions(+), 134 deletions(-) create mode 100644 packages/core/src/internal/device-session/model/Session.stub.ts create mode 100644 packages/core/src/internal/send/use-case/SendApduUseCase.test.ts create mode 100644 packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.stub.ts create mode 100644 packages/core/src/internal/usb/transport/DeviceConnection.ts create mode 100644 packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts create mode 100644 packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts diff --git a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts index 8cd7f5fcc..cfb1a38b0 100644 --- a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts +++ b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.test.ts @@ -30,33 +30,53 @@ describe("ConsoleLogger", () => { it("should log Info level", () => { logger.log(LogLevel.Info, message, options); - expect(info).toHaveBeenCalledWith(`[${options.tag}]`, message); + expect(info).toHaveBeenCalledWith( + `[${options.tag}]`, + message, + options.data, + ); }); it("should log Info level with a custom tag", () => { const tag = "custom-tag"; logger.log(LogLevel.Info, message, { ...options, tag }); - expect(info).toHaveBeenCalledWith(`[${tag}]`, message); + expect(info).toHaveBeenCalledWith(`[${tag}]`, message, options.data); }); it("should log Warn level", () => { logger.log(LogLevel.Warning, message, options); - expect(warn).toHaveBeenCalledWith(`[${options.tag}]`, message); + expect(warn).toHaveBeenCalledWith( + `[${options.tag}]`, + message, + options.data, + ); }); it("should log Debug level", () => { logger.log(LogLevel.Debug, message, options); - expect(debug).toHaveBeenCalledWith(`[${options.tag}]`, message); + expect(debug).toHaveBeenCalledWith( + `[${options.tag}]`, + message, + options.data, + ); }); it("should default to Log level if none present", () => { logger.log(LogLevel.Fatal, message, options); - expect(log).toHaveBeenCalledWith(`[${options.tag}]`, message); + expect(log).toHaveBeenCalledWith( + `[${options.tag}]`, + message, + options.data, + ); }); it("should log Error level", () => { logger.log(LogLevel.Error, message, options); - expect(error).toHaveBeenCalledWith(`[${options.tag}]`, message); + expect(error).toHaveBeenCalledWith( + `[${options.tag}]`, + message, + options.data, + ); }); }); }); diff --git a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts index 046e88022..2039c5839 100644 --- a/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts +++ b/packages/core/src/api/logger-subscriber/service/ConsoleLogger.ts @@ -8,20 +8,20 @@ export class ConsoleLogger implements LoggerSubscriberService { switch (level) { case LogLevel.Info: - console.info(tag, message); + console.info(tag, message, options.data); break; case LogLevel.Warning: - console.warn(tag, message); + console.warn(tag, message, options.data); break; case LogLevel.Debug: - console.debug(tag, message); + console.debug(tag, message, options.data); break; case LogLevel.Error: { - console.error(tag, message); + console.error(tag, message, options.data); break; } default: - console.log(tag, message); + console.log(tag, message, options.data); } } } diff --git a/packages/core/src/internal/device-session/model/ApduResponse.ts b/packages/core/src/internal/device-session/model/ApduResponse.ts index 851a52cc8..6f05fcaec 100644 --- a/packages/core/src/internal/device-session/model/ApduResponse.ts +++ b/packages/core/src/internal/device-session/model/ApduResponse.ts @@ -11,12 +11,4 @@ export class ApduResponse { this._statusCode = statusCode; this._data = data; } - - public getStatusCode() { - return this._statusCode; - } - - public getData() { - return this._data; - } } diff --git a/packages/core/src/internal/device-session/model/Session.stub.ts b/packages/core/src/internal/device-session/model/Session.stub.ts new file mode 100644 index 000000000..aba20aefb --- /dev/null +++ b/packages/core/src/internal/device-session/model/Session.stub.ts @@ -0,0 +1,7 @@ +import { Session } from "@internal/device-session/model/Session"; +import { connectedDeviceStubBuilder } from "@internal/usb/model/ConnectedDevice.stub"; + +export const sessionStubBuilder = () => + new Session({ + connectedDevice: connectedDeviceStubBuilder(), + }); diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts index aaaecd91c..f7dabfbf5 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts @@ -36,7 +36,7 @@ export class DefaultApduReceiverService implements ApduReceiverService { loggerModuleFactory: (tag: string) => LoggerPublisherService, ) { this._channel = channel; - this._logger = loggerModuleFactory("receiver"); + this._logger = loggerModuleFactory("ApduReceiverService"); this._pendingFrames = []; } @@ -52,7 +52,9 @@ export class DefaultApduReceiverService implements ApduReceiverService { const frame = this.apduToFrame(apdu); return frame.map((value) => { - this._logger.debug("handle frame", { data: { frame } }); + this._logger.info("handle frame", { + data: { frame: value.getRawData() }, + }); this._pendingFrames.push(value); const dataSize = this._pendingFrames.at(0)!.getHeader().getDataLength(); @@ -104,7 +106,7 @@ export class DefaultApduReceiverService implements ApduReceiverService { * * @param Uint8Array */ - private apduToFrame(apdu: Uint8Array): Either { + private apduToFrame(apdu: Uint8Array): Either { const channelSize = this._channel.caseOf({ Just: () => CHANNEL_LENGTH, Nothing: () => 0, @@ -161,7 +163,7 @@ export class DefaultApduReceiverService implements ApduReceiverService { */ private isComplete(dataSize: number): boolean { const totalReceiveLength = this._pendingFrames.reduce( - (prev: number, curr: Frame) => prev + curr.getData().length, + (prev, curr) => prev + curr.getData().length, 0, ); diff --git a/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts index ae5c6ca5f..ffaf142cf 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts @@ -66,7 +66,7 @@ export class DefaultApduSenderService implements ApduSenderService { count += 1; frame = this.getFrameAtIndex(apdu, count).mapLeft((error) => { if (error instanceof FramerOverflowError) { - this._logger.debug("Frames parsed", { data: { count } }); + this._logger.info("Frames parsed", { data: { count } }); } else { this._logger.error("Error while parsing frame", { data: { error } }); } diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts index a878beb1e..ad8b1a5d9 100644 --- a/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts @@ -3,6 +3,7 @@ import { Either, Left } from "purify-ts"; import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; import { Session } from "@internal/device-session/model/Session"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { connectedDeviceStubBuilder } from "@internal/usb/model/ConnectedDevice.stub"; import { DefaultSessionService } from "./DefaultSessionService"; @@ -14,12 +15,9 @@ let session: Session; describe("DefaultSessionService", () => { beforeEach(() => { jest.restoreAllMocks(); - session = { - id: "123", - sendApdu: jest.fn(), - }; + session = new Session({ connectedDevice: connectedDeviceStubBuilder() }); loggerService = new DefaultLoggerPublisherService([], "session"); - sessionService = new DefaultSessionService(() => loggerService, []); + sessionService = new DefaultSessionService(() => loggerService); }); it("should have an empty sessions list", () => { diff --git a/packages/core/src/internal/discovery/di/discoveryModule.test.ts b/packages/core/src/internal/discovery/di/discoveryModule.test.ts index 8169359ba..010f99d91 100644 --- a/packages/core/src/internal/discovery/di/discoveryModule.test.ts +++ b/packages/core/src/internal/discovery/di/discoveryModule.test.ts @@ -1,6 +1,7 @@ import { Container } from "inversify"; import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelModule"; +import { deviceSessionModuleFactory } from "@internal/device-session/di/deviceSessionModule"; import { ConnectUseCase } from "@internal/discovery/use-case/ConnectUseCase"; import { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; import { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; @@ -22,6 +23,7 @@ describe("discoveryModuleFactory", () => { loggerModuleFactory(), usbModuleFactory(), deviceModelModuleFactory(), + deviceSessionModuleFactory(), ); }); diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts index 7124acf6b..deffe1c27 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts @@ -1,30 +1,37 @@ import { Left, Right } from "purify-ts"; +import * as uuid from "uuid"; +jest.mock("uuid"); import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; +import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { SessionService } from "@internal/device-session/service/SessionService"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { connectedDeviceBuilder } from "@internal/usb/model/ConnectedDevice.stub"; +import { connectedDeviceStubBuilder } from "@internal/usb/model/ConnectedDevice.stub"; import { UnknownDeviceError } from "@internal/usb/model/Errors"; -import { UsbHidDeviceConnection } from "@internal/usb/model/UsbHidDeviceConnection"; +import { usbHidDeviceConnectionFactoryStubBuilder } from "@internal/usb/service/UsbHidDeviceConnectionFactory.stub"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { ConnectUseCase } from "./ConnectUseCase"; let transport: WebUsbHidTransport; let logger: LoggerPublisherService; -let usbHidDeviceConnection: UsbHidDeviceConnection; +let sessionService: SessionService; +const fakeSessionId = "42"; describe("ConnectUseCase", () => { - const stubConnectedDevice = connectedDeviceBuilder("1"); + const stubConnectedDevice = connectedDeviceStubBuilder("1"); const tag = "logger-tag"; beforeAll(() => { logger = new DefaultLoggerPublisherService([], tag); + jest.spyOn(uuid, "v4").mockReturnValue(fakeSessionId); transport = new WebUsbHidTransport( {} as DeviceModelDataSource, () => logger, - () => usbHidDeviceConnection({}), + usbHidDeviceConnectionFactoryStubBuilder(), ); + sessionService = new DefaultSessionService(() => logger); }); afterAll(() => { @@ -36,21 +43,21 @@ describe("ConnectUseCase", () => { .spyOn(transport, "connect") .mockResolvedValue(Left(new UnknownDeviceError())); - const usecase = new ConnectUseCase(transport); + const usecase = new ConnectUseCase(transport, sessionService, () => logger); await expect(usecase.execute({ deviceId: "" })).rejects.toBeInstanceOf( UnknownDeviceError, ); }); - test("If connect is in success, return an observable connected device object", async () => { + test("If connect is in success, return a session id", async () => { jest .spyOn(transport, "connect") .mockResolvedValue(Promise.resolve(Right(stubConnectedDevice))); - const usecase = new ConnectUseCase(transport); + const usecase = new ConnectUseCase(transport, sessionService, () => logger); const connectedDevice = await usecase.execute({ deviceId: "" }); - expect(connectedDevice).toBe(stubConnectedDevice); + expect(connectedDevice).toBe(fakeSessionId); }); }); diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts index d5bbc9af6..9d4dba0eb 100644 --- a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts @@ -4,6 +4,7 @@ import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDa import { DeviceModel } from "@internal/device-model/model/DeviceModel"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { usbHidDeviceConnectionFactoryStubBuilder } from "@internal/usb/service/UsbHidDeviceConnectionFactory.stub"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { DiscoveredDevice } from "@root/src"; @@ -24,6 +25,7 @@ describe("StartDiscoveringUseCase", () => { transport = new WebUsbHidTransport( {} as DeviceModelDataSource, () => logger, + usbHidDeviceConnectionFactoryStubBuilder(), ); }); diff --git a/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts index be736a6b5..a43d56cf5 100644 --- a/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StopDiscoveringUseCase.test.ts @@ -1,6 +1,7 @@ import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { usbHidDeviceConnectionFactoryStubBuilder } from "@internal/usb/service/UsbHidDeviceConnectionFactory.stub"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { StopDiscoveringUseCase } from "./StopDiscoveringUseCase"; @@ -15,6 +16,7 @@ describe("StopDiscoveringUseCase", () => { transport = new WebUsbHidTransport( {} as DeviceModelDataSource, () => logger, + usbHidDeviceConnectionFactoryStubBuilder(), ); }); diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts new file mode 100644 index 000000000..8571a4e03 --- /dev/null +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts @@ -0,0 +1,57 @@ +import * as uuid from "uuid"; + +import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; +import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; +import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { SessionService } from "@internal/device-session/service/SessionService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { SendApduUseCase } from "@internal/send/use-case/SendApduUseCase"; + +jest.mock("uuid"); + +let logger: LoggerPublisherService; +let sessionService: SessionService; + +const fakeSessionId = "fakeSessionId"; + +describe("SendApduUseCase", () => { + beforeAll(() => { + jest.spyOn(uuid, "v4").mockReturnValue(fakeSessionId); + }); + beforeEach(() => { + logger = new DefaultLoggerPublisherService([], "send-apdu-use-case"); + sessionService = new DefaultSessionService(() => logger); + }); + + it("should send an APDU to a connected device", async () => { + // given + const session = sessionStubBuilder(); + sessionService.addSession(session); + const useCase = new SendApduUseCase(sessionService, () => logger); + + // when + const response = await useCase.execute({ + sessionId: fakeSessionId, + apdu: new Uint8Array([0x00, 0x01, 0x02, 0x03]), + }); + + // then + expect(session.connectedDevice.sendApdu).toHaveBeenCalledTimes(1); + expect(response).toBeDefined(); + }); + + it("should throw an error if the session is not found", async () => { + // given + const useCase = new SendApduUseCase(sessionService, () => logger); + + // when + const response = useCase.execute({ + sessionId: fakeSessionId, + apdu: new Uint8Array([0x00, 0x01, 0x02, 0x03]), + }); + + // then + await expect(response).rejects.toBeInstanceOf(DeviceSessionNotFound); + }); +}); diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.ts index ea8c1050a..0b6a7f775 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.ts @@ -3,7 +3,7 @@ import { inject, injectable } from "inversify"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { SessionId } from "@internal/device-session/model/Session"; -import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import type { SessionService } from "@internal/device-session/service/SessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; @@ -17,12 +17,12 @@ export type SendApduUseCaseArgs = { */ @injectable() export class SendApduUseCase { - private readonly _sessionService: DefaultSessionService; + private readonly _sessionService: SessionService; private readonly _logger: LoggerPublisherService; constructor( @inject(deviceSessionTypes.SessionService) - sessionService: DefaultSessionService, + sessionService: SessionService, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerFactory: (tag: string) => LoggerPublisherService, ) { diff --git a/packages/core/src/internal/usb/di/usbModule.test.ts b/packages/core/src/internal/usb/di/usbModule.test.ts index 9c5e97b3c..bfb864a70 100644 --- a/packages/core/src/internal/usb/di/usbModule.test.ts +++ b/packages/core/src/internal/usb/di/usbModule.test.ts @@ -1,6 +1,7 @@ import { Container } from "inversify"; import { deviceModelModuleFactory } from "@internal/device-model/di/deviceModelModule"; +import { deviceSessionModuleFactory } from "@internal/device-session/di/deviceSessionModule"; import { loggerModuleFactory } from "@internal/logger-publisher/di/loggerModule"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; @@ -14,7 +15,11 @@ describe("usbModuleFactory", () => { mod = usbModuleFactory(); container = new Container(); container.load(loggerModuleFactory()); - container.load(mod, deviceModelModuleFactory()); + container.load( + mod, + deviceModelModuleFactory(), + deviceSessionModuleFactory(), + ); }); it("should return the usb module", () => { diff --git a/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts b/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts index 417afc962..4d34e49bc 100644 --- a/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts +++ b/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts @@ -4,7 +4,7 @@ import { deviceModelStubBuilder } from "@internal/device-model/model/DeviceModel import { defaultApduResponseStubBuilder } from "@internal/device-session/model/ApduResponse.stub"; import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; -export function connectedDeviceBuilder( +export function connectedDeviceStubBuilder( id = "42", type: "USB" | "BLE" | "MOCK" = "USB", ): ConnectedDevice { @@ -13,7 +13,8 @@ export function connectedDeviceBuilder( deviceModel, id, type, - sendApdu: async () => + sendApdu: jest.fn(async () => Promise.resolve(Right(defaultApduResponseStubBuilder())), + ), }); } diff --git a/packages/core/src/internal/usb/model/ConnectedDevice.ts b/packages/core/src/internal/usb/model/ConnectedDevice.ts index bd24857b5..cdcf127e8 100644 --- a/packages/core/src/internal/usb/model/ConnectedDevice.ts +++ b/packages/core/src/internal/usb/model/ConnectedDevice.ts @@ -2,7 +2,7 @@ import { DeviceId, DeviceModel, } from "@internal/device-model/model/DeviceModel"; -import { SendApduFnType } from "@internal/usb/transport/UsbHidDeviceConnection"; +import type { SendApduFnType } from "@internal/usb/transport/DeviceConnection"; export type ConnectionType = "USB" | "BLE" | "MOCK"; diff --git a/packages/core/src/internal/usb/model/HIDDevice.stub.ts b/packages/core/src/internal/usb/model/HIDDevice.stub.ts index 3bfa75107..25a686b0f 100644 --- a/packages/core/src/internal/usb/model/HIDDevice.stub.ts +++ b/packages/core/src/internal/usb/model/HIDDevice.stub.ts @@ -1,13 +1,16 @@ -export const hidDeviceStubBuilder = (props: Partial = {}) => ({ +const oninputreport = jest.fn(); +export const hidDeviceStubBuilder = ( + props: Partial = {}, +): HIDDevice => ({ opened: false, productId: 0x4011, vendorId: 0x2c97, productName: "Ledger Nano X", collections: [], open: jest.fn(), - oninputreport: jest.fn(), + oninputreport, close: jest.fn(), - sendReport: jest.fn(), + sendReport: jest.fn(async () => oninputreport()), sendFeatureReport: jest.fn(), forget: jest.fn(), receiveFeatureReport: jest.fn(), diff --git a/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.stub.ts b/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.stub.ts new file mode 100644 index 000000000..2f212301f --- /dev/null +++ b/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.stub.ts @@ -0,0 +1,13 @@ +import { defaultApduReceiverServiceStubBuilder } from "@internal/device-session/service/DefaultApduReceiverService.stub"; +import { defaultApduSenderServiceStubBuilder } from "@internal/device-session/service/DefaultApduSenderService.stub"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/__mocks__/DefaultLoggerService"; +import { UsbHidDeviceConnectionFactory } from "@internal/usb/service/UsbHidDeviceConnectionFactory"; + +const loggerFactory = () => new DefaultLoggerPublisherService(); + +export const usbHidDeviceConnectionFactoryStubBuilder = () => + new UsbHidDeviceConnectionFactory( + () => defaultApduSenderServiceStubBuilder({}, loggerFactory), + () => defaultApduReceiverServiceStubBuilder({}, loggerFactory), + loggerFactory, + ); diff --git a/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts b/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts index ecb8b0b54..9af04f821 100644 --- a/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts +++ b/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts @@ -13,6 +13,8 @@ import { UsbHidDeviceConnection } from "@internal/usb/transport/UsbHidDeviceConn @injectable() export class UsbHidDeviceConnectionFactory { + randomChannel = Math.random() * 0x1000; + constructor( @inject(deviceSessionTypes.ApduSenderServiceFactory) private readonly apduSenderFactory: ( @@ -29,7 +31,7 @@ export class UsbHidDeviceConnectionFactory { public create( device: HIDDevice, channel = Maybe.of( - new Uint8Array([Math.random() % 0xff, Math.random() % 0xff]), + new Uint8Array([this.randomChannel / 0xff, this.randomChannel & 0xff]), ), ): UsbHidDeviceConnection { return new UsbHidDeviceConnection( diff --git a/packages/core/src/internal/usb/transport/DeviceConnection.ts b/packages/core/src/internal/usb/transport/DeviceConnection.ts new file mode 100644 index 000000000..ddf27e177 --- /dev/null +++ b/packages/core/src/internal/usb/transport/DeviceConnection.ts @@ -0,0 +1,12 @@ +import { Either } from "purify-ts"; + +import { SdkError } from "@api/Error"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; + +export type SendApduFnType = ( + apdu: Uint8Array, +) => Promise>; + +export interface DeviceConnection { + sendApdu: SendApduFnType; +} diff --git a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts new file mode 100644 index 000000000..84ba120d8 --- /dev/null +++ b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts @@ -0,0 +1,44 @@ +import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; +import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; +import { defaultApduReceiverServiceStubBuilder } from "@internal/device-session/service/DefaultApduReceiverService.stub"; +import { defaultApduSenderServiceStubBuilder } from "@internal/device-session/service/DefaultApduSenderService.stub"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { hidDeviceStubBuilder } from "@internal/usb/model/HIDDevice.stub"; +import { UsbHidDeviceConnection } from "@internal/usb/transport/UsbHidDeviceConnection"; + +describe("UsbHidDeviceConnection", () => { + let device: HIDDevice; + let apduSender: ApduSenderService; + let apduReceiver: ApduReceiverService; + const logger = (tag: string) => new DefaultLoggerPublisherService([], tag); + + beforeEach(async () => { + device = hidDeviceStubBuilder(); + apduSender = defaultApduSenderServiceStubBuilder(undefined, logger); + apduReceiver = defaultApduReceiverServiceStubBuilder(undefined, logger); + }); + + it("should get device", () => { + // given + const connection = new UsbHidDeviceConnection( + { device, apduSender, apduReceiver }, + logger, + ); + // when + const cDevice = connection.device; + // then + expect(cDevice).toStrictEqual(device); + }); + + it("should send APDU through hid report", () => { + // given + const connection = new UsbHidDeviceConnection( + { device, apduSender, apduReceiver }, + logger, + ); + // when + connection.sendApdu(new Uint8Array(0)); + // then + expect(device.sendReport).toHaveBeenCalled(); + }); +}); diff --git a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts index 05289023a..87b11a403 100644 --- a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts +++ b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts @@ -1,25 +1,22 @@ import { inject } from "inversify"; -import { Either, Left, Right } from "purify-ts"; +import { Left, Right } from "purify-ts"; import { Subject } from "rxjs"; -import { SdkError } from "@api/Error"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { DeviceConnection, SendApduFnType } from "./DeviceConnection"; + type UsbHidDeviceConnectionConstructorArgs = { device: HIDDevice; apduSender: ApduSenderService; apduReceiver: ApduReceiverService; }; -export type SendApduFnType = ( - apdu: Uint8Array, -) => Promise>; - -export class UsbHidDeviceConnection { +export class UsbHidDeviceConnection implements DeviceConnection { private readonly _device: HIDDevice; private readonly _apduSender: ApduSenderService; private readonly _apduReceiver: ApduReceiverService; @@ -35,7 +32,7 @@ export class UsbHidDeviceConnection { this._apduSender = apduSender; this._apduReceiver = apduReceiver; this._sendApduSubject = new Subject(); - this._device.addEventListener("inputreport", this.receiveApdu); + this._device.oninputreport = this.receiveHidInputReport; this._logger = loggerServiceFactory("UsbHidDeviceConnection"); } @@ -43,33 +40,18 @@ export class UsbHidDeviceConnection { return this._device; } - private receiveApdu = (event: HIDInputReportEvent) => { - const data = new Uint8Array(event.data.buffer); - const response = this._apduReceiver.handleFrame(data); - response.caseOf({ - Right: (maybeApduResponse) => { - maybeApduResponse.map((apduResponse) => { - this._logger.info("Received APDU Response", { - data: { response: apduResponse }, - }); - this._sendApduSubject.next(apduResponse); - this._sendApduSubject.complete(); - }); - }, - Left: (err: SdkError) => { - this._sendApduSubject.error(err); - }, - }); - }; - - public sendApdu: SendApduFnType = async (apdu) => { + sendApdu: SendApduFnType = async (apdu) => { this._sendApduSubject = new Subject(); this._logger.info("Sending APDU", { data: { apdu } }); const frames = this._apduSender.getFrames(apdu); for (const frame of frames) { + this._logger.info("Sending Frame", { + data: { frame: frame.getRawData() }, + }); await this._device.sendReport(0, frame.getRawData()); } + return new Promise((resolve) => { this._sendApduSubject.subscribe({ next: (r) => { @@ -81,4 +63,24 @@ export class UsbHidDeviceConnection { }); }); }; + + private receiveHidInputReport = (event: HIDInputReportEvent) => { + const data = new Uint8Array(event.data.buffer); + this._logger.info("Received Frame", { data: { frame: data } }); + const response = this._apduReceiver.handleFrame(data); + response.caseOf({ + Right: (maybeApduResponse) => { + maybeApduResponse.map((apduResponse) => { + this._logger.info("Received APDU Response", { + data: { response: apduResponse }, + }); + this._sendApduSubject.next(apduResponse); + this._sendApduSubject.complete(); + }); + }, + Left: (err) => { + this._sendApduSubject.error(err); + }, + }); + }; } diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index 394966b56..b27822657 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -5,8 +5,6 @@ import { DeviceModel, DeviceModelId, } from "@internal/device-model/model/DeviceModel"; -import { defaultApduReceiverServiceStubBuilder } from "@internal/device-session/service/DefaultApduReceiverService.stub"; -import { defaultApduSenderServiceStubBuilder } from "@internal/device-session/service/DefaultApduSenderService.stub"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { DeviceNotRecognizedError, @@ -16,7 +14,7 @@ import { UsbHidTransportNotSupportedError, } from "@internal/usb/model/Errors"; import { hidDeviceStubBuilder } from "@internal/usb/model/HIDDevice.stub"; -import { UsbHidDeviceConnectionFactory } from "@internal/usb/service/UsbHidDeviceConnectionFactory"; +import { usbHidDeviceConnectionFactoryStubBuilder } from "@internal/usb/service/UsbHidDeviceConnectionFactory.stub"; import { WebUsbHidTransport } from "./WebUsbHidTransport"; @@ -25,17 +23,6 @@ jest.mock("@internal/logger-publisher/service/LoggerPublisherService"); // Our StaticDeviceModelDataSource can directly be used in our unit tests const usbDeviceModelDataSource = new StaticDeviceModelDataSource(); const logger = new DefaultLoggerPublisherService([], "web-usb-hid"); -const apduSenderFactory = jest.fn(() => - defaultApduSenderServiceStubBuilder({}, () => logger), -); -const apduReceiverFactory = jest.fn(() => - defaultApduReceiverServiceStubBuilder({}, () => logger), -); -const usbHidDeviceConnectionFactory = new UsbHidDeviceConnectionFactory( - apduSenderFactory, - apduReceiverFactory, - () => logger, -); const stubDevice: HIDDevice = hidDeviceStubBuilder(); @@ -46,7 +33,7 @@ describe("WebUsbHidTransport", () => { transport = new WebUsbHidTransport( usbDeviceModelDataSource, () => logger, - usbHidDeviceConnectionFactory, + usbHidDeviceConnectionFactoryStubBuilder(), ); }); diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 685699812..ee2a2b3f5 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -36,9 +36,9 @@ type WebHidInternalDevice = { @injectable() export class WebUsbHidTransport implements UsbHidTransport { // Maps uncoupled DiscoveredDevice and WebHID's HIDDevice WebHID - private internalDevicesById: Map; - private connectionListenersAbortController: AbortController; - private logger: LoggerPublisherService; + private _internalDevicesById: Map; + private _connectionListenersAbortController: AbortController; + private _logger: LoggerPublisherService; private _usbHidDeviceConnectionFactory: UsbHidDeviceConnectionFactory; constructor( @@ -49,16 +49,17 @@ export class WebUsbHidTransport implements UsbHidTransport { @inject(usbDiTypes.UsbHidDeviceConnectionFactory) usbHidDeviceConnectionFactory: UsbHidDeviceConnectionFactory, ) { - this.internalDevicesById = new Map(); - this.connectionListenersAbortController = new AbortController(); - this.logger = loggerServiceFactory("WebUsbHidTransport"); + this._internalDevicesById = new Map(); + this._connectionListenersAbortController = new AbortController(); + this._logger = loggerServiceFactory("WebUsbHidTransport"); this._usbHidDeviceConnectionFactory = usbHidDeviceConnectionFactory; } /** + import type { SendApduFnType } from "@internal/usb/transport/DeviceConnection"; * @returns `Either` an error if the WebHID API is not supported, or the WebHID API itself */ - private hidApi = (): Either => { + private get hidApi(): Either { if (this.isSupported()) { return Right(navigator.hid); } @@ -66,15 +67,15 @@ export class WebUsbHidTransport implements UsbHidTransport { return Left( new UsbHidTransportNotSupportedError(new Error("WebHID not supported")), ); - }; + } isSupported() { try { const result = !!navigator?.hid; - this.logger.debug(`isSupported: ${result}`); + this._logger.debug(`isSupported: ${result}`); return result; } catch (error) { - this.logger.error(`isSupported: error`, { data: { error } }); + this._logger.error(`isSupported: error`, { data: { error } }); return false; } } @@ -90,7 +91,7 @@ export class WebUsbHidTransport implements UsbHidTransport { private async promptDeviceAccess(): Promise< Either > { - return EitherAsync.liftEither(this.hidApi()) + return EitherAsync.liftEither(this.hidApi) .map(async (hidApi) => { // `requestDevice` returns an array. but normally the user can select only one device at a time. let hidDevices: HIDDevice[] = []; @@ -101,20 +102,20 @@ export class WebUsbHidTransport implements UsbHidTransport { }); } catch (error) { const deviceError = new NoAccessibleDeviceError(error as Error); - this.logger.error(`promptDeviceAccess: error requesting device`, { + this._logger.error(`promptDeviceAccess: error requesting device`, { data: { error }, }); Sentry.captureException(deviceError); throw deviceError; } - this.logger.debug( + this._logger.debug( `promptDeviceAccess: hidDevices len ${hidDevices.length}`, ); // Granted access to 0 device (by clicking on cancel for ex) results in an error if (hidDevices.length === 0) { - this.logger.warn("No device was selected"); + this._logger.warn("No device was selected"); throw new NoAccessibleDeviceError(new Error("No selected device")); } @@ -123,7 +124,7 @@ export class WebUsbHidTransport implements UsbHidTransport { for (const hidDevice of hidDevices) { discoveredHidDevices.push(hidDevice); - this.logger.debug(`promptDeviceAccess: selected device`, { + this._logger.debug(`promptDeviceAccess: selected device`, { data: { hidDevice }, }); } @@ -153,27 +154,27 @@ export class WebUsbHidTransport implements UsbHidTransport { * So the consumer can directly select this device. */ startDiscovering(): Observable { - this.logger.debug("startDiscovering"); + this._logger.debug("startDiscovering"); // Logs the connection and disconnection events this.startListeningToConnectionEvents(); // There is no unique identifier for the device from the USB/HID connection, // so the previously known accessible devices list cannot be trusted. - this.internalDevicesById.clear(); + this._internalDevicesById.clear(); return from(this.promptDeviceAccess()).pipe( switchMap((either) => { return either.caseOf({ Left: (error) => { - this.logger.error("Error while getting accessible device", { + this._logger.error("Error while getting accessible device", { data: { error }, }); Sentry.captureException(error); throw error; }, Right: (hidDevices) => { - this.logger.info(`Got access to ${hidDevices.length} HID devices`); + this._logger.info(`Got access to ${hidDevices.length} HID devices`); const discoveredDevices = hidDevices.map((hidDevice) => { const usbProductId = this.getHidUsbProductId(hidDevice.productId); @@ -194,15 +195,15 @@ export class WebUsbHidTransport implements UsbHidTransport { discoveredDevice, }; - this.logger.debug( + this._logger.debug( `Discovered device ${id} ${discoveredDevice.deviceModel.productName}`, ); - this.internalDevicesById.set(id, internalDevice); + this._internalDevicesById.set(id, internalDevice); return discoveredDevice; } else { // [ASK] Or we just ignore the not recognized device ? And log them - this.logger.warn( + this._logger.warn( `Device not recognized: 0x${usbProductId.toString(16)}`, ); throw new DeviceNotRecognizedError( @@ -220,7 +221,7 @@ export class WebUsbHidTransport implements UsbHidTransport { } stopDiscovering(): void { - this.logger.debug("stopDiscovering"); + this._logger.debug("stopDiscovering"); this.stopListeningToConnectionEvents(); } @@ -229,30 +230,30 @@ export class WebUsbHidTransport implements UsbHidTransport { * Logs `connect` and `disconnect` events for already accessible devices */ private startListeningToConnectionEvents(): void { - this.logger.debug("startListeningToConnectionEvents"); + this._logger.debug("startListeningToConnectionEvents"); - this.hidApi().map((hidApi) => { + this.hidApi.map((hidApi) => { hidApi.addEventListener( "connect", (event) => { - this.logger.debug("connection event", { data: { event } }); + this._logger.debug("connection event", { data: { event } }); }, - { signal: this.connectionListenersAbortController.signal }, + { signal: this._connectionListenersAbortController.signal }, ); hidApi.addEventListener( "disconnect", (event) => { - this.logger.debug("disconnect event", { data: { event } }); + this._logger.debug("disconnect event", { data: { event } }); }, - { signal: this.connectionListenersAbortController.signal }, + { signal: this._connectionListenersAbortController.signal }, ); }); } private stopListeningToConnectionEvents(): void { - this.logger.debug("stopListeningToConnectionEvents"); - this.connectionListenersAbortController.abort(); + this._logger.debug("stopListeningToConnectionEvents"); + this._connectionListenersAbortController.abort(); } /** @@ -263,12 +264,12 @@ export class WebUsbHidTransport implements UsbHidTransport { }: { deviceId: DeviceId; }): Promise> { - this.logger.debug("connect", { data: { deviceId } }); + this._logger.debug("connect", { data: { deviceId } }); - const internalDevice = this.internalDevicesById.get(deviceId); + const internalDevice = this._internalDevicesById.get(deviceId); if (!internalDevice) { - this.logger.error(`Unknown device ${deviceId}`); + this._logger.error(`Unknown device ${deviceId}`); return Left( new UnknownDeviceError(new Error(`Unknown device ${deviceId}`)), ); @@ -278,10 +279,10 @@ export class WebUsbHidTransport implements UsbHidTransport { await internalDevice.hidDevice.open(); } catch (error) { if (error instanceof DOMException && error.name === "InvalidStateError") { - this.logger.debug(`Device ${deviceId} is already opened`); + this._logger.debug(`Device ${deviceId} is already opened`); } else { const connectionError = new OpeningConnectionError(error as Error); - this.logger.debug(`Error while opening device: ${deviceId}`, { + this._logger.debug(`Error while opening device: ${deviceId}`, { data: { error }, }); Sentry.captureException(connectionError); diff --git a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts new file mode 100644 index 000000000..c44b866a0 --- /dev/null +++ b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts @@ -0,0 +1,43 @@ +import * as uuid from "uuid"; + +import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; +import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { SessionService } from "@internal/device-session/service/SessionService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { GetConnectedDeviceUseCase } from "@internal/usb/use-case/GetConnectedDeviceUseCase"; + +jest.mock("uuid"); + +let logger: LoggerPublisherService; +let sessionService: SessionService; + +const fakeSessionId = "fakeSessionId"; + +describe("GetConnectedDevice", () => { + beforeAll(() => { + jest.spyOn(uuid, "v4").mockReturnValue(fakeSessionId); + }); + beforeEach(() => { + logger = new DefaultLoggerPublisherService( + [], + "get-connected-device-use-case", + ); + sessionService = new DefaultSessionService(() => logger); + }); + + it("should retrieve correct device from session", () => { + // given + const session = sessionStubBuilder(); + sessionService.addSession(session); + const useCase = new GetConnectedDeviceUseCase(sessionService, () => logger); + + // when + const response = useCase.execute({ + sessionId: fakeSessionId, + }); + + // then + expect(session.connectedDevice).toStrictEqual(response); + }); +}); diff --git a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts index 8e1e4a93c..24be221c0 100644 --- a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts +++ b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts @@ -2,7 +2,7 @@ import { inject, injectable } from "inversify"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { SessionId } from "@internal/device-session/model/Session"; -import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import type { SessionService } from "@internal/device-session/service/SessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; @@ -16,12 +16,12 @@ export type GetConnectedDeviceUseCaseArgs = { */ @injectable() export class GetConnectedDeviceUseCase { - private readonly _sessionService: DefaultSessionService; + private readonly _sessionService: SessionService; private readonly _logger: LoggerPublisherService; constructor( @inject(deviceSessionTypes.SessionService) - sessionService: DefaultSessionService, + sessionService: SessionService, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerFactory: (tag: string) => LoggerPublisherService, ) { @@ -34,11 +34,11 @@ export class GetConnectedDeviceUseCase { return deviceSession.caseOf({ Right: (session) => session.connectedDevice, - Left: () => { + Left: (error) => { this._logger.error("Error getting session", { - data: { error: deviceSession.extract() }, + data: { error }, }); - throw deviceSession.extract(); + throw error; }, }); } From ef857f3c014e46db76434915c183a832306da9fe Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 4 Apr 2024 17:43:16 +0200 Subject: [PATCH 162/253] :bug: (smpl): Fix UI to compute real data length & reorder apdu --- apps/sample/src/components/ApduView/index.tsx | 22 +++++++++++-------- apps/sample/src/hooks/useApduForm.ts | 16 +++++++++----- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/apps/sample/src/components/ApduView/index.tsx b/apps/sample/src/components/ApduView/index.tsx index 42efd2d67..e28a1d1c7 100644 --- a/apps/sample/src/components/ApduView/index.tsx +++ b/apps/sample/src/components/ApduView/index.tsx @@ -1,3 +1,4 @@ +import { useCallback, useState } from "react"; import { Button, Divider, Flex, Grid, Input, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; @@ -57,10 +58,19 @@ const inputContainerProps = { style: { borderRadius: 4 } }; export const ApduView: React.FC = () => { const { apduFormValues, setApduFormValue, apdu } = useApduForm(); + const [loading, setLoading] = useState(false); const sdk = useSdk(); const { state: { selected: selectedSessionId }, } = useSessionContext(); + const onSubmit = useCallback(async () => { + setLoading(true); + await sdk.sendApdu({ + sessionId: selectedSessionId!, + apdu, + }); + setLoading(false); + }, [apdu, sdk, selectedSessionId]); return ( @@ -124,6 +134,7 @@ export const ApduView: React.FC = () => { setApduFormValue("data", value)} @@ -135,6 +146,7 @@ export const ApduView: React.FC = () => { setApduFormValue("dataLength", value)} @@ -144,15 +156,7 @@ export const ApduView: React.FC = () => { - { - const response = await sdk.sendApdu({ - sessionId: selectedSessionId as string, - apdu, - }); - console.log(response); - }} - > + Send APDU diff --git a/apps/sample/src/hooks/useApduForm.ts b/apps/sample/src/hooks/useApduForm.ts index deee35fc2..9118bbc99 100644 --- a/apps/sample/src/hooks/useApduForm.ts +++ b/apps/sample/src/hooks/useApduForm.ts @@ -11,17 +11,21 @@ type ApduFormValues = { export function useApduForm() { const [values, setValues] = useState({ - classInstruction: "", - instructionMethod: "", - firstParameter: "", - secondParameter: "", + classInstruction: "e0", + instructionMethod: "01", + firstParameter: "00", + secondParameter: "00", + dataLength: "00", data: "", - dataLength: "", }); const [apdu, setApdu] = useState(Uint8Array.from([])); const setValue = useCallback((field: keyof ApduFormValues, value: string) => { - setValues((prev) => ({ ...prev, [field]: value })); + const newValues = { [field]: value }; + if (field === "data") { + newValues.dataLength = value.length.toString(16); + } + setValues((prev) => ({ ...prev, ...newValues })); }, []); useEffect(() => { From d3138517ea2bbb458383f3d841a78ffc5708672c Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 5 Apr 2024 15:53:50 +0200 Subject: [PATCH 163/253] :technologist: (core): Add numberToByteArray util --- .../service/DefaultApduSenderService.ts | 4 +-- .../device-session/utils/FramerUtils.test.ts | 30 +++++++++++++++++++ .../device-session/utils/FramerUtils.ts | 16 ++++++++-- .../service/UsbHidDeviceConnectionFactory.ts | 6 ++-- 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts index ffaf142cf..4bc82faf4 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts @@ -131,14 +131,14 @@ export class DefaultApduSenderService implements ApduSenderService { FramerUtils.getLastBytesFrom(channel, CHANNEL_LENGTH), ), headTag: new Uint8Array([HEAD_TAG]), - index: new Uint8Array([Math.floor(frameIndex / 0xff), frameIndex & 0xff]), + index: FramerUtils.numberToByteArray(frameIndex, INDEX_LENGTH), length: this.getFrameHeaderSizeFromIndex(frameIndex), dataSize: Maybe.zero(), }); if (frameIndex === 0) { header.setDataSize( Maybe.of( - new Uint8Array([Math.floor(apduSize / 0xff), apduSize & 0xff]), + FramerUtils.numberToByteArray(apduSize, APDU_DATA_LENGTH_LENGTH), ), ); } diff --git a/packages/core/src/internal/device-session/utils/FramerUtils.test.ts b/packages/core/src/internal/device-session/utils/FramerUtils.test.ts index e71eb307d..72cb92c2e 100644 --- a/packages/core/src/internal/device-session/utils/FramerUtils.test.ts +++ b/packages/core/src/internal/device-session/utils/FramerUtils.test.ts @@ -79,4 +79,34 @@ describe("FramerUtils", () => { expect(result).toEqual(0); }); }); + + describe("numberToByteArray", () => { + it("should return a correct Uint8Array", () => { + // Arrange + const number = 26505; + const size = 2; + // Act + const result = FramerUtils.numberToByteArray(number, size); + // Assert + expect(result).toEqual(new Uint8Array([0x67, 0x89])); + }); + it("should return a filled Uint8Array when number is 0 and size is 2", () => { + // Arrange + const number = 0; + const size = 2; + // Act + const result = FramerUtils.numberToByteArray(number, size); + // Assert + expect(result).toEqual(new Uint8Array([0, 0])); + }); + it("should return an empty Uint8Array when number is 42 and size is 0", () => { + // Arrange + const number = 42; + const size = 0; + // Act + const result = FramerUtils.numberToByteArray(number, size); + // Assert + expect(result).toEqual(new Uint8Array([])); + }); + }); }); diff --git a/packages/core/src/internal/device-session/utils/FramerUtils.ts b/packages/core/src/internal/device-session/utils/FramerUtils.ts index b368de6e2..842dc0d8b 100644 --- a/packages/core/src/internal/device-session/utils/FramerUtils.ts +++ b/packages/core/src/internal/device-session/utils/FramerUtils.ts @@ -5,7 +5,7 @@ export const FramerUtils = { * @param Uint8Array */ getLastBytesFrom(array: Uint8Array, size: number): Uint8Array { - return new Uint8Array(array.slice(-size)); + return array.slice(-size); }, /* @@ -14,7 +14,7 @@ export const FramerUtils = { * @param Uint8Array */ getFirstBytesFrom(array: Uint8Array, size: number): Uint8Array { - return new Uint8Array(array.slice(0, size)); + return array.slice(0, size); }, /* @@ -29,4 +29,16 @@ export const FramerUtils = { 0, ); }, + + /* + * Get bytes Uint8Array from number + * + * @param number + * @param size + */ + numberToByteArray(number: number, size: number): Uint8Array { + return new Uint8Array(size).map((_el, index) => { + return (number >> (8 * (size - 1 - index))) & 0xff; + }); + }, }; diff --git a/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts b/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts index 9af04f821..9ddf940da 100644 --- a/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts +++ b/packages/core/src/internal/usb/service/UsbHidDeviceConnectionFactory.ts @@ -1,11 +1,13 @@ import { inject, injectable } from "inversify"; import { Maybe } from "purify-ts"; +import { CHANNEL_LENGTH } from "@internal/device-session/data/FramerConst"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; import { DefaultApduReceiverConstructorArgs } from "@internal/device-session/service/DefaultApduReceiverService"; import { DefaultApduSenderServiceConstructorArgs } from "@internal/device-session/service/DefaultApduSenderService"; +import { FramerUtils } from "@internal/device-session/utils/FramerUtils"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { FRAME_SIZE } from "@internal/usb/data/UsbHidConfig"; @@ -13,7 +15,7 @@ import { UsbHidDeviceConnection } from "@internal/usb/transport/UsbHidDeviceConn @injectable() export class UsbHidDeviceConnectionFactory { - randomChannel = Math.random() * 0x1000; + randomChannel = Math.floor(Math.random() * 0xffff); constructor( @inject(deviceSessionTypes.ApduSenderServiceFactory) @@ -31,7 +33,7 @@ export class UsbHidDeviceConnectionFactory { public create( device: HIDDevice, channel = Maybe.of( - new Uint8Array([this.randomChannel / 0xff, this.randomChannel & 0xff]), + FramerUtils.numberToByteArray(this.randomChannel, CHANNEL_LENGTH), ), ): UsbHidDeviceConnection { return new UsbHidDeviceConnection( From 3f7b864fd652046b0c336524d995eaf950140b30 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 5 Apr 2024 15:55:54 +0200 Subject: [PATCH 164/253] :truck: (smpl): Split Session reducer and provider --- apps/sample/src/app/client-layout.tsx | 4 +- apps/sample/src/components/ApduView/index.tsx | 4 +- apps/sample/src/components/MainView/index.tsx | 2 +- apps/sample/src/components/Sidebar/index.tsx | 6 +- .../src/providers/SessionsProvider/index.tsx | 34 ++++++++++ apps/sample/src/reducers/sessions.ts | 36 +++++++++++ apps/sample/src/reducers/sessions.tsx | 64 ------------------- 7 files changed, 78 insertions(+), 72 deletions(-) create mode 100644 apps/sample/src/providers/SessionsProvider/index.tsx create mode 100644 apps/sample/src/reducers/sessions.ts delete mode 100644 apps/sample/src/reducers/sessions.tsx diff --git a/apps/sample/src/app/client-layout.tsx b/apps/sample/src/app/client-layout.tsx index d2c462b15..2b20fb6f0 100644 --- a/apps/sample/src/app/client-layout.tsx +++ b/apps/sample/src/app/client-layout.tsx @@ -10,13 +10,13 @@ "use client"; import React from "react"; -import { Flex, Icons, StyleProvider } from "@ledgerhq/react-ui"; +import { Flex, StyleProvider } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; import { Header } from "@/components/Header"; import { Sidebar } from "@/components/Sidebar"; import { SdkProvider } from "@/providers/DeviceSdkProvider"; -import { SessionProvider } from "@/reducers/sessions"; +import { SessionProvider } from "@/providers/SessionsProvider"; import { GlobalStyle } from "@/styles/globalstyles"; type ClientRootLayoutProps = { diff --git a/apps/sample/src/components/ApduView/index.tsx b/apps/sample/src/components/ApduView/index.tsx index e28a1d1c7..42037f672 100644 --- a/apps/sample/src/components/ApduView/index.tsx +++ b/apps/sample/src/components/ApduView/index.tsx @@ -1,10 +1,10 @@ -import { useCallback, useState } from "react"; +import React, { useCallback, useState } from "react"; import { Button, Divider, Flex, Grid, Input, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; import { useApduForm } from "@/hooks/useApduForm"; import { useSdk } from "@/providers/DeviceSdkProvider"; -import { useSessionContext } from "@/reducers/sessions"; +import { useSessionContext } from "@/providers/SessionsProvider"; const Root = styled(Flex).attrs({ mx: 15, mt: 10, mb: 5 })` flex-direction: column; diff --git a/apps/sample/src/components/MainView/index.tsx b/apps/sample/src/components/MainView/index.tsx index 13f9e11bd..572f9b3d0 100644 --- a/apps/sample/src/components/MainView/index.tsx +++ b/apps/sample/src/components/MainView/index.tsx @@ -5,7 +5,7 @@ import Image from "next/image"; import styled, { DefaultTheme } from "styled-components"; import { useSdk } from "@/providers/DeviceSdkProvider"; -import { useSessionContext } from "@/reducers/sessions"; +import { useSessionContext } from "@/providers/SessionsProvider"; const Root = styled(Flex)` flex: 1; diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx index 665c8a7b5..b3d133138 100644 --- a/apps/sample/src/components/Sidebar/index.tsx +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -7,7 +7,7 @@ import styled, { DefaultTheme } from "styled-components"; import { Device } from "@/components/Device"; import { Menu } from "@/components/Menu"; import { useSdk } from "@/providers/DeviceSdkProvider"; -import { useSessionContext } from "@/reducers/sessions"; +import { useSessionContext } from "@/providers/SessionsProvider"; const Root = styled(Flex).attrs({ py: 8, px: 6 })` flex-direction: column; @@ -44,7 +44,7 @@ export const Sidebar: React.FC = () => { const [version, setVersion] = useState(""); const sdk = useSdk(); const { - state: { devicesMap }, + state: { deviceById }, } = useSessionContext(); useEffect(() => { @@ -76,7 +76,7 @@ export const Sidebar: React.FC = () => { Device - {Object.entries(devicesMap).map(([sessionId, device]) => ( + {Object.entries(deviceById).map(([sessionId, device]) => ( void; +}; + +const SessionContext: Context = + createContext({ + state: SessionsInitialState, + dispatch: (_value: AddSessionAction) => {}, + }); + +export const SessionProvider: React.FC = ({ + children, +}) => { + const [state, dispatch] = useReducer(sessionsReducer, SessionsInitialState); + + return ( + + {children} + + ); +}; + +export const useSessionContext = () => + useContext(SessionContext); diff --git a/apps/sample/src/reducers/sessions.ts b/apps/sample/src/reducers/sessions.ts new file mode 100644 index 000000000..6ade0ec22 --- /dev/null +++ b/apps/sample/src/reducers/sessions.ts @@ -0,0 +1,36 @@ +import { Reducer } from "react"; +import { ConnectedDevice, SessionId } from "@ledgerhq/device-sdk-core"; + +export type SessionsState = { + selectedId: SessionId | null; + deviceById: Record; +}; + +export type AddSessionAction = { + type: "add_session"; + payload: { sessionId: SessionId; connectedDevice: ConnectedDevice }; +}; + +export const SessionsInitialState: SessionsState = { + selectedId: null, + deviceById: {}, +}; + +export const sessionsReducer: Reducer = ( + state, + action, +) => { + switch (action.type) { + case "add_session": + return { + ...state, + selectedId: action.payload.sessionId, + deviceById: { + ...state.deviceById, + [action.payload.sessionId]: action.payload.connectedDevice, + }, + }; + default: + return state; + } +}; diff --git a/apps/sample/src/reducers/sessions.tsx b/apps/sample/src/reducers/sessions.tsx deleted file mode 100644 index 09440bcdc..000000000 --- a/apps/sample/src/reducers/sessions.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { Context, createContext, Reducer, useContext, useReducer } from "react"; -import { ConnectedDevice, SessionId } from "@ledgerhq/device-sdk-core"; - -type SessionState = { - list: SessionId[]; - selected: SessionId | null; - devicesMap: Record; -}; - -type AddSessionAction = { - type: "add_session"; - payload: { sessionId: SessionId; connectedDevice: ConnectedDevice }; -}; - -export const SessionsInitialState: SessionState = { - list: [], - selected: null, - devicesMap: {}, -}; - -export const sessionReducer: Reducer = ( - state, - action, -) => { - switch (action.type) { - case "add_session": - return { - ...state, - selected: action.payload.sessionId, - devicesMap: { - ...state.devicesMap, - [action.payload.sessionId]: action.payload.connectedDevice, - }, - }; - default: - return state; - } -}; - -type SessionContextType = { - state: SessionState; - dispatch: (value: AddSessionAction) => void; -}; - -const SessionContext: Context = - createContext({ - state: SessionsInitialState, - dispatch: (value: AddSessionAction) => {}, - }); - -export const SessionProvider: React.FC = ({ - children, -}) => { - const [state, dispatch] = useReducer(sessionReducer, SessionsInitialState); - - return ( - - {children} - - ); -}; - -export const useSessionContext = () => - useContext(SessionContext); From 79ee9b82247b8110e654eb3287f08bb9a49e9fba Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 5 Apr 2024 15:57:09 +0200 Subject: [PATCH 165/253] :zap: (smpl): Improve send apdu form --- apps/sample/src/components/ApduView/index.tsx | 38 ++++++++++++------- apps/sample/src/hooks/useApduForm.ts | 38 ++++++++++--------- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/apps/sample/src/components/ApduView/index.tsx b/apps/sample/src/components/ApduView/index.tsx index 42037f672..11f19a4fc 100644 --- a/apps/sample/src/components/ApduView/index.tsx +++ b/apps/sample/src/components/ApduView/index.tsx @@ -57,20 +57,27 @@ const InputContainer = styled(Flex).attrs({ mx: 8, mb: 4 })` const inputContainerProps = { style: { borderRadius: 4 } }; export const ApduView: React.FC = () => { - const { apduFormValues, setApduFormValue, apdu } = useApduForm(); + const { apduFormValues, setApduFormValue, getRawApdu } = useApduForm(); const [loading, setLoading] = useState(false); const sdk = useSdk(); const { - state: { selected: selectedSessionId }, + state: { selectedId: selectedSessionId }, } = useSessionContext(); - const onSubmit = useCallback(async () => { - setLoading(true); - await sdk.sendApdu({ - sessionId: selectedSessionId!, - apdu, - }); - setLoading(false); - }, [apdu, sdk, selectedSessionId]); + const onSubmit = useCallback( + async (values: typeof apduFormValues) => { + setLoading(true); + try { + await sdk.sendApdu({ + sessionId: selectedSessionId!, + apdu: getRawApdu(values), + }); + setLoading(false); + } catch (error) { + setLoading(false); + } + }, + [getRawApdu, sdk, selectedSessionId], + ); return ( @@ -85,11 +92,11 @@ export const ApduView: React.FC = () => { Class instruction - setApduFormValue("classInstruction", value) + setApduFormValue("instructionClass", value) } /> @@ -156,7 +163,10 @@ export const ApduView: React.FC = () => { - + onSubmit(apduFormValues)} + disabled={loading} + > Send APDU diff --git a/apps/sample/src/hooks/useApduForm.ts b/apps/sample/src/hooks/useApduForm.ts index 9118bbc99..116cc1fd1 100644 --- a/apps/sample/src/hooks/useApduForm.ts +++ b/apps/sample/src/hooks/useApduForm.ts @@ -1,7 +1,7 @@ -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useState } from "react"; type ApduFormValues = { - classInstruction: string; + instructionClass: string; instructionMethod: string; firstParameter: string; secondParameter: string; @@ -11,40 +11,42 @@ type ApduFormValues = { export function useApduForm() { const [values, setValues] = useState({ - classInstruction: "e0", + instructionClass: "e0", instructionMethod: "01", firstParameter: "00", secondParameter: "00", dataLength: "00", data: "", }); - const [apdu, setApdu] = useState(Uint8Array.from([])); const setValue = useCallback((field: keyof ApduFormValues, value: string) => { const newValues = { [field]: value }; if (field === "data") { - newValues.dataLength = value.length.toString(16); + newValues.dataLength = Math.floor(value.length / 2).toString(16); } setValues((prev) => ({ ...prev, ...newValues })); }, []); - useEffect(() => { - const newApdu = Object.values(values).reduce( - (acc, curr) => [ - ...acc, - ...chunkString(curr.replace(/\s/g, "")) - .map((char) => Number(`0x${char}`)) - .filter((nbr) => !Number.isNaN(nbr)), - ], - [] as number[], - ); - setApdu(Uint8Array.from(newApdu)); - }, [values]); + const getRawApdu = useCallback( + (formValues: ApduFormValues): Uint8Array => + new Uint8Array( + Object.values(formValues).reduce( + (acc, curr) => [ + ...acc, + ...chunkString(curr.replace(/\s/g, "")) + .map((char) => Number(`0x${char}`)) + .filter((nbr) => !Number.isNaN(nbr)), + ], + [] as number[], + ), + ), + [], + ); return { apduFormValues: values, setApduFormValue: setValue, - apdu, + getRawApdu, }; } From c9088efa8150fd4c220a1bfb1a443f42b7dd22d0 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 5 Apr 2024 16:25:14 +0200 Subject: [PATCH 166/253] :bulb: (core): Add tsdoc comments --- .../service/DefaultApduSenderService.ts | 13 +++++++++++++ .../internal/usb/transport/WebUsbHidTransport.ts | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts index 4bc82faf4..dcd75effb 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts @@ -28,6 +28,11 @@ export type DefaultApduSenderServiceConstructorArgs = { padding?: boolean; }; +/** + * Default implementation of ApduSenderService + * + * Split APDU in an array of frames readies to send to a ConnectedDevice + */ @injectable() export class DefaultApduSenderService implements ApduSenderService { protected _frameSize: number; @@ -35,6 +40,14 @@ export class DefaultApduSenderService implements ApduSenderService { protected _padding: boolean; private _logger: LoggerPublisherService; + /** + * Constructor + * + * @param frameSize + * @param channel + * @param padding + * @param loggerServiceFactory + */ constructor( { frameSize, diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index ee2a2b3f5..bc86e48b7 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -56,8 +56,8 @@ export class WebUsbHidTransport implements UsbHidTransport { } /** - import type { SendApduFnType } from "@internal/usb/transport/DeviceConnection"; - * @returns `Either` an error if the WebHID API is not supported, or the WebHID API itself + * Get the WebHID API if supported or error + * @returns `Either` */ private get hidApi(): Either { if (this.isSupported()) { From 1fc5e0979cb59f121404fd7586ed14596fde9d58 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 5 Apr 2024 18:07:54 +0200 Subject: [PATCH 167/253] :recycle: (core): Naming review --- .../service/DefaultApduReceiverService.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts index f7dabfbf5..10139c5d8 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts @@ -48,8 +48,10 @@ export class DefaultApduReceiverService implements ApduReceiverService { * * @param Uint8Array */ - public handleFrame(apdu: Uint8Array): Either> { - const frame = this.apduToFrame(apdu); + public handleFrame( + frameBytes: Uint8Array, + ): Either> { + const frame = this.getFrameFrom(frameBytes); return frame.map((value) => { this._logger.info("handle frame", { @@ -106,14 +108,14 @@ export class DefaultApduReceiverService implements ApduReceiverService { * * @param Uint8Array */ - private apduToFrame(apdu: Uint8Array): Either { + private getFrameFrom(rawApdu: Uint8Array): Either { const channelSize = this._channel.caseOf({ Just: () => CHANNEL_LENGTH, Nothing: () => 0, }); - const headTag = apdu.slice(channelSize, channelSize + HEAD_TAG_LENGTH); - const index = apdu.slice( + const headTag = rawApdu.slice(channelSize, channelSize + HEAD_TAG_LENGTH); + const index = rawApdu.slice( channelSize + HEAD_TAG_LENGTH, channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH, ); @@ -128,18 +130,18 @@ export class DefaultApduReceiverService implements ApduReceiverService { const dataSizeLength = isFirstIndex ? APDU_DATA_LENGTH_LENGTH : 0; if ( - apdu.length < + rawApdu.length < channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH + dataSizeLength ) { return Left(new ReceiverApduError("Unable to parse header from apdu")); } const dataSize = isFirstIndex - ? Just(apdu.slice(dataSizeIndex, dataSizeIndex + dataSizeLength)) + ? Just(rawApdu.slice(dataSizeIndex, dataSizeIndex + dataSizeLength)) : Nothing; const dataIndex = dataSizeIndex + dataSizeLength; - const data = apdu.slice(dataIndex); + const data = rawApdu.slice(dataIndex); const frame = new Frame({ header: new FrameHeader({ From e3d258189963e02c503242a2c12aa37279cf5fc2 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 8 Apr 2024 14:28:50 +0200 Subject: [PATCH 168/253] =?UTF-8?q?=F0=9F=94=A8=20(scripts):=20Update=20bu?= =?UTF-8?q?ild.mjs=20scripts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/scripts/build.mjs | 6 ++---- packages/signer/scripts/build.mjs | 6 ++---- packages/trusted-apps/scripts/build.mjs | 6 ++---- packages/ui/scripts/build.mjs | 6 ++---- 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/packages/core/scripts/build.mjs b/packages/core/scripts/build.mjs index 741cf6dae..242c8d647 100644 --- a/packages/core/scripts/build.mjs +++ b/packages/core/scripts/build.mjs @@ -3,6 +3,7 @@ import { build } from "esbuild"; import { alias, buildConfig } from "@ledgerhq/esbuild-tools"; import path from "node:path"; import dtsPlugin from "esbuild-plugin-d.ts"; +import pkg from "../package.json" assert { type: "json" }; const root = path.join(__dirname, ".."); const srcRoot = path.join(root, "src"); @@ -10,9 +11,6 @@ const outdir = path.join(root, "lib"); const tsconfigEsm = path.join(root, "tsconfig.esm.json"); const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); -const pkg = fs.readFileSync(path.join(root, "package.json"), "utf-8"); -const packageJson = JSON.parse(pkg); - const conf = { entryPoints: [path.join(root, "index.ts")], plugins: [ @@ -24,7 +22,7 @@ const conf = { ], }; -const common = buildConfig(conf, packageJson); +const common = buildConfig(conf, pkg); const buildEsm = async () => { const config = { diff --git a/packages/signer/scripts/build.mjs b/packages/signer/scripts/build.mjs index 49fc33fca..cec5397ea 100644 --- a/packages/signer/scripts/build.mjs +++ b/packages/signer/scripts/build.mjs @@ -2,6 +2,7 @@ import { build } from "esbuild"; import { /* alias, */ buildConfig } from "@ledgerhq/esbuild-tools"; import dtsPlugin from "esbuild-plugin-d.ts"; +import pkg from "../package.json" assert { type: "json" }; const root = path.join(__dirname, ".."); const srcRoot = path.join(root, "src"); @@ -9,9 +10,6 @@ const outdir = path.join(root, "lib"); const tsconfigEsm = path.join(root, "tsconfig.esm.json"); const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); -const pkg = fs.readFileSync(path.join(root, "package.json"), "utf-8"); -const packageJson = JSON.parse(pkg); - const conf = { entryPoints: [path.join(srcRoot, "index.ts")], plugins: [ @@ -24,7 +22,7 @@ const conf = { ], }; -const common = buildConfig(conf, packageJson); +const common = buildConfig(conf, pkg); const buildEsm = async () => { const config = { diff --git a/packages/trusted-apps/scripts/build.mjs b/packages/trusted-apps/scripts/build.mjs index 49fc33fca..cec5397ea 100644 --- a/packages/trusted-apps/scripts/build.mjs +++ b/packages/trusted-apps/scripts/build.mjs @@ -2,6 +2,7 @@ import { build } from "esbuild"; import { /* alias, */ buildConfig } from "@ledgerhq/esbuild-tools"; import dtsPlugin from "esbuild-plugin-d.ts"; +import pkg from "../package.json" assert { type: "json" }; const root = path.join(__dirname, ".."); const srcRoot = path.join(root, "src"); @@ -9,9 +10,6 @@ const outdir = path.join(root, "lib"); const tsconfigEsm = path.join(root, "tsconfig.esm.json"); const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); -const pkg = fs.readFileSync(path.join(root, "package.json"), "utf-8"); -const packageJson = JSON.parse(pkg); - const conf = { entryPoints: [path.join(srcRoot, "index.ts")], plugins: [ @@ -24,7 +22,7 @@ const conf = { ], }; -const common = buildConfig(conf, packageJson); +const common = buildConfig(conf, pkg); const buildEsm = async () => { const config = { diff --git a/packages/ui/scripts/build.mjs b/packages/ui/scripts/build.mjs index 49fc33fca..cec5397ea 100644 --- a/packages/ui/scripts/build.mjs +++ b/packages/ui/scripts/build.mjs @@ -2,6 +2,7 @@ import { build } from "esbuild"; import { /* alias, */ buildConfig } from "@ledgerhq/esbuild-tools"; import dtsPlugin from "esbuild-plugin-d.ts"; +import pkg from "../package.json" assert { type: "json" }; const root = path.join(__dirname, ".."); const srcRoot = path.join(root, "src"); @@ -9,9 +10,6 @@ const outdir = path.join(root, "lib"); const tsconfigEsm = path.join(root, "tsconfig.esm.json"); const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); -const pkg = fs.readFileSync(path.join(root, "package.json"), "utf-8"); -const packageJson = JSON.parse(pkg); - const conf = { entryPoints: [path.join(srcRoot, "index.ts")], plugins: [ @@ -24,7 +22,7 @@ const conf = { ], }; -const common = buildConfig(conf, packageJson); +const common = buildConfig(conf, pkg); const buildEsm = async () => { const config = { From f94a10d92d38cfa6e8f7c89cbaebe6174ce5549e Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 8 Apr 2024 17:35:00 +0200 Subject: [PATCH 169/253] =?UTF-8?q?=F0=9F=94=A7=20(packages):=20Set=20pack?= =?UTF-8?q?ages=20as=20private=20to=20prevent=20publishing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/signer/package.json | 1 + packages/trusted-apps/package.json | 1 + packages/ui/package.json | 1 + 3 files changed, 3 insertions(+) diff --git a/packages/signer/package.json b/packages/signer/package.json index fcc1cf810..1563c55af 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -4,6 +4,7 @@ "license": "MIT", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", + "private": true, "exports": { ".": { "require": "./lib/cjs/index.js", diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 6ce829628..1068f1319 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -4,6 +4,7 @@ "license": "MIT", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", + "private": true, "exports": { ".": { "require": "./lib/cjs/index.js", diff --git a/packages/ui/package.json b/packages/ui/package.json index 1e90c2912..49ebbb928 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -4,6 +4,7 @@ "license": "MIT", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", + "private": true, "exports": { ".": { "require": "./lib/cjs/index.js", From 75e7f31c226fb67d4bbc36752219cf782eee4b99 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 8 Apr 2024 17:32:24 +0200 Subject: [PATCH 170/253] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20(repo):=20Updating?= =?UTF-8?q?=20dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sample/.eslintrc.js | 15 + apps/sample/package.json | 10 +- apps/sample/src/app/client-layout.tsx | 2 +- apps/sample/src/app/page.tsx | 1 - package.json | 3 +- packages/config/eslint/index.js | 5 +- packages/config/eslint/package.json | 9 +- packages/config/prettier/package.json | 2 +- packages/config/typescript/package.json | 8 +- packages/core/.eslintrc.js | 2 +- packages/core/package.json | 8 +- packages/signer/.eslintrc.js | 2 +- packages/signer/package.json | 8 +- packages/trusted-apps/.eslintrc.js | 2 +- packages/trusted-apps/package.json | 8 +- packages/ui/.eslintrc.js | 2 +- packages/ui/package.json | 8 +- pnpm-lock.yaml | 1507 ++++++++++++----------- 18 files changed, 821 insertions(+), 781 deletions(-) diff --git a/apps/sample/.eslintrc.js b/apps/sample/.eslintrc.js index 427a5846e..ad2bded92 100644 --- a/apps/sample/.eslintrc.js +++ b/apps/sample/.eslintrc.js @@ -1,7 +1,22 @@ +const { overrides } = require("../../packages/config/eslint"); + module.exports = { extends: ["next", "@ledgerhq/dsdk"], parserOptions: { project: true, tsconfigRootDir: __dirname, }, + overrides: [ + { + files: [ + "src/app/page.tsx", + "src/app/global-error.tsx", + "src/app/client-layout.tsx", + "src/app/**/page.tsx", + ], + rules: { + "no-restricted-syntax": 0, + }, + }, + ], }; diff --git a/apps/sample/package.json b/apps/sample/package.json index 8e33ff765..6744cfa7e 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -14,8 +14,8 @@ }, "dependencies": { "@ledgerhq/device-sdk-core": "workspace:*", - "@ledgerhq/react-ui": "^0.14.13", - "@sentry/nextjs": "^7.105.0", + "@ledgerhq/react-ui": "^0.14.16", + "@sentry/nextjs": "^7.109.0", "next": "14.0.4", "react": "^18", "react-dom": "^18", @@ -25,10 +25,10 @@ "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/prettier-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", - "@types/react": "^18", + "@types/react": "^18.2.74", "@types/styled-components": "^5.1.25", - "autoprefixer": "^10.0.1", + "autoprefixer": "^10.4.19", "eslint-config-next": "14.0.4", - "postcss": "^8" + "postcss": "^8.4.38" } } diff --git a/apps/sample/src/app/client-layout.tsx b/apps/sample/src/app/client-layout.tsx index 57c527e5c..4e328080e 100644 --- a/apps/sample/src/app/client-layout.tsx +++ b/apps/sample/src/app/client-layout.tsx @@ -10,7 +10,7 @@ "use client"; import React from "react"; -import { Flex, Icons, StyleProvider } from "@ledgerhq/react-ui"; +import { Flex, StyleProvider } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; import { Header } from "@/components/Header"; diff --git a/apps/sample/src/app/page.tsx b/apps/sample/src/app/page.tsx index b698d7daa..1cfb67d75 100644 --- a/apps/sample/src/app/page.tsx +++ b/apps/sample/src/app/page.tsx @@ -7,5 +7,4 @@ const Home: React.FC = () => { return ; }; -// eslint-disable-next-line no-restricted-syntax export default Home; diff --git a/package.json b/package.json index 6db5d0880..92b9ed6e1 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,7 @@ "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.1", "@types/jest": "^29.5.12", - "@types/node": "^20.12.4", - "concurrently": "^8.2.2", + "@types/node": "^20.12.5", "danger": "^11.3.1", "esbuild": "^0.20.2", "esbuild-plugin-d.ts": "^1.2.3", diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index 243cc86e6..a95d570e4 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -5,13 +5,16 @@ const project = resolve(process.cwd(), "tsconfig.json"); /** @type {import("eslint").Linter.Config} */ module.exports = { extends: ["eslint:recommended", "prettier", "turbo"], - plugins: ["only-warn", "simple-import-sort"], + plugins: ["simple-import-sort"], globals: { React: true, JSX: true, node: true, console: true, }, + parserOptions: { + ecmaVersion: "latest", + }, env: { es6: true, }, diff --git a/packages/config/eslint/package.json b/packages/config/eslint/package.json index 626c965d4..a5fb90d93 100644 --- a/packages/config/eslint/package.json +++ b/packages/config/eslint/package.json @@ -7,12 +7,11 @@ "index.js" ], "devDependencies": { - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", - "@vercel/style-guide": "^5.1.0", + "@typescript-eslint/eslint-plugin": "^7.5.0", + "@typescript-eslint/parser": "^7.5.0", + "@vercel/style-guide": "^6.0.0", "eslint-config-prettier": "^9.1.0", - "eslint-config-turbo": "^1.10.12", - "eslint-plugin-only-warn": "^1.1.0", + "eslint-config-turbo": "^1.13.2", "eslint-plugin-simple-import-sort": "^10.0.0" } } diff --git a/packages/config/prettier/package.json b/packages/config/prettier/package.json index c81279052..72b69e5a6 100644 --- a/packages/config/prettier/package.json +++ b/packages/config/prettier/package.json @@ -7,6 +7,6 @@ "index.js" ], "devDependencies": { - "prettier": "^3.1.1" + "prettier": "^3.2.5" } } diff --git a/packages/config/typescript/package.json b/packages/config/typescript/package.json index fa20f8a78..42431f756 100644 --- a/packages/config/typescript/package.json +++ b/packages/config/typescript/package.json @@ -7,9 +7,9 @@ "web.json" ], "devDependencies": { - "@tsconfig/recommended": "^1.0.3", - "@types/eslint": "^8.44.9", - "@types/react": "^18", - "@types/react-dom": "^18" + "@tsconfig/recommended": "^1.0.6", + "@types/eslint": "^8.56.7", + "@types/react": "^18.2.74", + "@types/react-dom": "^18.2.24" } } diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index 55898adda..610011381 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -45,7 +45,7 @@ module.exports = { within: true, }, parserOptions: { - ecmaVersion: 2018, + ecmaVersion: "latest", sourceType: "module", }, }, diff --git a/packages/core/package.json b/packages/core/package.json index 8b514e16e..09cd5249a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -15,7 +15,7 @@ "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc && (concurrently \"tsc -w -p tsconfig.prod.json\" \"tsc-alias -w -p tsconfig.prod.json\")", "lint": "eslint --cache --ext .ts \"src\"", - "lint:fix": "eslint --cache --fix --ext .ts \"src\"", + "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", "test": "jest", @@ -29,9 +29,9 @@ "inversify": "^6.0.2", "inversify-logger-middleware": "^3.1.0", "purify-ts": "^2.0.3", - "reflect-metadata": "^0.2.1", + "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", - "semver": "^7.5.4", + "semver": "^7.6.0", "uuid": "^9.0.1" }, "devDependencies": { @@ -40,7 +40,7 @@ "@ledgerhq/jest-config-dsdk": "workspace:*", "@ledgerhq/prettier-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", - "@types/semver": "^7.5.6", + "@types/semver": "^7.5.8", "@types/uuid": "^9.0.8", "@types/w3c-web-hid": "^1.0.6", "ts-node": "^10.9.2" diff --git a/packages/signer/.eslintrc.js b/packages/signer/.eslintrc.js index 4e17c249a..4ba35c806 100644 --- a/packages/signer/.eslintrc.js +++ b/packages/signer/.eslintrc.js @@ -39,7 +39,7 @@ module.exports = { within: true, }, parserOptions: { - ecmaVersion: 2018, + ecmaVersion: "latest", sourceType: "module", }, }, diff --git a/packages/signer/package.json b/packages/signer/package.json index 1563c55af..2d2edefbf 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -18,7 +18,7 @@ "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", - "lint:fix": "eslint --cache --fix --ext .ts \"src\"", + "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", "typecheck": "tsc --noEmit", @@ -27,13 +27,13 @@ }, "dependencies": { "inversify": "^6.0.2", - "reflect-metadata": "^0.2.1" + "reflect-metadata": "^0.2.2" }, "devDependencies": { "@ledgerhq/esbuild-tools": "workspace:*", - "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", - "@ledgerhq/prettier-config-dsdk": "workspace:*" + "@ledgerhq/prettier-config-dsdk": "workspace:*", + "@ledgerhq/tsconfig-dsdk": "workspace:*" } } diff --git a/packages/trusted-apps/.eslintrc.js b/packages/trusted-apps/.eslintrc.js index 4e17c249a..4ba35c806 100644 --- a/packages/trusted-apps/.eslintrc.js +++ b/packages/trusted-apps/.eslintrc.js @@ -39,7 +39,7 @@ module.exports = { within: true, }, parserOptions: { - ecmaVersion: 2018, + ecmaVersion: "latest", sourceType: "module", }, }, diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 1068f1319..35696e367 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -17,7 +17,7 @@ "scripts": { "build": "rimraf lib && zx scripts/build.mjs", "lint": "eslint --cache --ext .ts \"src\"", - "lint:fix": "eslint --cache --fix --ext .ts \"src\"", + "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", "typecheck": "tsc --noEmit", @@ -27,13 +27,13 @@ }, "dependencies": { "inversify": "^6.0.2", - "reflect-metadata": "^0.2.1" + "reflect-metadata": "^0.2.2" }, "devDependencies": { "@ledgerhq/esbuild-tools": "workspace:*", - "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", - "@ledgerhq/prettier-config-dsdk": "workspace:*" + "@ledgerhq/prettier-config-dsdk": "workspace:*", + "@ledgerhq/tsconfig-dsdk": "workspace:*" } } diff --git a/packages/ui/.eslintrc.js b/packages/ui/.eslintrc.js index 4e17c249a..4ba35c806 100644 --- a/packages/ui/.eslintrc.js +++ b/packages/ui/.eslintrc.js @@ -39,7 +39,7 @@ module.exports = { within: true, }, parserOptions: { - ecmaVersion: 2018, + ecmaVersion: "latest", sourceType: "module", }, }, diff --git a/packages/ui/package.json b/packages/ui/package.json index 49ebbb928..900743bc8 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -18,7 +18,7 @@ "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc --watch", "lint": "eslint --cache --ext .ts \"src\"", - "lint:fix": "eslint --cache --fix --ext .ts \"src\"", + "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", "typecheck": "tsc --noEmit", @@ -27,13 +27,13 @@ }, "dependencies": { "inversify": "^6.0.2", - "reflect-metadata": "^0.2.1" + "reflect-metadata": "^0.2.2" }, "devDependencies": { "@ledgerhq/esbuild-tools": "workspace:*", - "@ledgerhq/tsconfig-dsdk": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", - "@ledgerhq/prettier-config-dsdk": "workspace:*" + "@ledgerhq/prettier-config-dsdk": "workspace:*", + "@ledgerhq/tsconfig-dsdk": "workspace:*" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c86222347..29c96689b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,11 +18,8 @@ importers: specifier: ^29.5.12 version: 29.5.12 '@types/node': - specifier: ^20.12.4 - version: 20.12.4 - concurrently: - specifier: ^8.2.2 - version: 8.2.2 + specifier: ^20.12.5 + version: 20.12.5 danger: specifier: ^11.3.1 version: 11.3.1 @@ -43,7 +40,7 @@ importers: version: 6.2.11 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.12.4) + version: 29.7.0(@types/node@20.12.5) prettier: specifier: ^3.2.5 version: 3.2.5 @@ -72,11 +69,11 @@ importers: specifier: workspace:* version: link:../../packages/core '@ledgerhq/react-ui': - specifier: ^0.14.13 - version: 0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11) + specifier: ^0.14.16 + version: 0.14.16(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11) '@sentry/nextjs': - specifier: ^7.105.0 - version: 7.107.0(next@14.0.4)(react@18.2.0) + specifier: ^7.109.0 + version: 7.109.0(next@14.0.4)(react@18.2.0) next: specifier: 14.0.4 version: 14.0.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0) @@ -100,43 +97,40 @@ importers: specifier: workspace:* version: link:../../packages/config/typescript '@types/react': - specifier: ^18 - version: 18.2.45 + specifier: ^18.2.74 + version: 18.2.74 '@types/styled-components': specifier: ^5.1.25 version: 5.1.34 autoprefixer: - specifier: ^10.0.1 - version: 10.4.16(postcss@8.4.32) + specifier: ^10.4.19 + version: 10.4.19(postcss@8.4.38) eslint-config-next: specifier: 14.0.4 version: 14.0.4(eslint@8.57.0)(typescript@5.4.4) postcss: - specifier: ^8 - version: 8.4.32 + specifier: ^8.4.38 + version: 8.4.38 packages/config/esbuild: {} packages/config/eslint: devDependencies: '@typescript-eslint/eslint-plugin': - specifier: ^6.14.0 - version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.4) + specifier: ^7.5.0 + version: 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4) '@typescript-eslint/parser': - specifier: ^6.14.0 - version: 6.14.0(eslint@8.57.0)(typescript@5.4.4) + specifier: ^7.5.0 + version: 7.5.0(eslint@8.57.0)(typescript@5.4.4) '@vercel/style-guide': - specifier: ^5.1.0 - version: 5.1.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4) + specifier: ^6.0.0 + version: 6.0.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) eslint-config-turbo: - specifier: ^1.10.12 - version: 1.11.2(eslint@8.57.0) - eslint-plugin-only-warn: - specifier: ^1.1.0 - version: 1.1.0 + specifier: ^1.13.2 + version: 1.13.2(eslint@8.57.0) eslint-plugin-simple-import-sort: specifier: ^10.0.0 version: 10.0.0(eslint@8.57.0) @@ -145,28 +139,28 @@ importers: devDependencies: ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.4)(typescript@5.4.4) + version: 10.9.2(@types/node@20.12.5)(typescript@5.4.4) packages/config/prettier: devDependencies: prettier: - specifier: ^3.1.1 + specifier: ^3.2.5 version: 3.2.5 packages/config/typescript: devDependencies: '@tsconfig/recommended': - specifier: ^1.0.3 - version: 1.0.3 + specifier: ^1.0.6 + version: 1.0.6 '@types/eslint': - specifier: ^8.44.9 - version: 8.56.0 + specifier: ^8.56.7 + version: 8.56.7 '@types/react': - specifier: ^18 - version: 18.2.45 + specifier: ^18.2.74 + version: 18.2.74 '@types/react-dom': - specifier: ^18 - version: 18.2.18 + specifier: ^18.2.24 + version: 18.2.24 packages/core: dependencies: @@ -183,14 +177,14 @@ importers: specifier: ^2.0.3 version: 2.0.3 reflect-metadata: - specifier: ^0.2.1 - version: 0.2.1 + specifier: ^0.2.2 + version: 0.2.2 rxjs: specifier: ^7.8.1 version: 7.8.1 semver: - specifier: ^7.5.4 - version: 7.5.4 + specifier: ^7.6.0 + version: 7.6.0 uuid: specifier: ^9.0.1 version: 9.0.1 @@ -211,8 +205,8 @@ importers: specifier: workspace:* version: link:../config/typescript '@types/semver': - specifier: ^7.5.6 - version: 7.5.6 + specifier: ^7.5.8 + version: 7.5.8 '@types/uuid': specifier: ^9.0.8 version: 9.0.8 @@ -221,7 +215,7 @@ importers: version: 1.0.6 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.4)(typescript@5.4.4) + version: 10.9.2(@types/node@20.12.5)(typescript@5.4.4) packages/signer: dependencies: @@ -229,8 +223,8 @@ importers: specifier: ^6.0.2 version: 6.0.2 reflect-metadata: - specifier: ^0.2.1 - version: 0.2.1 + specifier: ^0.2.2 + version: 0.2.2 devDependencies: '@ledgerhq/esbuild-tools': specifier: workspace:* @@ -254,8 +248,8 @@ importers: specifier: ^6.0.2 version: 6.0.2 reflect-metadata: - specifier: ^0.2.1 - version: 0.2.1 + specifier: ^0.2.2 + version: 0.2.2 devDependencies: '@ledgerhq/esbuild-tools': specifier: workspace:* @@ -279,8 +273,8 @@ importers: specifier: ^6.0.2 version: 6.0.2 reflect-metadata: - specifier: ^0.2.1 - version: 0.2.1 + specifier: ^0.2.2 + version: 0.2.2 devDependencies: '@ledgerhq/esbuild-tools': specifier: workspace:* @@ -335,18 +329,18 @@ packages: '@babel/helpers': 7.24.4 '@babel/parser': 7.24.4 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 + '@babel/traverse': 7.24.1(supports-color@5.5.0) '@babel/types': 7.24.0 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/eslint-parser@7.23.3(@babel/core@7.24.4)(eslint@8.57.0): - resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} + /@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@8.57.0): + resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 @@ -381,7 +375,7 @@ packages: dependencies: '@babel/compat-data': 7.23.5 '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 + browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 @@ -454,7 +448,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 + '@babel/traverse': 7.24.1(supports-color@5.5.0) '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color @@ -603,8 +597,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/runtime@7.23.6: - resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -617,23 +611,6 @@ packages: '@babel/parser': 7.24.4 '@babel/types': 7.24.0 - /@babel/traverse@7.24.1: - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/traverse@7.24.1(supports-color@5.5.0): resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} @@ -650,7 +627,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: false /@babel/types@7.24.0: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} @@ -667,7 +643,7 @@ packages: /@changesets/apply-release-plan@7.0.0: resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@changesets/config': 3.0.0 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.0 @@ -679,18 +655,18 @@ packages: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.5.4 + semver: 7.6.0 dev: true /@changesets/assemble-release-plan@6.0.0: resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.0.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - semver: 7.5.4 + semver: 7.6.0 dev: true /@changesets/changelog-git@0.2.0: @@ -713,7 +689,7 @@ packages: resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} hasBin: true dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@changesets/apply-release-plan': 7.0.0 '@changesets/assemble-release-plan': 6.0.0 '@changesets/changelog-git': 0.2.0 @@ -728,7 +704,7 @@ packages: '@changesets/types': 6.0.0 '@changesets/write': 0.3.0 '@manypkg/get-packages': 1.1.3 - '@types/semver': 7.5.6 + '@types/semver': 7.5.8 ansi-colors: 4.1.3 chalk: 2.4.2 ci-info: 3.9.0 @@ -741,7 +717,7 @@ packages: p-limit: 2.3.0 preferred-pm: 3.1.2 resolve-from: 5.0.0 - semver: 7.5.4 + semver: 7.6.0 spawndamnit: 2.0.0 term-size: 2.2.1 tty-table: 4.2.3 @@ -772,7 +748,7 @@ packages: '@manypkg/get-packages': 1.1.3 chalk: 2.4.2 fs-extra: 7.0.1 - semver: 7.5.4 + semver: 7.6.0 dev: true /@changesets/get-github-info@0.6.0: @@ -787,7 +763,7 @@ packages: /@changesets/get-release-plan@4.0.0: resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@changesets/assemble-release-plan': 6.0.0 '@changesets/config': 3.0.0 '@changesets/pre': 2.0.0 @@ -803,7 +779,7 @@ packages: /@changesets/git@3.0.0: resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -828,7 +804,7 @@ packages: /@changesets/pre@2.0.0: resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -838,7 +814,7 @@ packages: /@changesets/read@0.6.0: resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@changesets/git': 3.0.0 '@changesets/logger': 0.1.0 '@changesets/parse': 0.4.0 @@ -859,7 +835,7 @@ packages: /@changesets/write@0.3.0: resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 @@ -877,7 +853,7 @@ packages: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.3 @@ -913,7 +889,7 @@ packages: resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} dev: false - /@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0): + /@emotion/react@11.11.3(@types/react@18.2.74)(react@18.2.0): resolution: {integrity: sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==} peerDependencies: '@types/react': '*' @@ -922,14 +898,14 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.3 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.2.45 + '@types/react': 18.2.74 hoist-non-react-statics: 3.3.2 react: 18.2.0 dev: false @@ -1203,7 +1179,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.0 @@ -1243,7 +1219,7 @@ packages: '@floating-ui/utils': 0.2.1 dev: false - /@floating-ui/react-dom@0.4.3(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + /@floating-ui/react-dom@0.4.3(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-ZL88ryd9p6sFh9jIC/+05JZoNsogcq6U09cygQjiy757QtQqxIVLQwFag+BAWWYqpNEMO0S60fkqmh8KIAV4oA==} peerDependencies: react: '>=16.8.0' @@ -1252,7 +1228,7 @@ packages: '@floating-ui/dom': 0.1.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.45)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.74)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -1299,7 +1275,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -1347,7 +1323,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1368,14 +1344,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.12.4) + jest-config: 29.7.0(@types/node@20.12.5) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1403,7 +1379,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 jest-mock: 29.7.0 dev: true @@ -1430,7 +1406,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.4 + '@types/node': 20.12.5 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1463,7 +1439,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.12.4 + '@types/node': 20.12.5 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1551,7 +1527,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.4 + '@types/node': 20.12.5 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -1588,8 +1564,8 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@ledgerhq/crypto-icons-ui@1.0.0(@types/react@18.2.45)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): - resolution: {integrity: sha512-d6wuM5qiIjGwb0K7EN+1vI4Le7K1cIml47Wmt12Y9vf3tW13ls1YYyvruvVbTXlavJQLOWO+IF1mQAGdVvUnLg==} + /@ledgerhq/crypto-icons-ui@1.1.0(@types/react@18.2.74)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): + resolution: {integrity: sha512-llccdOI5ec+2pD+eKWd7vvOQTE9LYfTdoqieX3qQ6hmNS4V/Bt3fu2mE7fJNy9JvHY9ajRXAK3c8Q2146rZiSg==} peerDependencies: '@types/react': '*' react: '*' @@ -1599,14 +1575,14 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.45 + '@types/react': 18.2.74 react: 18.2.0 styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false - /@ledgerhq/icons-ui@0.6.2(@types/react@18.2.45)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): - resolution: {integrity: sha512-e7xcw1QChKntu9uFj/o/9o4UglH3emaO1pB+ukiHX5YcOCPROHi8sHVKAFkte5+ohIjtLbskaUuYFlBEFE2GcQ==} + /@ledgerhq/icons-ui@0.6.3(@types/react@18.2.74)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): + resolution: {integrity: sha512-CcYjNhSESHZPx39f9cnqWNvw6AGXxaGPmVWYfOgdcAtR9iWPw+XDiJ2czTa+taBY1Q1b4lyiKMy3mOGdKAj+7w==} peerDependencies: '@types/react': '*' react: '*' @@ -1616,14 +1592,14 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.45 + '@types/react': 18.2.74 react: 18.2.0 styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false - /@ledgerhq/react-ui@0.14.13(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11): - resolution: {integrity: sha512-LABUaH7aMzRRMSDGSfeB6FPxzQljP8HKi3EOaZtQZcJTNypl6StG5T2ua2x4cAvRbZNnmJoxWZF3nOFNMMiuXQ==} + /@ledgerhq/react-ui@0.14.16(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11): + resolution: {integrity: sha512-JuQasWXkGdfM1/Gk0eNKUt065vdH3lfN4c5qzC3v6XgWzFl7E+gSD8jhOq9r0GPJBxFkxVD0lGgGUWqdJF8lPg==} peerDependencies: '@types/react': '*' react: '>=17.0.2' @@ -1633,21 +1609,23 @@ packages: '@types/react': optional: true dependencies: - '@floating-ui/react-dom': 0.4.3(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@ledgerhq/crypto-icons-ui': 1.0.0(@types/react@18.2.45)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) - '@ledgerhq/icons-ui': 0.6.2(@types/react@18.2.45)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) + '@floating-ui/react-dom': 0.4.3(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0) + '@ledgerhq/crypto-icons-ui': 1.1.0(@types/react@18.2.74)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) + '@ledgerhq/icons-ui': 0.6.3(@types/react@18.2.74)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) '@ledgerhq/ui-shared': 0.2.1 '@tippyjs/react': 4.2.6(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.45 + '@types/react': 18.2.74 chart.js: 3.9.1 chartjs-adapter-moment: 1.0.1(chart.js@3.9.1)(moment@2.30.1) color: 4.2.3 + embla-carousel-react: 8.0.0-rc17(react@18.2.0) moment: 2.30.1 react: 18.2.0 react-chartjs-2: 3.3.0(chart.js@3.9.1)(react@18.2.0) react-dom: 18.2.0(react@18.2.0) react-is: 17.0.2 - react-select: 5.8.0(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + react-select: 5.8.0(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0) + react-spring: 8.0.27(react-dom@18.2.0)(react@18.2.0) react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) react-window: 1.8.10(react-dom@18.2.0)(react@18.2.0) styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) @@ -1668,7 +1646,7 @@ packages: /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -1677,7 +1655,7 @@ packages: /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -1930,16 +1908,9 @@ packages: dev: true optional: true - /@pkgr/utils@2.4.2: - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 dev: true /@pnpm/config.env-replace@1.1.0: @@ -2000,49 +1971,49 @@ packages: rollup: 2.78.0 dev: false - /@rushstack/eslint-patch@1.6.1: - resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} + /@rushstack/eslint-patch@1.10.1: + resolution: {integrity: sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==} dev: true - /@sentry-internal/feedback@7.107.0: - resolution: {integrity: sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA==} + /@sentry-internal/feedback@7.109.0: + resolution: {integrity: sha512-EL7N++poxvJP9rYvh6vSu24tsKkOveNCcCj4IM7+irWPjsuD2GLYYlhp/A/Mtt9l7iqO4plvtiQU5HGk7smcTQ==} engines: {node: '>=12'} dependencies: - '@sentry/core': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry-internal/replay-canvas@7.107.0: - resolution: {integrity: sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow==} + /@sentry-internal/replay-canvas@7.109.0: + resolution: {integrity: sha512-Lh/K60kmloR6lkPUcQP0iamw7B/MdEUEx/ImAx4tUSMrLj+IoUEcq/ECgnnVyQkJq59+8nPEKrVLt7x6PUPEjw==} engines: {node: '>=12'} dependencies: - '@sentry/core': 7.107.0 - '@sentry/replay': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 + '@sentry/core': 7.109.0 + '@sentry/replay': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry-internal/tracing@7.107.0: - resolution: {integrity: sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ==} + /@sentry-internal/tracing@7.109.0: + resolution: {integrity: sha512-PzK/joC5tCuh2R/PRh+7dp+uuZl7pTsBIjPhVZHMTtb9+ls65WkdZJ1/uKXPouyz8NOo9Xok7aEvEo9seongyw==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry/browser@7.107.0: - resolution: {integrity: sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g==} + /@sentry/browser@7.109.0: + resolution: {integrity: sha512-yx+OFG+Ab9qUDDgV9ZDv8M9O9Mqr0fjKta/LMlWALYLjzkMvxsPlRPFj7oMBlHqOTVLDeg7lFYmsA8wyWQ8Z8g==} engines: {node: '>=8'} dependencies: - '@sentry-internal/feedback': 7.107.0 - '@sentry-internal/replay-canvas': 7.107.0 - '@sentry-internal/tracing': 7.107.0 - '@sentry/core': 7.107.0 - '@sentry/replay': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 + '@sentry-internal/feedback': 7.109.0 + '@sentry-internal/replay-canvas': 7.109.0 + '@sentry-internal/tracing': 7.109.0 + '@sentry/core': 7.109.0 + '@sentry/replay': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false /@sentry/cli@1.77.3: @@ -2062,12 +2033,12 @@ packages: - supports-color dev: false - /@sentry/core@7.107.0: - resolution: {integrity: sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw==} + /@sentry/core@7.109.0: + resolution: {integrity: sha512-xwD4U0IlvvlE/x/g/W1I8b4Cfb16SsCMmiEuBf6XxvAa3OfWBxKoqLifb3GyrbxMC4LbIIZCN/SvLlnGJPgszA==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false /@sentry/hub@6.19.7: @@ -2079,13 +2050,13 @@ packages: tslib: 1.14.1 dev: false - /@sentry/integrations@7.107.0: - resolution: {integrity: sha512-0h2sZcjcdptS2pju1KSF4+sXaRaFTlmAN1ZokFfmfnVTs6cVtIFttUFxTYrwQUEE2knpAV05pz87zg1yfPAfYg==} + /@sentry/integrations@7.109.0: + resolution: {integrity: sha512-8GwPFlUu4rB1Dx3e9tc3gCMmzC5Bd5lzThhg3tMBmzCCEp7UeA4u7eUuKJ5g49vjdznPDRG2p3PcRsApFZNPSg==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 localforage: 1.10.0 dev: false @@ -2098,8 +2069,8 @@ packages: tslib: 1.14.1 dev: false - /@sentry/nextjs@7.107.0(next@14.0.4)(react@18.2.0): - resolution: {integrity: sha512-cGKntMb/svjHx5xWuLEh4sYMPA75c9gXegVeGeibpLUuD9b+LNeL7GaqxQ9dm2CX+Vza7QvHGBO/u+08abpEQA==} + /@sentry/nextjs@7.109.0(next@14.0.4)(react@18.2.0): + resolution: {integrity: sha512-AT0jhMDj7N57z8+XfgEyTJBogpU64z4mQpfOsSF5uuequzo3IlVVoJcu88jdqUkaVFxBJp3aF2T4nz65OHLoeA==} engines: {node: '>=8'} peerDependencies: next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 || ^14.0 @@ -2110,13 +2081,13 @@ packages: optional: true dependencies: '@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0) - '@sentry/core': 7.107.0 - '@sentry/integrations': 7.107.0 - '@sentry/node': 7.107.0 - '@sentry/react': 7.107.0(react@18.2.0) - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 - '@sentry/vercel-edge': 7.107.0 + '@sentry/core': 7.109.0 + '@sentry/integrations': 7.109.0 + '@sentry/node': 7.109.0 + '@sentry/react': 7.109.0(react@18.2.0) + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 + '@sentry/vercel-edge': 7.109.0 '@sentry/webpack-plugin': 1.21.0 chalk: 3.0.0 next: 14.0.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0) @@ -2129,38 +2100,38 @@ packages: - supports-color dev: false - /@sentry/node@7.107.0: - resolution: {integrity: sha512-UZXkG7uThT2YyPW8AOSKRXp1LbVcBHufa4r1XAwBukA2FKO6HHJPjMUgY6DYVQ6k+BmA56CNfVjYrdLbyjBYYA==} + /@sentry/node@7.109.0: + resolution: {integrity: sha512-tqMNAES4X/iBl1eZRCmc29p//0id01FBLEiesNo5nk6ECl6/SaGMFAEwu1gsn90h/Bjgr04slwFOS4cR45V2PQ==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.107.0 - '@sentry/core': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 + '@sentry-internal/tracing': 7.109.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry/react@7.107.0(react@18.2.0): - resolution: {integrity: sha512-3sXNKcDQjEimxwBPnRkewy3xNLt3KqStMAdDZ/dAF3rviOSVyk80DCQ3P6+HIqeB+IAXqWptg4eSWRA1qNZquA==} + /@sentry/react@7.109.0(react@18.2.0): + resolution: {integrity: sha512-KqXoDh6LVhNO+FLdM5LiTGpuorFvjoBPQ4nPGIVbjeMY/KZIau3kFxR142EvCApxmD69yvS5EhMnEqlNdaQPGw==} engines: {node: '>=8'} peerDependencies: react: 15.x || 16.x || 17.x || 18.x dependencies: - '@sentry/browser': 7.107.0 - '@sentry/core': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 + '@sentry/browser': 7.109.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 dev: false - /@sentry/replay@7.107.0: - resolution: {integrity: sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA==} + /@sentry/replay@7.109.0: + resolution: {integrity: sha512-hCDjbTNO7ErW/XsaBXlyHFsUhneyBUdTec1Swf98TFEfVqNsTs6q338aUcaR8dGRLbLrJ9YU9D1qKq++v5h2CA==} engines: {node: '>=12'} dependencies: - '@sentry-internal/tracing': 7.107.0 - '@sentry/core': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 + '@sentry-internal/tracing': 7.109.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false /@sentry/types@6.19.7: @@ -2168,8 +2139,8 @@ packages: engines: {node: '>=6'} dev: false - /@sentry/types@7.107.0: - resolution: {integrity: sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w==} + /@sentry/types@7.109.0: + resolution: {integrity: sha512-egCBnDv3YpVFoNzRLdP0soVrxVLCQ+rovREKJ1sw3rA2/MFH9WJ+DZZexsX89yeAFzy1IFsCp7/dEqudusml6g==} engines: {node: '>=8'} dev: false @@ -2181,21 +2152,21 @@ packages: tslib: 1.14.1 dev: false - /@sentry/utils@7.107.0: - resolution: {integrity: sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw==} + /@sentry/utils@7.109.0: + resolution: {integrity: sha512-3RjxMOLMBwZ5VSiH84+o/3NY2An4Zldjz0EbfEQNRY9yffRiCPJSQiCJID8EoylCFOh/PAhPimBhqbtWJxX6iw==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.107.0 + '@sentry/types': 7.109.0 dev: false - /@sentry/vercel-edge@7.107.0: - resolution: {integrity: sha512-8p4v0QrMus3lVOwfIfevf/F+GuJnkC/0CIyp69FF7RMHb0zvkCmuXBjuski1AMD5aCL+E3e4MEU73UKA5XNqSA==} + /@sentry/vercel-edge@7.109.0: + resolution: {integrity: sha512-0I+pLZPkD0vSlSLwBx9XAs17WXHimGhHIMki/YH5Y007i1iykkMItoDx//Y3PPjZiJu+deO7l4wKO2J1lJW6jg==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.107.0 - '@sentry/core': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 + '@sentry-internal/tracing': 7.109.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false /@sentry/webpack-plugin@1.21.0: @@ -2368,8 +2339,8 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@tsconfig/recommended@1.0.3: - resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} + /@tsconfig/recommended@1.0.6: + resolution: {integrity: sha512-0IKu9GHYF1NGTJiYgfWwqnOQSlnE9V9R7YohHNNf0/fj/SyOZWzdd06JFr0fLpg1Mqw0kGbYg8w5xdkSqLKM9g==} dev: true /@types/babel__core@7.20.5: @@ -2406,12 +2377,12 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.12.4 + '@types/node': 20.12.5 '@types/responselike': 1.0.3 dev: true - /@types/eslint@8.56.0: - resolution: {integrity: sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==} + /@types/eslint@8.56.7: + resolution: {integrity: sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -2424,19 +2395,19 @@ packages: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.12.4 + '@types/node': 20.12.5 dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.12.5 dev: true /@types/hoist-non-react-statics@3.3.5: resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} dependencies: - '@types/react': 18.2.45 + '@types/react': 18.2.74 hoist-non-react-statics: 3.3.2 dev: true @@ -2477,13 +2448,13 @@ packages: /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.12.5 dev: true /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.12.5 dev: true /@types/minimist@1.2.5: @@ -2498,14 +2469,14 @@ packages: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: true - /@types/node@18.19.29: - resolution: {integrity: sha512-5pAX7ggTmWZdhUrhRWLPf+5oM7F80bcKVCBbr0zwEkTNzTJL2CWQjznpFgHYy6GrzkYi2Yjy7DHKoynFxqPV8g==} + /@types/node@18.19.30: + resolution: {integrity: sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==} dependencies: undici-types: 5.26.5 dev: true - /@types/node@20.12.4: - resolution: {integrity: sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==} + /@types/node@20.12.5: + resolution: {integrity: sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==} dependencies: undici-types: 5.26.5 dev: true @@ -2525,36 +2496,32 @@ packages: resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} dev: true - /@types/react-dom@18.2.18: - resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} + /@types/react-dom@18.2.24: + resolution: {integrity: sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==} dependencies: - '@types/react': 18.2.45 + '@types/react': 18.2.74 dev: true /@types/react-transition-group@4.4.10: resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} dependencies: - '@types/react': 18.2.45 + '@types/react': 18.2.74 dev: false - /@types/react@18.2.45: - resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} + /@types/react@18.2.74: + resolution: {integrity: sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==} dependencies: '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 csstype: 3.1.3 /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.12.5 dev: true - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} - - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true /@types/stack-utils@2.0.3: @@ -2565,7 +2532,7 @@ packages: resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} dependencies: '@types/hoist-non-react-statics': 3.3.5 - '@types/react': 18.2.45 + '@types/react': 18.2.74 csstype: 3.1.3 dev: true @@ -2591,37 +2558,37 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.4): - resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/eslint-plugin@7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4): + resolution: {integrity: sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/type-utils': 6.14.0(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/utils': 6.14.0(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/scope-manager': 7.5.0 + '@typescript-eslint/type-utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/visitor-keys': 7.5.0 debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.0 natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.4) + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.4) typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.14.0(eslint@8.57.0)(typescript@5.4.4): - resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.4): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2630,10 +2597,31 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.4) - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.4) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.4(supports-color@5.5.0) + eslint: 8.57.0 + typescript: 5.4.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@7.5.0(eslint@8.57.0)(typescript@5.4.4): + resolution: {integrity: sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.5.0 + '@typescript-eslint/types': 7.5.0 + '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4) + '@typescript-eslint/visitor-keys': 7.5.0 debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 typescript: 5.4.4 @@ -2649,29 +2637,37 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/scope-manager@6.14.0: - resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@6.14.0(eslint@8.57.0)(typescript@5.4.4): - resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/scope-manager@7.5.0: + resolution: {integrity: sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.5.0 + '@typescript-eslint/visitor-keys': 7.5.0 + dev: true + + /@typescript-eslint/type-utils@7.5.0(eslint@8.57.0)(typescript@5.4.4): + resolution: {integrity: sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.4) - '@typescript-eslint/utils': 6.14.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4) + '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.4.4) + ts-api-utils: 1.3.0(typescript@5.4.4) typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -2682,11 +2678,16 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@6.14.0: - resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true + /@typescript-eslint/types@7.5.0: + resolution: {integrity: sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2701,15 +2702,15 @@ packages: debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 + semver: 7.6.0 tsutils: 3.21.0(typescript@5.4.4) typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.14.0(typescript@5.4.4): - resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.4): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2717,13 +2718,36 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.4) + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.4) + typescript: 5.4.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.4): + resolution: {integrity: sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.5.0 + '@typescript-eslint/visitor-keys': 7.5.0 + debug: 4.3.4(supports-color@5.5.0) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.4) typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -2737,32 +2761,32 @@ packages: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 + '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.4) eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.5.4 + semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@6.14.0(eslint@8.57.0)(typescript@5.4.4): - resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/utils@7.5.0(eslint@8.57.0)(typescript@5.4.4): + resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.4) + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.5.0 + '@typescript-eslint/types': 7.5.0 + '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4) eslint: 8.57.0 - semver: 7.5.4 + semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript @@ -2776,11 +2800,19 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.14.0: - resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@7.5.0: + resolution: {integrity: sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.5.0 eslint-visitor-keys: 3.4.3 dev: true @@ -2788,11 +2820,11 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.1.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4): - resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} - engines: {node: '>=16'} + /@vercel/style-guide@6.0.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4): + resolution: {integrity: sha512-tu0wFINGz91EPwaT5VjSqUwbvCY9pvLach7SPG4XyfJKPU9Vku2TFa6+AyzJ4oroGbo9fK+TQhIFHrnFl0nCdg==} + engines: {node: '>=18.18'} peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <15' + '@next/eslint-plugin-next': '>=12.3.0 <15.0.0-0' eslint: '>=8.48.0 <9' prettier: '>=3.0.0 <4' typescript: '>=4.8.0 <6' @@ -2807,32 +2839,34 @@ packages: optional: true dependencies: '@babel/core': 7.24.4 - '@babel/eslint-parser': 7.23.3(@babel/core@7.24.4)(eslint@8.57.0) - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) + '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) + '@rushstack/eslint-patch': 1.10.1 + '@typescript-eslint/eslint-plugin': 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.5.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.57.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) + eslint-plugin-playwright: 1.5.4(eslint-plugin-jest@27.9.0)(eslint@8.57.0) + eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.4) eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) + eslint-plugin-unicorn: 51.0.1(eslint@8.57.0) + eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.57.0)(typescript@5.4.4) prettier: 3.2.5 - prettier-plugin-packagejson: 2.4.7(prettier@3.2.5) + prettier-plugin-packagejson: 2.4.14(prettier@3.2.5) typescript: 5.4.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack - jest - supports-color + - vitest dev: true /acorn-jsx@5.3.2(acorn@8.11.2): @@ -2858,7 +2892,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -2866,7 +2900,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -2985,11 +3019,12 @@ packages: dequal: 2.0.3 dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 - is-array-buffer: 3.0.2 + is-array-buffer: 3.0.4 dev: true /array-includes@3.1.7: @@ -2998,7 +3033,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 get-intrinsic: 1.2.4 is-string: 1.0.7 dev: true @@ -3008,13 +3043,25 @@ packages: engines: {node: '>=8'} dev: true + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true + /array.prototype.findlastindex@1.2.3: resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 get-intrinsic: 1.2.4 dev: true @@ -3025,7 +3072,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true @@ -3035,31 +3082,41 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + /array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.4 dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + /array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 + array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-errors: 1.3.0 get-intrinsic: 1.2.4 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 dev: true /arrify@1.0.1: @@ -3088,12 +3145,6 @@ packages: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: true - /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true @@ -3105,25 +3156,27 @@ packages: when-exit: 2.1.2 dev: true - /autoprefixer@10.4.16(postcss@8.4.32): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + /autoprefixer@10.4.19(postcss@8.4.38): + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001570 + browserslist: 4.23.0 + caniuse-lite: 1.0.30001607 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.32 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 dev: true /axe-core@4.7.0: @@ -3182,7 +3235,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 cosmiconfig: 7.1.0 resolve: 1.22.8 dev: false @@ -3256,11 +3309,6 @@ packages: is-windows: 1.0.2 dev: true - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - dev: true - /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -3288,13 +3336,6 @@ packages: wrap-ansi: 8.1.0 dev: true - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.52 - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -3320,15 +3361,15 @@ packages: wcwidth: 1.0.1 dev: true - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001570 - electron-to-chromium: 1.4.614 + caniuse-lite: 1.0.30001607 + electron-to-chromium: 1.4.729 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) + update-browserslist-db: 1.0.13(browserslist@4.23.0) /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -3363,13 +3404,6 @@ packages: engines: {node: '>=6'} dev: true - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - dependencies: - run-applescript: 5.0.0 - dev: true - /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -3463,8 +3497,8 @@ packages: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} dev: false - /caniuse-lite@1.0.30001570: - resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + /caniuse-lite@1.0.30001607: + resolution: {integrity: sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==} /chalk@2.3.0: resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} @@ -3570,6 +3604,11 @@ packages: engines: {node: '>=8'} dev: true + /ci-info@4.0.0: + resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + engines: {node: '>=8'} + dev: true + /cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} dev: true @@ -3712,22 +3751,6 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /concurrently@8.2.2: - resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} - engines: {node: ^14.13.0 || >=16.0.0} - hasBin: true - dependencies: - chalk: 4.1.2 - date-fns: 2.30.0 - lodash: 4.17.21 - rxjs: 7.8.1 - shell-quote: 1.8.1 - spawn-command: 0.0.2 - supports-color: 8.1.1 - tree-kill: 1.2.2 - yargs: 17.7.2 - dev: true - /conf@12.0.0: resolution: {integrity: sha512-fIWyWUXrJ45cHCIQX+Ck1hrZDIf/9DR0P0Zewn3uNht28hbt5OfGUq8rRWsxi96pZWPyBEd0eY9ama01JTaknA==} engines: {node: '>=18'} @@ -3739,7 +3762,7 @@ packages: dot-prop: 8.0.2 env-paths: 3.0.0 json-schema-typed: 8.0.1 - semver: 7.5.4 + semver: 7.6.0 uint8array-extras: 0.3.0 dev: true @@ -3775,6 +3798,12 @@ packages: /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + /core-js-compat@3.36.1: + resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + dependencies: + browserslist: 4.23.0 + dev: true + /core-js@3.36.0: resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==} requiresBuild: true @@ -3791,7 +3820,7 @@ packages: yaml: 1.10.2 dev: false - /create-jest@29.7.0(@types/node@20.12.4): + /create-jest@29.7.0(@types/node@20.12.5): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3800,7 +3829,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.12.4) + jest-config: 29.7.0(@types/node@20.12.5) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3892,7 +3921,7 @@ packages: chalk: 2.4.2 commander: 2.20.3 core-js: 3.36.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) fast-json-patch: 3.1.1 get-stdin: 6.0.0 http-proxy-agent: 5.0.0 @@ -3938,15 +3967,35 @@ packages: engines: {node: '>= 14'} dev: true - /dataloader@1.4.0: - resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 dev: true - /date-fns@2.30.0: - resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} - engines: {node: '>=0.11'} + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} dependencies: - '@babel/runtime': 7.23.6 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /dataloader@1.4.0: + resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} dev: true /debounce-fn@5.1.2: @@ -3967,17 +4016,6 @@ packages: ms: 2.1.3 dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -4038,24 +4076,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - dev: true - /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: @@ -4076,11 +4096,6 @@ packages: gopd: 1.0.1 dev: true - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true - /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -4178,7 +4193,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 csstype: 3.1.3 dev: false @@ -4234,8 +4249,30 @@ packages: jake: 10.8.7 dev: true - /electron-to-chromium@1.4.614: - resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==} + /electron-to-chromium@1.4.729: + resolution: {integrity: sha512-bx7+5Saea/qu14kmPTDHQxkp2UnziG3iajUQu3BxFvCOnpAJdDbMV4rSl+EqFDkkpNNVUFlR1kDfpL59xfy1HA==} + + /embla-carousel-react@8.0.0-rc17(react@18.2.0): + resolution: {integrity: sha512-x4aFprwFB+PQO9EsHHZsrDxARb0uYNBYn9mr5oDFdBdPez4M8G1r5yidWbUcT9pNUc8AQXC9sGzlfauBfBxVOw==} + peerDependencies: + react: ^16.8.0 || ^17.0.1 || ^18.0.0 + dependencies: + embla-carousel: 8.0.0-rc17 + embla-carousel-reactive-utils: 8.0.0-rc17(embla-carousel@8.0.0-rc17) + react: 18.2.0 + dev: false + + /embla-carousel-reactive-utils@8.0.0-rc17(embla-carousel@8.0.0-rc17): + resolution: {integrity: sha512-eluEOK/u5HdjYaTLC4bUG3iTCnyX7RsYix3il0aH4ZECOKa5fS+pVK2vrM17Mgw6C5Hyjcr3r3lfJtGerVzVsQ==} + peerDependencies: + embla-carousel: 8.0.0-rc17 + dependencies: + embla-carousel: 8.0.0-rc17 + dev: false + + /embla-carousel@8.0.0-rc17: + resolution: {integrity: sha512-evF49b88VOitvqFtlvhvKVSu96Y8A+QSFdhok87Bfm8R7OYuk95FT+o8+M1GQLi/EhGDUlT193HTVAR0Wt2neQ==} + dev: false /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -4286,49 +4323,56 @@ packages: dependencies: is-arrayish: 0.2.1 - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 call-bind: 1.0.7 - es-set-tostringtag: 2.0.2 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 - get-symbol-description: 1.0.0 + get-symbol-description: 1.0.2 globalthis: 1.0.3 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - 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 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 dev: true /es-define-property@1.0.0: @@ -4343,31 +4387,39 @@ packages: engines: {node: '>= 0.4'} dev: true - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + /es-iterator-helpers@1.0.18: + resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + engines: {node: '>= 0.4'} dependencies: - asynciterator.prototype: 1.0.0 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 function-bind: 1.1.2 get-intrinsic: 1.2.4 globalthis: 1.0.3 has-property-descriptors: 1.0.2 has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.6 + internal-slot: 1.0.7 iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 + safe-array-concat: 1.1.2 dev: true - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 hasown: 2.0.2 dev: true @@ -4428,8 +4480,8 @@ packages: '@esbuild/win32-x64': 0.20.2 dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} /escape-goat@4.0.0: @@ -4477,14 +4529,14 @@ packages: optional: true dependencies: '@next/eslint-plugin-next': 14.0.4 - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) + '@rushstack/eslint-patch': 1.10.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.4) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) + eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) typescript: 5.4.4 transitivePeerDependencies: @@ -4501,13 +4553,13 @@ packages: eslint: 8.57.0 dev: true - /eslint-config-turbo@1.11.2(eslint@8.57.0): - resolution: {integrity: sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg==} + /eslint-config-turbo@1.13.2(eslint@8.57.0): + resolution: {integrity: sha512-TzvsMwNJx/P4JYw79iFqbyQApnyT050gW7dBxnNeNVl3pVMnT2rwaFo9Q3Hc49Tp5NANxEwYN9RStF50P/IwGA==} peerDependencies: eslint: '>6.6.0' dependencies: eslint: 8.57.0 - eslint-plugin-turbo: 1.11.2(eslint@8.57.0) + eslint-plugin-turbo: 1.13.2(eslint@8.57.0) dev: true /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): @@ -4516,7 +4568,7 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -4529,7 +4581,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4539,8 +4591,8 @@ packages: debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.15.0 eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -4552,7 +4604,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.5.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4562,8 +4614,8 @@ packages: debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.15.0 eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -4575,7 +4627,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4596,16 +4648,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4626,10 +4678,11 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) debug: 3.2.7 eslint: 8.57.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.5.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color dev: true @@ -4645,7 +4698,7 @@ packages: ignore: 5.3.0 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4655,7 +4708,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.4) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -4664,7 +4717,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -4680,7 +4733,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4690,7 +4743,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -4699,7 +4752,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -4715,11 +4768,11 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4): - resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4): + resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 eslint: ^7.0.0 || ^8.0.0 jest: '*' peerDependenciesMeta: @@ -4728,10 +4781,10 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/eslint-plugin': 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.4) eslint: 8.57.0 - jest: 29.7.0(@types/node@20.12.4) + jest: 29.7.0(@types/node@20.12.5) transitivePeerDependencies: - supports-color - typescript @@ -4743,7 +4796,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 aria-query: 5.3.0 array-includes: 3.1.7 array.prototype.flatmap: 1.3.2 @@ -4752,7 +4805,7 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 + es-iterator-helpers: 1.0.18 eslint: 8.57.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -4762,22 +4815,19 @@ packages: object.fromentries: 2.0.7 dev: true - /eslint-plugin-only-warn@1.1.0: - resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} - engines: {node: '>=6'} - dev: true - - /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0): - resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + /eslint-plugin-playwright@1.5.4(eslint-plugin-jest@27.9.0)(eslint@8.57.0): + resolution: {integrity: sha512-J38Wy3Vc2f9y73J+KRmgXgbYI8TZ3zbz6qBbTj3PhpFndUS572jZ7kqQ3rJ9si5BaMHT7lmZzraO+3UjwIDV4Q==} + engines: {node: '>=16.6.0'} peerDependencies: - eslint: '>=7' + eslint: '>=8.40.0' eslint-plugin-jest: '>=25' peerDependenciesMeta: eslint-plugin-jest: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4) + globals: 13.24.0 dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): @@ -4789,17 +4839,19 @@ packages: eslint: 8.57.0 dev: true - /eslint-plugin-react@7.33.2(eslint@8.57.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + /eslint-plugin-react@7.34.1(eslint@8.57.0): + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: array-includes: 3.1.7 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 + es-iterator-helpers: 1.0.18 eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 @@ -4842,8 +4894,8 @@ packages: '@microsoft/tsdoc-config': 0.16.2 dev: true - /eslint-plugin-turbo@1.11.2(eslint@8.57.0): - resolution: {integrity: sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw==} + /eslint-plugin-turbo@1.13.2(eslint@8.57.0): + resolution: {integrity: sha512-QNaihF0hTRjfOBd1SLHrftm8V3pOU35CNS/C0/Z6qY1xxdL1PSv4IctEIldSMX7/A1jOPYwMPO7wYwPXgjgp/g==} peerDependencies: eslint: '>6.6.0' dependencies: @@ -4851,28 +4903,52 @@ packages: eslint: 8.57.0 dev: true - /eslint-plugin-unicorn@48.0.1(eslint@8.57.0): - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + /eslint-plugin-unicorn@51.0.1(eslint@8.57.0): + resolution: {integrity: sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==} engines: {node: '>=16'} peerDependencies: - eslint: '>=8.44.0' + eslint: '>=8.56.0' dependencies: '@babel/helper-validator-identifier': 7.22.20 '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - ci-info: 3.9.0 + '@eslint/eslintrc': 2.1.4 + ci-info: 4.0.0 clean-regexp: 1.0.0 + core-js-compat: 3.36.1 eslint: 8.57.0 esquery: 1.5.0 indent-string: 4.0.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.27 regjsparser: 0.10.0 - semver: 7.5.4 + semver: 7.6.0 strip-indent: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.57.0)(typescript@5.4.4): + resolution: {integrity: sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg==} + engines: {node: ^18.0.0 || >= 20.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': '*' + eslint: '>=8.0.0' + vitest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + vitest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript dev: true /eslint-scope@5.1.1: @@ -4917,7 +4993,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -5023,21 +5099,6 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - 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 - dev: true - /execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -5332,7 +5393,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 dev: true @@ -5407,11 +5468,12 @@ packages: engines: {node: '>=16'} dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 + es-errors: 1.3.0 get-intrinsic: 1.2.4 dev: true @@ -5427,7 +5489,7 @@ packages: dependencies: basic-ftp: 5.0.4 data-uri-to-buffer: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -5671,8 +5733,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 @@ -5721,7 +5783,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -5731,7 +5793,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -5757,7 +5819,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -5766,7 +5828,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -5780,11 +5842,6 @@ packages: engines: {node: '>=10.17.0'} dev: true - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true - /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -5797,7 +5854,7 @@ packages: '@types/node': 17.0.45 chalk: 4.1.2 change-case: 3.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) degit: 2.8.4 ejs: 3.1.9 enquirer: 2.4.1 @@ -5933,11 +5990,11 @@ packages: wrap-ansi: 6.2.0 dev: true - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.4 + es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.4 dev: true @@ -5960,12 +6017,12 @@ packages: sprintf-js: 1.1.3 dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - is-typed-array: 1.1.12 dev: true /is-arrayish@0.2.1: @@ -5979,7 +6036,7 @@ packages: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-bigint@1.0.4: @@ -6000,7 +6057,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-builtin-module@3.2.1: @@ -6020,23 +6077,18 @@ packages: dependencies: hasown: 2.0.2 - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true + is-typed-array: 1.1.13 dev: true - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 dev: true /is-extendable@0.1.1: @@ -6069,7 +6121,7 @@ packages: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-glob@4.0.3: @@ -6085,14 +6137,6 @@ packages: hasBin: true dev: true - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - /is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} @@ -6121,8 +6165,8 @@ packages: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} dev: true @@ -6135,7 +6179,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-number@7.0.0: @@ -6179,15 +6223,16 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-set@2.0.2: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 dev: true @@ -6206,7 +6251,7 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-subdir@1.2.0: @@ -6223,11 +6268,11 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 dev: true /is-typedarray@1.0.0: @@ -6277,13 +6322,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true @@ -6317,7 +6355,7 @@ packages: '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.5.4 + semver: 7.6.0 transitivePeerDependencies: - supports-color dev: true @@ -6335,7 +6373,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6397,7 +6435,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -6418,7 +6456,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.12.4): + /jest-cli@29.7.0(@types/node@20.12.5): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6432,10 +6470,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.12.4) + create-jest: 29.7.0(@types/node@20.12.5) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.12.4) + jest-config: 29.7.0(@types/node@20.12.5) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6446,7 +6484,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.12.4): + /jest-config@29.7.0(@types/node@20.12.5): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -6461,7 +6499,7 @@ packages: '@babel/core': 7.24.4 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 babel-jest: 29.7.0(@babel/core@7.24.4) chalk: 4.1.2 ci-info: 3.9.0 @@ -6521,7 +6559,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -6537,7 +6575,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.12.4 + '@types/node': 20.12.5 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6588,7 +6626,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 jest-util: 29.7.0 dev: true @@ -6643,7 +6681,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6674,7 +6712,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -6716,7 +6754,7 @@ packages: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.5.4 + semver: 7.6.0 transitivePeerDependencies: - supports-color dev: true @@ -6726,7 +6764,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6751,7 +6789,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.5 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6763,13 +6801,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.12.5 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.12.4): + /jest@29.7.0(@types/node@20.12.5): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6782,7 +6820,7 @@ packages: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.12.4) + jest-cli: 29.7.0(@types/node@20.12.5) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6899,7 +6937,7 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.5.4 + semver: 7.6.0 dev: true /jsx-ast-utils@3.3.5: @@ -7162,7 +7200,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: true /make-error@1.3.6: @@ -7393,7 +7431,7 @@ packages: '@next/env': 14.0.4 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001570 + caniuse-lite: 1.0.30001607 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 @@ -7538,7 +7576,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 dev: true /object.fromentries@2.0.7: @@ -7547,7 +7585,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 dev: true /object.groupby@1.0.1: @@ -7555,7 +7593,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 get-intrinsic: 1.2.4 dev: true @@ -7563,7 +7601,7 @@ packages: resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 dev: true /object.values@1.1.7: @@ -7572,7 +7610,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 dev: true /once@1.4.0: @@ -7594,16 +7632,6 @@ packages: mimic-fn: 4.0.0 dev: true - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 - dev: true - /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -7720,7 +7748,7 @@ packages: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) get-uri: 6.0.3 http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 @@ -7745,7 +7773,7 @@ packages: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.5.4 + semver: 7.6.0 dev: true /param-case@2.1.1: @@ -7898,6 +7926,11 @@ packages: engines: {node: '>=4'} dev: true + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -7907,16 +7940,16 @@ packages: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: false - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /preferred-pm@3.1.2: @@ -7934,8 +7967,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-packagejson@2.4.7(prettier@3.2.5): - resolution: {integrity: sha512-/n1HGcBbuJyTlD3tb2/tW1mT5WIR6FCo+bAijHF6pNoSBf8YoxoskawjSY2ku9/8d6mdzci7oMchziI7CYEWYg==} + /prettier-plugin-packagejson@2.4.14(prettier@3.2.5): + resolution: {integrity: sha512-sli+gV5tW7uxvzDZQscaBtSfbyAW2ToL6n/HGt51PipwX9vI7M54vefG0mKSfklVkT29TNGO6Mo6g8c6Z79gmw==} peerDependencies: prettier: '>= 1.16.0' peerDependenciesMeta: @@ -7943,8 +7976,8 @@ packages: optional: true dependencies: prettier: 3.2.5 - sort-package-json: 2.6.0 - synckit: 0.8.6 + sort-package-json: 2.10.0 + synckit: 0.9.0 dev: true /prettier@2.8.8: @@ -8005,7 +8038,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 lru-cache: 7.18.3 @@ -8136,15 +8169,15 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-select@5.8.0(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + /react-select@5.8.0(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.3(@types/react@18.2.45)(react@18.2.0) + '@emotion/react': 11.11.3(@types/react@18.2.74)(react@18.2.0) '@floating-ui/dom': 1.5.4 '@types/react-transition-group': 4.4.10 memoize-one: 6.0.0 @@ -8152,18 +8185,30 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.45)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.74)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false + /react-spring@8.0.27(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-nDpWBe3ZVezukNRandTeLSPcwwTMjNVu1IDq9qA/AMiUqHuRN4BeSWvKr3eIxxg1vtiYiOLy4FqdfCP5IoP77g==} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' + dependencies: + '@babel/runtime': 7.24.4 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -8178,7 +8223,7 @@ packages: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.4 memoize-one: 5.2.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8249,9 +8294,8 @@ packages: strip-indent: 3.0.0 dev: true - /reflect-metadata@0.2.1: - resolution: {integrity: sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==} - deprecated: This version has a critical bug in fallback handling. Please upgrade to reflect-metadata@0.2.2 or newer. + /reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} dev: false /reflect.getprototypeof@1.0.4: @@ -8260,7 +8304,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 get-intrinsic: 1.2.4 globalthis: 1.0.3 which-builtin-type: 1.1.3 @@ -8278,12 +8322,13 @@ packages: hasBin: true dev: true - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 + es-errors: 1.3.0 set-function-name: 2.0.1 dev: true @@ -8437,13 +8482,6 @@ packages: fsevents: 2.3.3 dev: false - /run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} - dependencies: - execa: 5.1.1 - dev: true - /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -8465,8 +8503,8 @@ packages: dependencies: tslib: 2.6.2 - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.7 @@ -8479,11 +8517,12 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 - get-intrinsic: 1.2.4 + es-errors: 1.3.0 is-regex: 1.1.4 dev: true @@ -8501,7 +8540,7 @@ packages: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: true /semver@5.7.2: @@ -8513,8 +8552,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} hasBin: true dependencies: @@ -8580,10 +8619,6 @@ packages: engines: {node: '>=8'} dev: true - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true - /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -8650,7 +8685,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) socks: 2.7.3 transitivePeerDependencies: - supports-color @@ -8669,8 +8704,8 @@ packages: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} dev: true - /sort-package-json@2.6.0: - resolution: {integrity: sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==} + /sort-package-json@2.10.0: + resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} hasBin: true dependencies: detect-indent: 7.0.1 @@ -8679,11 +8714,12 @@ packages: git-hooks-list: 3.1.0 globby: 13.2.2 is-plain-obj: 4.1.0 + semver: 7.6.0 sort-object-keys: 1.1.3 dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} /source-map-support@0.5.13: @@ -8703,10 +8739,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /spawn-command@0.0.2: - resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} - dev: true - /spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} dependencies: @@ -8836,38 +8868,40 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 get-intrinsic: 1.2.4 has-symbols: 1.0.3 - internal-slot: 1.0.6 - regexp.prototype.flags: 1.5.1 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 set-function-name: 2.0.1 side-channel: 1.0.4 dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true /string_decoder@1.3.0: @@ -9041,11 +9075,11 @@ packages: upper-case: 1.1.3 dev: true - /synckit@0.8.6: - resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} + /synckit@0.9.0: + resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/utils': 2.4.2 + '@pkgr/core': 0.1.1 tslib: 2.6.2 dev: true @@ -9089,11 +9123,6 @@ packages: upper-case: 1.1.3 dev: true - /titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - dev: true - /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -9119,19 +9148,14 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true - /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true - /ts-api-utils@1.0.3(typescript@5.4.4): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} + /ts-api-utils@1.3.0(typescript@5.4.4): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: @@ -9163,17 +9187,17 @@ packages: bs-logger: 0.2.6 esbuild: 0.20.2 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.12.4) + jest: 29.7.0(@types/node@20.12.5) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 + semver: 7.6.0 typescript: 5.4.4 yargs-parser: 21.1.1 dev: true - /ts-node@10.9.2(@types/node@20.12.4)(typescript@5.4.4): + /ts-node@10.9.2(@types/node@20.12.5)(typescript@5.4.4): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -9192,7 +9216,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.4 + '@types/node': 20.12.5 acorn: 8.11.2 acorn-walk: 8.3.1 arg: 4.1.3 @@ -9372,42 +9396,48 @@ packages: engines: {node: '>=14.16'} dev: true - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-typed-array: 1.1.12 + es-errors: 1.3.0 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 for-each: 0.3.3 + gopd: 1.0.1 has-proto: 1.0.3 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 + available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 + gopd: 1.0.1 has-proto: 1.0.3 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 dev: true /typedarray-to-buffer@3.1.5: @@ -9461,19 +9491,14 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - - /update-browserslist-db@1.0.13(browserslist@4.22.2): + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 + browserslist: 4.23.0 + escalade: 3.1.2 picocolors: 1.0.0 /update-notifier@7.0.0: @@ -9489,7 +9514,7 @@ packages: is-npm: 6.0.0 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.5.4 + semver: 7.6.0 semver-diff: 4.0.0 xdg-basedir: 5.1.0 dev: true @@ -9510,7 +9535,7 @@ packages: punycode: 2.3.1 dev: true - /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.45)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.74)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -9519,7 +9544,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.45 + '@types/react': 18.2.74 react: 18.2.0 dev: false @@ -9620,7 +9645,7 @@ packages: engines: {node: '>= 0.4'} dependencies: function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 @@ -9630,7 +9655,7 @@ packages: isarray: 2.0.5 which-boxed-primitive: 1.0.2 which-collection: 1.0.1 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 dev: true /which-collection@1.0.1: @@ -9654,15 +9679,15 @@ packages: path-exists: 4.0.0 dev: true - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 + available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /which@1.3.1: @@ -9819,7 +9844,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -9844,7 +9869,7 @@ packages: dependencies: '@types/fs-extra': 11.0.4 '@types/minimist': 1.2.5 - '@types/node': 18.19.29 + '@types/node': 18.19.30 '@types/ps-tree': 1.1.6 '@types/which': 3.0.3 chalk: 5.3.0 From 0318a9a8660e46f0ac8739b1755e31ebe2a4b5f5 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 9 Apr 2024 16:12:55 +0200 Subject: [PATCH 171/253] :white_check_mark: (core): Improve coverage --- .../transport/UsbHidDeviceConnection.test.ts | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts index 84ba120d8..a39482d70 100644 --- a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts +++ b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts @@ -6,6 +6,14 @@ import { DefaultLoggerPublisherService } from "@internal/logger-publisher/servic import { hidDeviceStubBuilder } from "@internal/usb/model/HIDDevice.stub"; import { UsbHidDeviceConnection } from "@internal/usb/transport/UsbHidDeviceConnection"; +const RESPONSE_LOCKED_DEVICE = new Uint8Array([ + 0xaa, 0xaa, 0x05, 0x00, 0x00, 0x00, 0x02, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +]); + describe("UsbHidDeviceConnection", () => { let device: HIDDevice; let apduSender: ApduSenderService; @@ -30,7 +38,7 @@ describe("UsbHidDeviceConnection", () => { expect(cDevice).toStrictEqual(device); }); - it("should send APDU through hid report", () => { + it("should send APDU through hid report", async () => { // given const connection = new UsbHidDeviceConnection( { device, apduSender, apduReceiver }, @@ -41,4 +49,22 @@ describe("UsbHidDeviceConnection", () => { // then expect(device.sendReport).toHaveBeenCalled(); }); + + it("should receive APDU through hid report", async () => { + // given + device.sendReport = jest.fn(async () => { + device.oninputreport!({ + type: "inputreport", + data: new DataView(Uint8Array.from(RESPONSE_LOCKED_DEVICE).buffer), + } as HIDInputReportEvent); + }); + const connection = new UsbHidDeviceConnection( + { device, apduSender, apduReceiver }, + logger, + ); + // when + const response = connection.sendApdu(Uint8Array.from([])); + // then + expect(response).resolves.toBe(RESPONSE_LOCKED_DEVICE); + }); }); From e0e059b53b1705520a37229978e2282f2944eba1 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 9 Apr 2024 16:30:01 +0200 Subject: [PATCH 172/253] =?UTF-8?q?=F0=9F=94=A8=20(packages):=20Do=20not?= =?UTF-8?q?=20bundle=20and=20export=20types=20correctly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +- packages/config/esbuild/config/common.js | 14 - packages/config/esbuild/index.js | 9 - packages/config/esbuild/package.json | 5 - packages/config/esbuild/plugins/alias.js | 66 ---- packages/config/esbuild/plugins/copy.js | 42 --- packages/core/package.json | 20 +- packages/core/scripts/build.mjs | 51 +--- packages/signer/package.json | 18 +- packages/signer/scripts/build.mjs | 63 +--- packages/trusted-apps/package.json | 18 +- packages/trusted-apps/scripts/build.mjs | 63 +--- packages/ui/package.json | 18 +- packages/ui/scripts/build.mjs | 63 +--- pnpm-lock.yaml | 366 ++++++----------------- 15 files changed, 186 insertions(+), 633 deletions(-) delete mode 100644 packages/config/esbuild/config/common.js delete mode 100644 packages/config/esbuild/index.js delete mode 100644 packages/config/esbuild/package.json delete mode 100644 packages/config/esbuild/plugins/alias.js delete mode 100644 packages/config/esbuild/plugins/copy.js diff --git a/package.json b/package.json index 92b9ed6e1..a9fd193cb 100644 --- a/package.json +++ b/package.json @@ -34,9 +34,8 @@ "@changesets/cli": "^2.27.1", "@types/jest": "^29.5.12", "@types/node": "^20.12.5", + "concurrently": "^8.2.2", "danger": "^11.3.1", - "esbuild": "^0.20.2", - "esbuild-plugin-d.ts": "^1.2.3", "eslint": "^8.57.0", "gitmoji-cli": "^9.2.0", "hygen": "^6.2.11", diff --git a/packages/config/esbuild/config/common.js b/packages/config/esbuild/config/common.js deleted file mode 100644 index eec460033..000000000 --- a/packages/config/esbuild/config/common.js +++ /dev/null @@ -1,14 +0,0 @@ -const buildConfig = (config, packageJson) => ({ - sourcemap: true, - treeShaking: true, - color: true, - bundle: true, - minify: true, - ...config, - plugins: [...(config.plugins || [])], - external: Object.keys(packageJson.dependencies || {}).concat( - Object.keys(packageJson.peerDependencies || {}) - ), -}); - -module.exports = buildConfig; diff --git a/packages/config/esbuild/index.js b/packages/config/esbuild/index.js deleted file mode 100644 index 5c00d127a..000000000 --- a/packages/config/esbuild/index.js +++ /dev/null @@ -1,9 +0,0 @@ -const alias = require("./plugins/alias"); -const copy = require("./plugins/copy"); -const buildConfig = require("./config/common"); - -module.exports = { - alias, - copy, - buildConfig, -}; diff --git a/packages/config/esbuild/package.json b/packages/config/esbuild/package.json deleted file mode 100644 index c685174d3..000000000 --- a/packages/config/esbuild/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "@ledgerhq/esbuild-tools", - "main": "index.js", - "private": true -} diff --git a/packages/config/esbuild/plugins/alias.js b/packages/config/esbuild/plugins/alias.js deleted file mode 100644 index ae16a59d1..000000000 --- a/packages/config/esbuild/plugins/alias.js +++ /dev/null @@ -1,66 +0,0 @@ -const path = require("path"); - -/** - * Alias Plugin for Esbuild (copied from Ledger Live) - * - * Replace a string by another string in the import path, should match the same - * config as the tsconfig.json paths. - * @param {*} mappings - * @example { "@root": path.join(__dirname, "..") } will replace root by the specicified path - * @returns void - */ -module.exports = (mappings) => ({ - name: "Alias", - setup(build) { - Object.entries(mappings).forEach(([filter, mappings]) => { - if (!Array.isArray(mappings)) { - mappings = [mappings]; - } - - const resolveCallback = async function (args) { - if (args.resolveDir === "") { - return; // Ignore unresolvable paths - } - - const errors = []; - - for (const mapping of mappings) { - const rawMappedPath = args.path.replace(filter, mapping); - const relativeMappedPath = path - .relative(args.resolveDir, rawMappedPath) - // Fixes windows paths - .replace(new RegExp("\\\\+", "g"), "/"); - - const mappedPath = relativeMappedPath.startsWith(".") - ? relativeMappedPath - : `./${relativeMappedPath}`; - - let result = await build.resolve(mappedPath, { - kind: "import-statement", - resolveDir: args.resolveDir, - }); - - if (result.errors.length > 0) { - errors.push(...result.errors); - result = await build.resolve(rawMappedPath, { - kind: "import-statement", - resolveDir: args.resolveDir, - }); - - if (result.errors.length > 0) { - errors.push(...result.errors); - continue; - } - } - - return result; - } - - return { errors }; - }; - - build.onResolve({ filter: new RegExp(`^${filter}$`) }, resolveCallback); - build.onResolve({ filter: new RegExp(`^${filter}/.+`) }, resolveCallback); - }); - }, -}); diff --git a/packages/config/esbuild/plugins/copy.js b/packages/config/esbuild/plugins/copy.js deleted file mode 100644 index 7f37ac858..000000000 --- a/packages/config/esbuild/plugins/copy.js +++ /dev/null @@ -1,42 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -// Copy a folder and its contents recursively. -function copyFolderRecursivelySync(source, target, options = {}) { - if (!fs.existsSync(target)) { - fs.mkdirSync(target, { recursive: true, ...options }); - } - - if (fs.statSync(source).isDirectory()) { - const files = fs.readdirSync(source); - files.forEach(function (file) { - var curSource = path.join(source, file); - if (fs.statSync(curSource).isDirectory()) { - copyFolderRecursivelySync(curSource, path.join(target, file)); - } else { - fs.copyFileSync(curSource, path.join(target, path.basename(file))); - } - }); - } -} - -module.exports = ({ patterns, options = {} }) => { - return { - name: "Copy", - setup(build) { - build.onEnd(({ errors }) => { - if (errors.length && !options.skipOnError) { - return; - } - - const targetBase = - build.initialOptions.outdir || - path.dirname(build.initialOptions.outfile); - - patterns.forEach(({ from, to }) => { - copyFolderRecursivelySync(from, path.join(targetBase, to), options); - }); - }); - }, - }; -}; diff --git a/packages/core/package.json b/packages/core/package.json index 09cd5249a..652cfc7b3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -4,8 +4,22 @@ "license": "MIT", "exports": { ".": { + "import": "./lib/esm/index.js", "require": "./lib/cjs/index.js", - "import": "./lib/esm/index.js" + "default": "./index.ts", + "types": "./lib/esm/index.d.ts" + }, + "./*.js": { + "import": "./lib/esm/*.js", + "require": "./lib/cjs/*.js", + "default": "./*.js", + "types": "./lib/esm/*.d.ts" + }, + "./*": { + "import": "./lib/esm/*", + "require": "./lib/cjs/*", + "default": "./*", + "types": "./lib/esm/*" } }, "files": [ @@ -13,8 +27,8 @@ ], "scripts": { "build": "rimraf lib && zx scripts/build.mjs", - "dev": "tsc && (concurrently \"tsc -w -p tsconfig.prod.json\" \"tsc-alias -w -p tsconfig.prod.json\")", - "lint": "eslint --cache --ext .ts \"src\"", + "dev": "tsc && (concurrently \"tsc -w -p tsconfig.json\" \"tsc-alias -w -p tsconfig.json\")", + "lint": "eslint --ext .ts \"src\"", "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/core/scripts/build.mjs b/packages/core/scripts/build.mjs index 242c8d647..0b920a623 100644 --- a/packages/core/scripts/build.mjs +++ b/packages/core/scripts/build.mjs @@ -1,61 +1,18 @@ #!/usr/bin/env zx -import { build } from "esbuild"; -import { alias, buildConfig } from "@ledgerhq/esbuild-tools"; import path from "node:path"; -import dtsPlugin from "esbuild-plugin-d.ts"; -import pkg from "../package.json" assert { type: "json" }; const root = path.join(__dirname, ".."); -const srcRoot = path.join(root, "src"); -const outdir = path.join(root, "lib"); const tsconfigEsm = path.join(root, "tsconfig.esm.json"); const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); -const conf = { - entryPoints: [path.join(root, "index.ts")], - plugins: [ - alias({ - "@root": root, - "@internal": path.join(srcRoot, "internal"), - "@api": path.join(srcRoot, "api"), - }), - ], -}; - -const common = buildConfig(conf, pkg); - const buildEsm = async () => { - const config = { - ...common, - outdir: path.join(outdir, "esm"), - format: "esm", - tsconfig: tsconfigEsm, - plugins: [ - ...common.plugins, - dtsPlugin({ - tsconfig: tsconfigEsm, - }), - ], - }; - - await build(config); + await $`tsc --project ${tsconfigEsm}`; + await $`tsc-alias --project ${tsconfigEsm}`; }; const builCjs = async () => { - const config = { - ...common, - outdir: path.join(outdir, "cjs"), - format: "cjs", - tsconfig: tsconfigCjs, - plugins: [ - ...common.plugins, - dtsPlugin({ - tsconfig: tsconfigCjs, - }), - ], - }; - - await build(config); + await $`tsc --project ${tsconfigCjs}`; + await $`tsc-alias --project ${tsconfigCjs}`; }; const run = async () => await Promise.all([buildEsm(), builCjs()]); diff --git a/packages/signer/package.json b/packages/signer/package.json index 2d2edefbf..4a2ed1217 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -7,8 +7,22 @@ "private": true, "exports": { ".": { + "import": "./lib/esm/index.js", "require": "./lib/cjs/index.js", - "import": "./lib/esm/index.js" + "default": "./index.ts", + "types": "./lib/esm/index.d.ts" + }, + "./*.js": { + "import": "./lib/esm/*.js", + "require": "./lib/cjs/*.js", + "default": "./*.js", + "types": "./lib/esm/*.d.ts" + }, + "./*": { + "import": "./lib/esm/*", + "require": "./lib/cjs/*", + "default": "./*", + "types": "./lib/esm/*" } }, "files": [ @@ -17,7 +31,7 @@ "scripts": { "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc --watch", - "lint": "eslint --cache --ext .ts \"src\"", + "lint": "eslint --ext .ts \"src\"", "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/signer/scripts/build.mjs b/packages/signer/scripts/build.mjs index cec5397ea..0b920a623 100644 --- a/packages/signer/scripts/build.mjs +++ b/packages/signer/scripts/build.mjs @@ -1,67 +1,22 @@ #!/usr/bin/env zx -import { build } from "esbuild"; -import { /* alias, */ buildConfig } from "@ledgerhq/esbuild-tools"; -import dtsPlugin from "esbuild-plugin-d.ts"; -import pkg from "../package.json" assert { type: "json" }; +import path from "node:path"; const root = path.join(__dirname, ".."); -const srcRoot = path.join(root, "src"); -const outdir = path.join(root, "lib"); const tsconfigEsm = path.join(root, "tsconfig.esm.json"); const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); -const conf = { - entryPoints: [path.join(srcRoot, "index.ts")], - plugins: [ - // EXAMPLE USAGE, UNCOMMENT TO USE - // alias({ - // "@root": root, - // "@internal": path.join(srcRoot, "internal"), - // "@api": path.join(srcRoot, "api"), - // }), - ], -}; - -const common = buildConfig(conf, pkg); - const buildEsm = async () => { - const config = { - ...common, - outdir: path.join(outdir, "esm"), - format: "esm", - tsconfig: tsconfigEsm, - plugins: [ - ...common.plugins, - dtsPlugin({ - tsconfig: tsconfigEsm, - }), - ], - }; - - await build(config); + await $`tsc --project ${tsconfigEsm}`; + await $`tsc-alias --project ${tsconfigEsm}`; }; const builCjs = async () => { - const config = { - ...common, - outdir: path.join(outdir, "cjs"), - format: "cjs", - tsconfig: tsconfigCjs, - plugins: [ - ...common.plugins, - dtsPlugin({ - tsconfig: tsconfigCjs, - }), - ], - }; - - await build(config); + await $`tsc --project ${tsconfigCjs}`; + await $`tsc-alias --project ${tsconfigCjs}`; }; -const run = async () => Promise.all([buildEsm(), builCjs()]); +const run = async () => await Promise.all([buildEsm(), builCjs()]); -run() - .then(() => console.log("success")) - .catch((e) => { - console.error(e); - }); +run().catch((e) => { + console.error(e); +}); diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 35696e367..507b3b84a 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -7,8 +7,22 @@ "private": true, "exports": { ".": { + "import": "./lib/esm/index.js", "require": "./lib/cjs/index.js", - "import": "./lib/esm/index.js" + "default": "./index.ts", + "types": "./lib/esm/index.d.ts" + }, + "./*.js": { + "import": "./lib/esm/*.js", + "require": "./lib/cjs/*.js", + "default": "./*.js", + "types": "./lib/esm/*.d.ts" + }, + "./*": { + "import": "./lib/esm/*", + "require": "./lib/cjs/*", + "default": "./*", + "types": "./lib/esm/*" } }, "files": [ @@ -16,7 +30,7 @@ ], "scripts": { "build": "rimraf lib && zx scripts/build.mjs", - "lint": "eslint --cache --ext .ts \"src\"", + "lint": "eslint --ext .ts \"src\"", "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/trusted-apps/scripts/build.mjs b/packages/trusted-apps/scripts/build.mjs index cec5397ea..0b920a623 100644 --- a/packages/trusted-apps/scripts/build.mjs +++ b/packages/trusted-apps/scripts/build.mjs @@ -1,67 +1,22 @@ #!/usr/bin/env zx -import { build } from "esbuild"; -import { /* alias, */ buildConfig } from "@ledgerhq/esbuild-tools"; -import dtsPlugin from "esbuild-plugin-d.ts"; -import pkg from "../package.json" assert { type: "json" }; +import path from "node:path"; const root = path.join(__dirname, ".."); -const srcRoot = path.join(root, "src"); -const outdir = path.join(root, "lib"); const tsconfigEsm = path.join(root, "tsconfig.esm.json"); const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); -const conf = { - entryPoints: [path.join(srcRoot, "index.ts")], - plugins: [ - // EXAMPLE USAGE, UNCOMMENT TO USE - // alias({ - // "@root": root, - // "@internal": path.join(srcRoot, "internal"), - // "@api": path.join(srcRoot, "api"), - // }), - ], -}; - -const common = buildConfig(conf, pkg); - const buildEsm = async () => { - const config = { - ...common, - outdir: path.join(outdir, "esm"), - format: "esm", - tsconfig: tsconfigEsm, - plugins: [ - ...common.plugins, - dtsPlugin({ - tsconfig: tsconfigEsm, - }), - ], - }; - - await build(config); + await $`tsc --project ${tsconfigEsm}`; + await $`tsc-alias --project ${tsconfigEsm}`; }; const builCjs = async () => { - const config = { - ...common, - outdir: path.join(outdir, "cjs"), - format: "cjs", - tsconfig: tsconfigCjs, - plugins: [ - ...common.plugins, - dtsPlugin({ - tsconfig: tsconfigCjs, - }), - ], - }; - - await build(config); + await $`tsc --project ${tsconfigCjs}`; + await $`tsc-alias --project ${tsconfigCjs}`; }; -const run = async () => Promise.all([buildEsm(), builCjs()]); +const run = async () => await Promise.all([buildEsm(), builCjs()]); -run() - .then(() => console.log("success")) - .catch((e) => { - console.error(e); - }); +run().catch((e) => { + console.error(e); +}); diff --git a/packages/ui/package.json b/packages/ui/package.json index 900743bc8..916ce2af9 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -7,8 +7,22 @@ "private": true, "exports": { ".": { + "import": "./lib/esm/index.js", "require": "./lib/cjs/index.js", - "import": "./lib/esm/index.js" + "default": "./index.ts", + "types": "./lib/esm/index.d.ts" + }, + "./*.js": { + "import": "./lib/esm/*.js", + "require": "./lib/cjs/*.js", + "default": "./*.js", + "types": "./lib/esm/*.d.ts" + }, + "./*": { + "import": "./lib/esm/*", + "require": "./lib/cjs/*", + "default": "./*", + "types": "./lib/esm/*" } }, "files": [ @@ -17,7 +31,7 @@ "scripts": { "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc --watch", - "lint": "eslint --cache --ext .ts \"src\"", + "lint": "eslint --ext .ts \"src\"", "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/ui/scripts/build.mjs b/packages/ui/scripts/build.mjs index cec5397ea..0b920a623 100644 --- a/packages/ui/scripts/build.mjs +++ b/packages/ui/scripts/build.mjs @@ -1,67 +1,22 @@ #!/usr/bin/env zx -import { build } from "esbuild"; -import { /* alias, */ buildConfig } from "@ledgerhq/esbuild-tools"; -import dtsPlugin from "esbuild-plugin-d.ts"; -import pkg from "../package.json" assert { type: "json" }; +import path from "node:path"; const root = path.join(__dirname, ".."); -const srcRoot = path.join(root, "src"); -const outdir = path.join(root, "lib"); const tsconfigEsm = path.join(root, "tsconfig.esm.json"); const tsconfigCjs = path.join(root, "tsconfig.cjs.json"); -const conf = { - entryPoints: [path.join(srcRoot, "index.ts")], - plugins: [ - // EXAMPLE USAGE, UNCOMMENT TO USE - // alias({ - // "@root": root, - // "@internal": path.join(srcRoot, "internal"), - // "@api": path.join(srcRoot, "api"), - // }), - ], -}; - -const common = buildConfig(conf, pkg); - const buildEsm = async () => { - const config = { - ...common, - outdir: path.join(outdir, "esm"), - format: "esm", - tsconfig: tsconfigEsm, - plugins: [ - ...common.plugins, - dtsPlugin({ - tsconfig: tsconfigEsm, - }), - ], - }; - - await build(config); + await $`tsc --project ${tsconfigEsm}`; + await $`tsc-alias --project ${tsconfigEsm}`; }; const builCjs = async () => { - const config = { - ...common, - outdir: path.join(outdir, "cjs"), - format: "cjs", - tsconfig: tsconfigCjs, - plugins: [ - ...common.plugins, - dtsPlugin({ - tsconfig: tsconfigCjs, - }), - ], - }; - - await build(config); + await $`tsc --project ${tsconfigCjs}`; + await $`tsc-alias --project ${tsconfigCjs}`; }; -const run = async () => Promise.all([buildEsm(), builCjs()]); +const run = async () => await Promise.all([buildEsm(), builCjs()]); -run() - .then(() => console.log("success")) - .catch((e) => { - console.error(e); - }); +run().catch((e) => { + console.error(e); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 29c96689b..167ff2869 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,15 +20,12 @@ importers: '@types/node': specifier: ^20.12.5 version: 20.12.5 + concurrently: + specifier: ^8.2.2 + version: 8.2.2 danger: specifier: ^11.3.1 version: 11.3.1 - esbuild: - specifier: ^0.20.2 - version: 0.20.2 - esbuild-plugin-d.ts: - specifier: ^1.2.3 - version: 1.2.3(typescript@5.4.4) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -49,7 +46,7 @@ importers: version: 5.0.5 ts-jest: specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.24.4)(esbuild@0.20.2)(jest@29.7.0)(typescript@5.4.4) + version: 29.1.2(@babel/core@7.24.4)(jest@29.7.0)(typescript@5.4.4) tsc-alias: specifier: ^1.8.8 version: 1.8.8 @@ -329,10 +326,10 @@ packages: '@babel/helpers': 7.24.4 '@babel/parser': 7.24.4 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1(supports-color@5.5.0) + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -448,7 +445,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1(supports-color@5.5.0) + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color @@ -611,6 +608,23 @@ packages: '@babel/parser': 7.24.4 '@babel/types': 7.24.0 + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + /@babel/traverse@7.24.1(supports-color@5.5.0): resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} @@ -627,6 +641,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: false /@babel/types@7.24.0: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} @@ -952,213 +967,6 @@ packages: resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} dev: false - /@esbuild/aix-ppc64@0.20.2: - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64@0.20.2: - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.20.2: - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.20.2: - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.20.2: - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.20.2: - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.20.2: - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.20.2: - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.20.2: - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.20.2: - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.20.2: - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.20.2: - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.20.2: - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.20.2: - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.20.2: - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.20.2: - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.20.2: - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.20.2: - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.20.2: - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.20.2: - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.20.2: - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.20.2: - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.20.2: - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1179,7 +987,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.0 @@ -1275,7 +1083,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2892,7 +2700,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -2900,7 +2708,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -3751,6 +3559,22 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} + engines: {node: ^14.13.0 || >=16.0.0} + hasBin: true + dependencies: + chalk: 4.1.2 + date-fns: 2.30.0 + lodash: 4.17.21 + rxjs: 7.8.1 + shell-quote: 1.8.1 + spawn-command: 0.0.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + dev: true + /conf@12.0.0: resolution: {integrity: sha512-fIWyWUXrJ45cHCIQX+Ck1hrZDIf/9DR0P0Zewn3uNht28hbt5OfGUq8rRWsxi96pZWPyBEd0eY9ama01JTaknA==} engines: {node: '>=18'} @@ -3921,7 +3745,7 @@ packages: chalk: 2.4.2 commander: 2.20.3 core-js: 3.36.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 fast-json-patch: 3.1.1 get-stdin: 6.0.0 http-proxy-agent: 5.0.0 @@ -3998,6 +3822,13 @@ packages: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} dev: true + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.24.4 + dev: true + /debounce-fn@5.1.2: resolution: {integrity: sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A==} engines: {node: '>=12'} @@ -4016,6 +3847,17 @@ packages: ms: 2.1.3 dev: true + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -4438,48 +4280,6 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-plugin-d.ts@1.2.3(typescript@5.4.4): - resolution: {integrity: sha512-JkNqcCTkv0N39izAOLaiAQcFA6DfbhDkef1ZO6NvnHtTT+7i+4VHjCcAM2yFslRTBTK1TuF41FLSwWvGm88N7w==} - engines: {node: '>=12.0.0'} - peerDependencies: - typescript: '*' - dependencies: - chalk: 4.1.2 - lodash.merge: 4.6.2 - typescript: 5.4.4 - dev: true - - /esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - dev: true - /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -4993,7 +4793,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -5489,7 +5289,7 @@ packages: dependencies: basic-ftp: 5.0.4 data-uri-to-buffer: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -5783,7 +5583,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -5793,7 +5593,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -5819,7 +5619,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -5828,7 +5628,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -5854,7 +5654,7 @@ packages: '@types/node': 17.0.45 chalk: 4.1.2 change-case: 3.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 degit: 2.8.4 ejs: 3.1.9 enquirer: 2.4.1 @@ -6373,7 +6173,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -7748,7 +7548,7 @@ packages: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 get-uri: 6.0.3 http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 @@ -8038,7 +7838,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 lru-cache: 7.18.3 @@ -8619,6 +8419,10 @@ packages: engines: {node: '>=8'} dev: true + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -8685,7 +8489,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 socks: 2.7.3 transitivePeerDependencies: - supports-color @@ -8739,6 +8543,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} + dev: true + /spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} dependencies: @@ -9148,6 +8956,11 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} @@ -9162,7 +8975,7 @@ packages: typescript: 5.4.4 dev: true - /ts-jest@29.1.2(@babel/core@7.24.4)(esbuild@0.20.2)(jest@29.7.0)(typescript@5.4.4): + /ts-jest@29.1.2(@babel/core@7.24.4)(jest@29.7.0)(typescript@5.4.4): resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -9185,7 +8998,6 @@ packages: dependencies: '@babel/core': 7.24.4 bs-logger: 0.2.6 - esbuild: 0.20.2 fast-json-stable-stringify: 2.1.0 jest: 29.7.0(@types/node@20.12.5) jest-util: 29.7.0 From a90229579b5aa426b3bdc80a7b1764eaaf8a6596 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 10 Apr 2024 11:04:27 +0200 Subject: [PATCH 173/253] =?UTF-8?q?=F0=9F=94=A7=20(packages):=20Remove=20u?= =?UTF-8?q?nused=20remnant=20packages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sample/package.json | 6 +- package.json | 4 +- packages/config/eslint/package.json | 6 +- packages/config/typescript/package.json | 2 +- packages/core/package.json | 1 - packages/signer/package.json | 1 - packages/trusted-apps/package.json | 1 - packages/ui/package.json | 1 - pnpm-lock.yaml | 1091 ++++++++++++----------- 9 files changed, 603 insertions(+), 510 deletions(-) diff --git a/apps/sample/package.json b/apps/sample/package.json index 6744cfa7e..b91b7a87e 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -16,7 +16,7 @@ "@ledgerhq/device-sdk-core": "workspace:*", "@ledgerhq/react-ui": "^0.14.16", "@sentry/nextjs": "^7.109.0", - "next": "14.0.4", + "next": "14.1.4", "react": "^18", "react-dom": "^18", "styled-components": "^5.3.11" @@ -25,10 +25,10 @@ "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/prettier-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", - "@types/react": "^18.2.74", + "@types/react": "^18.2.75", "@types/styled-components": "^5.1.25", "autoprefixer": "^10.4.19", - "eslint-config-next": "14.0.4", + "eslint-config-next": "14.1.4", "postcss": "^8.4.38" } } diff --git a/package.json b/package.json index a9fd193cb..a36e8abdb 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.1", "@types/jest": "^29.5.12", - "@types/node": "^20.12.5", + "@types/node": "^20.12.7", "concurrently": "^8.2.2", "danger": "^11.3.1", "eslint": "^8.57.0", @@ -46,7 +46,7 @@ "tsc-alias": "^1.8.8", "turbo": "^1.13.2", "typescript": "^5.4.4", - "zx": "^7.2.3" + "zx": "^8.0.1" }, "packageManager": "pnpm@8.15.6", "engines": { diff --git a/packages/config/eslint/package.json b/packages/config/eslint/package.json index a5fb90d93..c7a359d75 100644 --- a/packages/config/eslint/package.json +++ b/packages/config/eslint/package.json @@ -7,11 +7,11 @@ "index.js" ], "devDependencies": { - "@typescript-eslint/eslint-plugin": "^7.5.0", - "@typescript-eslint/parser": "^7.5.0", + "@typescript-eslint/eslint-plugin": "^7.6.0", + "@typescript-eslint/parser": "^7.6.0", "@vercel/style-guide": "^6.0.0", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^1.13.2", - "eslint-plugin-simple-import-sort": "^10.0.0" + "eslint-plugin-simple-import-sort": "^12.0.0" } } diff --git a/packages/config/typescript/package.json b/packages/config/typescript/package.json index 42431f756..a770a6458 100644 --- a/packages/config/typescript/package.json +++ b/packages/config/typescript/package.json @@ -9,7 +9,7 @@ "devDependencies": { "@tsconfig/recommended": "^1.0.6", "@types/eslint": "^8.56.7", - "@types/react": "^18.2.74", + "@types/react": "^18.2.75", "@types/react-dom": "^18.2.24" } } diff --git a/packages/core/package.json b/packages/core/package.json index 652cfc7b3..05b794291 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -49,7 +49,6 @@ "uuid": "^9.0.1" }, "devDependencies": { - "@ledgerhq/esbuild-tools": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", "@ledgerhq/prettier-config-dsdk": "workspace:*", diff --git a/packages/signer/package.json b/packages/signer/package.json index 4a2ed1217..9df23e8ed 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -44,7 +44,6 @@ "reflect-metadata": "^0.2.2" }, "devDependencies": { - "@ledgerhq/esbuild-tools": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", "@ledgerhq/prettier-config-dsdk": "workspace:*", diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 507b3b84a..7f40c38df 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -44,7 +44,6 @@ "reflect-metadata": "^0.2.2" }, "devDependencies": { - "@ledgerhq/esbuild-tools": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", "@ledgerhq/prettier-config-dsdk": "workspace:*", diff --git a/packages/ui/package.json b/packages/ui/package.json index 916ce2af9..27385bf3f 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -44,7 +44,6 @@ "reflect-metadata": "^0.2.2" }, "devDependencies": { - "@ledgerhq/esbuild-tools": "workspace:*", "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/jest-config-dsdk": "workspace:*", "@ledgerhq/prettier-config-dsdk": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 167ff2869..eca4e7a59 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: ^29.5.12 version: 29.5.12 '@types/node': - specifier: ^20.12.5 - version: 20.12.5 + specifier: ^20.12.7 + version: 20.12.7 concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -37,7 +37,7 @@ importers: version: 6.2.11 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.12.5) + version: 29.7.0(@types/node@20.12.7) prettier: specifier: ^3.2.5 version: 3.2.5 @@ -57,8 +57,8 @@ importers: specifier: ^5.4.4 version: 5.4.4 zx: - specifier: ^7.2.3 - version: 7.2.3 + specifier: ^8.0.1 + version: 8.0.1 apps/sample: dependencies: @@ -67,13 +67,13 @@ importers: version: link:../../packages/core '@ledgerhq/react-ui': specifier: ^0.14.16 - version: 0.14.16(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11) + version: 0.14.16(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11) '@sentry/nextjs': specifier: ^7.109.0 - version: 7.109.0(next@14.0.4)(react@18.2.0) + version: 7.109.0(next@14.1.4)(react@18.2.0) next: - specifier: 14.0.4 - version: 14.0.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0) + specifier: 14.1.4 + version: 14.1.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18 version: 18.2.0 @@ -94,8 +94,8 @@ importers: specifier: workspace:* version: link:../../packages/config/typescript '@types/react': - specifier: ^18.2.74 - version: 18.2.74 + specifier: ^18.2.75 + version: 18.2.75 '@types/styled-components': specifier: ^5.1.25 version: 5.1.34 @@ -103,40 +103,38 @@ importers: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) eslint-config-next: - specifier: 14.0.4 - version: 14.0.4(eslint@8.57.0)(typescript@5.4.4) + specifier: 14.1.4 + version: 14.1.4(eslint@9.0.0)(typescript@5.4.4) postcss: specifier: ^8.4.38 version: 8.4.38 - packages/config/esbuild: {} - packages/config/eslint: devDependencies: '@typescript-eslint/eslint-plugin': - specifier: ^7.5.0 - version: 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4) + specifier: ^7.6.0 + version: 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4) '@typescript-eslint/parser': - specifier: ^7.5.0 - version: 7.5.0(eslint@8.57.0)(typescript@5.4.4) + specifier: ^7.6.0 + version: 7.6.0(eslint@9.0.0)(typescript@5.4.4) '@vercel/style-guide': specifier: ^6.0.0 - version: 6.0.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4) + version: 6.0.0(eslint@9.0.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@9.0.0) eslint-config-turbo: specifier: ^1.13.2 - version: 1.13.2(eslint@8.57.0) + version: 1.13.2(eslint@9.0.0) eslint-plugin-simple-import-sort: - specifier: ^10.0.0 - version: 10.0.0(eslint@8.57.0) + specifier: ^12.0.0 + version: 12.0.0(eslint@9.0.0) packages/config/jest: devDependencies: ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.5)(typescript@5.4.4) + version: 10.9.2(@types/node@20.12.7)(typescript@5.4.4) packages/config/prettier: devDependencies: @@ -153,8 +151,8 @@ importers: specifier: ^8.56.7 version: 8.56.7 '@types/react': - specifier: ^18.2.74 - version: 18.2.74 + specifier: ^18.2.75 + version: 18.2.75 '@types/react-dom': specifier: ^18.2.24 version: 18.2.24 @@ -186,9 +184,6 @@ importers: specifier: ^9.0.1 version: 9.0.1 devDependencies: - '@ledgerhq/esbuild-tools': - specifier: workspace:* - version: link:../config/esbuild '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint @@ -212,7 +207,7 @@ importers: version: 1.0.6 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.5)(typescript@5.4.4) + version: 10.9.2(@types/node@20.12.7)(typescript@5.4.4) packages/signer: dependencies: @@ -223,9 +218,6 @@ importers: specifier: ^0.2.2 version: 0.2.2 devDependencies: - '@ledgerhq/esbuild-tools': - specifier: workspace:* - version: link:../config/esbuild '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint @@ -248,9 +240,6 @@ importers: specifier: ^0.2.2 version: 0.2.2 devDependencies: - '@ledgerhq/esbuild-tools': - specifier: workspace:* - version: link:../config/esbuild '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint @@ -273,9 +262,6 @@ importers: specifier: ^0.2.2 version: 0.2.2 devDependencies: - '@ledgerhq/esbuild-tools': - specifier: workspace:* - version: link:../config/esbuild '@ledgerhq/eslint-config-dsdk': specifier: workspace:* version: link:../config/eslint @@ -326,17 +312,17 @@ packages: '@babel/helpers': 7.24.4 '@babel/parser': 7.24.4 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 + '@babel/traverse': 7.24.1(supports-color@5.5.0) '@babel/types': 7.24.0 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@8.57.0): + /@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@9.0.0): resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: @@ -345,7 +331,7 @@ packages: dependencies: '@babel/core': 7.24.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.0 + eslint: 9.0.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 dev: true @@ -445,7 +431,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 + '@babel/traverse': 7.24.1(supports-color@5.5.0) '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color @@ -608,23 +594,6 @@ packages: '@babel/parser': 7.24.4 '@babel/types': 7.24.0 - /@babel/traverse@7.24.1: - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/traverse@7.24.1(supports-color@5.5.0): resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} @@ -641,7 +610,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: false /@babel/types@7.24.0: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} @@ -904,7 +872,7 @@ packages: resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} dev: false - /@emotion/react@11.11.3(@types/react@18.2.74)(react@18.2.0): + /@emotion/react@11.11.3(@types/react@18.2.75)(react@18.2.0): resolution: {integrity: sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==} peerDependencies: '@types/react': '*' @@ -920,7 +888,7 @@ packages: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.2.74 + '@types/react': 18.2.75 hoist-non-react-statics: 3.3.2 react: 18.2.0 dev: false @@ -977,6 +945,16 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@9.0.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 9.0.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/regexpp@4.10.0: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -987,7 +965,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.0 @@ -999,11 +977,33 @@ packages: - supports-color dev: true + /@eslint/eslintrc@3.0.2: + resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4(supports-color@5.5.0) + espree: 10.0.1 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@eslint/js@8.57.0: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@eslint/js@9.0.0: + resolution: {integrity: sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + /@floating-ui/core@0.3.1: resolution: {integrity: sha512-ensKY7Ub59u16qsVIFEo2hwTCqZ/r9oZZFh51ivcLGHfUwTn8l1Xzng8RJUe91H/UP8PeqeBronAGx0qmzwk2g==} dev: false @@ -1027,7 +1027,7 @@ packages: '@floating-ui/utils': 0.2.1 dev: false - /@floating-ui/react-dom@0.4.3(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0): + /@floating-ui/react-dom@0.4.3(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-ZL88ryd9p6sFh9jIC/+05JZoNsogcq6U09cygQjiy757QtQqxIVLQwFag+BAWWYqpNEMO0S60fkqmh8KIAV4oA==} peerDependencies: react: '>=16.8.0' @@ -1036,7 +1036,7 @@ packages: '@floating-ui/dom': 0.1.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.74)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.75)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -1083,7 +1083,18 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/config-array@0.12.3: + resolution: {integrity: sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -1131,7 +1142,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1152,14 +1163,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.12.5) + jest-config: 29.7.0(@types/node@20.12.7) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1187,7 +1198,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 jest-mock: 29.7.0 dev: true @@ -1214,7 +1225,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.5 + '@types/node': 20.12.7 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1247,7 +1258,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.12.5 + '@types/node': 20.12.7 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1335,7 +1346,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.5 + '@types/node': 20.12.7 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -1372,7 +1383,7 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@ledgerhq/crypto-icons-ui@1.1.0(@types/react@18.2.74)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): + /@ledgerhq/crypto-icons-ui@1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): resolution: {integrity: sha512-llccdOI5ec+2pD+eKWd7vvOQTE9LYfTdoqieX3qQ6hmNS4V/Bt3fu2mE7fJNy9JvHY9ajRXAK3c8Q2146rZiSg==} peerDependencies: '@types/react': '*' @@ -1383,13 +1394,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.74 + '@types/react': 18.2.75 react: 18.2.0 styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false - /@ledgerhq/icons-ui@0.6.3(@types/react@18.2.74)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): + /@ledgerhq/icons-ui@0.6.3(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): resolution: {integrity: sha512-CcYjNhSESHZPx39f9cnqWNvw6AGXxaGPmVWYfOgdcAtR9iWPw+XDiJ2czTa+taBY1Q1b4lyiKMy3mOGdKAj+7w==} peerDependencies: '@types/react': '*' @@ -1400,13 +1411,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.74 + '@types/react': 18.2.75 react: 18.2.0 styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 dev: false - /@ledgerhq/react-ui@0.14.16(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11): + /@ledgerhq/react-ui@0.14.16(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11): resolution: {integrity: sha512-JuQasWXkGdfM1/Gk0eNKUt065vdH3lfN4c5qzC3v6XgWzFl7E+gSD8jhOq9r0GPJBxFkxVD0lGgGUWqdJF8lPg==} peerDependencies: '@types/react': '*' @@ -1417,12 +1428,12 @@ packages: '@types/react': optional: true dependencies: - '@floating-ui/react-dom': 0.4.3(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0) - '@ledgerhq/crypto-icons-ui': 1.1.0(@types/react@18.2.74)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) - '@ledgerhq/icons-ui': 0.6.3(@types/react@18.2.74)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) + '@floating-ui/react-dom': 0.4.3(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0) + '@ledgerhq/crypto-icons-ui': 1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) + '@ledgerhq/icons-ui': 0.6.3(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) '@ledgerhq/ui-shared': 0.2.1 '@tippyjs/react': 4.2.6(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.74 + '@types/react': 18.2.75 chart.js: 3.9.1 chartjs-adapter-moment: 1.0.1(chart.js@3.9.1)(moment@2.30.1) color: 4.2.3 @@ -1432,7 +1443,7 @@ packages: react-chartjs-2: 3.3.0(chart.js@3.9.1)(react@18.2.0) react-dom: 18.2.0(react@18.2.0) react-is: 17.0.2 - react-select: 5.8.0(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0) + react-select: 5.8.0(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0) react-spring: 8.0.27(react-dom@18.2.0)(react@18.2.0) react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) react-window: 1.8.10(react-dom@18.2.0)(react@18.2.0) @@ -1484,18 +1495,18 @@ packages: resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} dev: true - /@next/env@14.0.4: - resolution: {integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==} + /@next/env@14.1.4: + resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} dev: false - /@next/eslint-plugin-next@14.0.4: - resolution: {integrity: sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==} + /@next/eslint-plugin-next@14.1.4: + resolution: {integrity: sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==} dependencies: - glob: 7.1.7 + glob: 10.3.10 dev: true - /@next/swc-darwin-arm64@14.0.4: - resolution: {integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==} + /@next/swc-darwin-arm64@14.1.4: + resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1503,8 +1514,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@14.0.4: - resolution: {integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==} + /@next/swc-darwin-x64@14.1.4: + resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1512,8 +1523,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@14.0.4: - resolution: {integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==} + /@next/swc-linux-arm64-gnu@14.1.4: + resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1521,8 +1532,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@14.0.4: - resolution: {integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==} + /@next/swc-linux-arm64-musl@14.1.4: + resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1530,8 +1541,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@14.0.4: - resolution: {integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==} + /@next/swc-linux-x64-gnu@14.1.4: + resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1539,8 +1550,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@14.0.4: - resolution: {integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==} + /@next/swc-linux-x64-musl@14.1.4: + resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1548,8 +1559,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@14.0.4: - resolution: {integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==} + /@next/swc-win32-arm64-msvc@14.1.4: + resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1557,8 +1568,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@14.0.4: - resolution: {integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==} + /@next/swc-win32-ia32-msvc@14.1.4: + resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -1566,8 +1577,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@14.0.4: - resolution: {integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==} + /@next/swc-win32-x64-msvc@14.1.4: + resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1877,7 +1888,7 @@ packages: tslib: 1.14.1 dev: false - /@sentry/nextjs@7.109.0(next@14.0.4)(react@18.2.0): + /@sentry/nextjs@7.109.0(next@14.1.4)(react@18.2.0): resolution: {integrity: sha512-AT0jhMDj7N57z8+XfgEyTJBogpU64z4mQpfOsSF5uuequzo3IlVVoJcu88jdqUkaVFxBJp3aF2T4nz65OHLoeA==} engines: {node: '>=8'} peerDependencies: @@ -1898,7 +1909,7 @@ packages: '@sentry/vercel-edge': 7.109.0 '@sentry/webpack-plugin': 1.21.0 chalk: 3.0.0 - next: 14.0.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 resolve: 1.22.8 rollup: 2.78.0 @@ -2185,7 +2196,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.12.5 + '@types/node': 20.12.7 '@types/responselike': 1.0.3 dev: true @@ -2201,21 +2212,23 @@ packages: /@types/fs-extra@11.0.4: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + requiresBuild: true dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.12.5 + '@types/node': 20.12.7 dev: true + optional: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.12.5 + '@types/node': 20.12.7 dev: true /@types/hoist-non-react-statics@3.3.5: resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} dependencies: - '@types/react': 18.2.74 + '@types/react': 18.2.75 hoist-non-react-statics: 3.3.2 dev: true @@ -2255,14 +2268,16 @@ packages: /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + requiresBuild: true dependencies: - '@types/node': 20.12.5 + '@types/node': 20.12.7 dev: true + optional: true /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.12.5 + '@types/node': 20.12.7 dev: true /@types/minimist@1.2.5: @@ -2277,14 +2292,8 @@ packages: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: true - /@types/node@18.19.30: - resolution: {integrity: sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/node@20.12.5: - resolution: {integrity: sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==} + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} dependencies: undici-types: 5.26.5 dev: true @@ -2297,35 +2306,31 @@ packages: resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} dev: false - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - - /@types/ps-tree@1.1.6: - resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} - dev: true + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} /@types/react-dom@18.2.24: resolution: {integrity: sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==} dependencies: - '@types/react': 18.2.74 + '@types/react': 18.2.75 dev: true /@types/react-transition-group@4.4.10: resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} dependencies: - '@types/react': 18.2.74 + '@types/react': 18.2.75 dev: false - /@types/react@18.2.74: - resolution: {integrity: sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==} + /@types/react@18.2.75: + resolution: {integrity: sha512-+DNnF7yc5y0bHkBTiLKqXFe+L4B3nvOphiMY3tuA5X10esmjqk7smyBZzbGTy2vsiy/Bnzj8yFIBL8xhRacoOg==} dependencies: - '@types/prop-types': 15.7.11 + '@types/prop-types': 15.7.12 csstype: 3.1.3 /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.12.5 + '@types/node': 20.12.7 dev: true /@types/semver@7.5.8: @@ -2340,7 +2345,7 @@ packages: resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} dependencies: '@types/hoist-non-react-statics': 3.3.5 - '@types/react': 18.2.74 + '@types/react': 18.2.75 csstype: 3.1.3 dev: true @@ -2352,10 +2357,6 @@ packages: resolution: {integrity: sha512-IWyssXmRDo6K7s31dxf+U+x/XUWuVsl9qUIYbJmpUHPcTv/COfBCKw/F0smI45+gPV34brjyP30BFcIsHgYWLA==} dev: true - /@types/which@3.0.3: - resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} - dev: true - /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true @@ -2366,8 +2367,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4): - resolution: {integrity: sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==} + /@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4): + resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -2378,15 +2379,15 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/scope-manager': 7.5.0 - '@typescript-eslint/type-utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/visitor-keys': 7.5.0 + '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) + '@typescript-eslint/scope-manager': 7.6.0 + '@typescript-eslint/type-utils': 7.6.0(eslint@9.0.0)(typescript@5.4.4) + '@typescript-eslint/utils': 7.6.0(eslint@9.0.0)(typescript@5.4.4) + '@typescript-eslint/visitor-keys': 7.6.0 debug: 4.3.4(supports-color@5.5.0) - eslint: 8.57.0 + eslint: 9.0.0 graphemer: 1.4.0 - ignore: 5.3.0 + ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.4) @@ -2395,7 +2396,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2410,14 +2411,14 @@ packages: '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@5.5.0) - eslint: 8.57.0 + eslint: 9.0.0 typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.5.0(eslint@8.57.0)(typescript@5.4.4): - resolution: {integrity: sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==} + /@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4): + resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -2426,12 +2427,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.5.0 - '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4) - '@typescript-eslint/visitor-keys': 7.5.0 + '@typescript-eslint/scope-manager': 7.6.0 + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) + '@typescript-eslint/visitor-keys': 7.6.0 debug: 4.3.4(supports-color@5.5.0) - eslint: 8.57.0 + eslint: 9.0.0 typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -2461,8 +2462,16 @@ packages: '@typescript-eslint/visitor-keys': 7.5.0 dev: true - /@typescript-eslint/type-utils@7.5.0(eslint@8.57.0)(typescript@5.4.4): - resolution: {integrity: sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==} + /@typescript-eslint/scope-manager@7.6.0: + resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/visitor-keys': 7.6.0 + dev: true + + /@typescript-eslint/type-utils@7.6.0(eslint@9.0.0)(typescript@5.4.4): + resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -2471,10 +2480,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4) - '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) + '@typescript-eslint/utils': 7.6.0(eslint@9.0.0)(typescript@5.4.4) debug: 4.3.4(supports-color@5.5.0) - eslint: 8.57.0 + eslint: 9.0.0 ts-api-utils: 1.3.0(typescript@5.4.4) typescript: 5.4.4 transitivePeerDependencies: @@ -2496,6 +2505,11 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true + /@typescript-eslint/types@7.6.0: + resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2561,19 +2575,41 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.4): + resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/visitor-keys': 7.6.0 + debug: 4.3.4(supports-color@5.5.0) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.4) + typescript: 5.4.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@9.0.0)(typescript@5.4.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.4) - eslint: 8.57.0 + eslint: 9.0.0 eslint-scope: 5.1.1 semver: 7.6.0 transitivePeerDependencies: @@ -2581,19 +2617,38 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.5.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/utils@7.5.0(eslint@9.0.0)(typescript@5.4.4): resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 7.5.0 '@typescript-eslint/types': 7.5.0 '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4) - eslint: 8.57.0 + eslint: 9.0.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@7.6.0(eslint@9.0.0)(typescript@5.4.4): + resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.6.0 + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) + eslint: 9.0.0 semver: 7.6.0 transitivePeerDependencies: - supports-color @@ -2624,11 +2679,19 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@typescript-eslint/visitor-keys@7.6.0: + resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.6.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@6.0.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4): + /@vercel/style-guide@6.0.0(eslint@9.0.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4): resolution: {integrity: sha512-tu0wFINGz91EPwaT5VjSqUwbvCY9pvLach7SPG4XyfJKPU9Vku2TFa6+AyzJ4oroGbo9fK+TQhIFHrnFl0nCdg==} engines: {node: '>=18.18'} peerDependencies: @@ -2647,25 +2710,25 @@ packages: optional: true dependencies: '@babel/core': 7.24.4 - '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) + '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@9.0.0) '@rushstack/eslint-patch': 1.10.1 - '@typescript-eslint/eslint-plugin': 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) - eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) + '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) + eslint: 9.0.0 + eslint-config-prettier: 9.1.0(eslint@9.0.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.5.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-playwright: 1.5.4(eslint-plugin-jest@27.9.0)(eslint@8.57.0) - eslint-plugin-react: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.4) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.0.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(jest@29.7.0)(typescript@5.4.4) + eslint-plugin-jsx-a11y: 6.8.0(eslint@9.0.0) + eslint-plugin-playwright: 1.5.4(eslint-plugin-jest@27.9.0)(eslint@9.0.0) + eslint-plugin-react: 7.34.1(eslint@9.0.0) + eslint-plugin-react-hooks: 4.6.0(eslint@9.0.0) + eslint-plugin-testing-library: 6.2.0(eslint@9.0.0)(typescript@5.4.4) eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 51.0.1(eslint@8.57.0) - eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.57.0)(typescript@5.4.4) + eslint-plugin-unicorn: 51.0.1(eslint@9.0.0) + eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(typescript@5.4.4) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.14(prettier@3.2.5) typescript: 5.4.4 @@ -2685,6 +2748,14 @@ packages: acorn: 8.11.2 dev: true + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: true + /acorn-walk@8.3.1: resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} engines: {node: '>=0.4.0'} @@ -2696,11 +2767,17 @@ packages: hasBin: true dev: true + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -2708,7 +2785,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -2846,6 +2923,18 @@ packages: is-string: 1.0.7 dev: true + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + dev: true + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -2863,15 +2952,16 @@ packages: es-shim-unscopables: 1.0.2 dev: true - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.4 dev: true /array.prototype.flat@1.3.2: @@ -3308,6 +3398,10 @@ packages: /caniuse-lite@1.0.30001607: resolution: {integrity: sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==} + /caniuse-lite@1.0.30001608: + resolution: {integrity: sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==} + dev: false + /chalk@2.3.0: resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} engines: {node: '>=4'} @@ -3644,7 +3738,7 @@ packages: yaml: 1.10.2 dev: false - /create-jest@29.7.0(@types/node@20.12.5): + /create-jest@29.7.0(@types/node@20.12.7): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3653,7 +3747,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.12.5) + jest-config: 29.7.0(@types/node@20.12.7) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3745,7 +3839,7 @@ packages: chalk: 2.4.2 commander: 2.20.3 core-js: 3.36.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) fast-json-patch: 3.1.1 get-stdin: 6.0.0 http-proxy-agent: 5.0.0 @@ -3847,17 +3941,6 @@ packages: ms: 2.1.3 dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -4069,10 +4152,6 @@ packages: engines: {node: '>=10'} dev: true - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true @@ -4139,8 +4218,8 @@ packages: once: 1.4.0 dev: true - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + /enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -4319,8 +4398,8 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-next@14.0.4(eslint@8.57.0)(typescript@5.4.4): - resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==} + /eslint-config-next@14.1.4(eslint@9.0.0)(typescript@5.4.4): + resolution: {integrity: sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -4328,38 +4407,38 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 14.0.4 + '@next/eslint-plugin-next': 14.1.4 '@rushstack/eslint-patch': 1.10.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.4) - eslint: 8.57.0 + '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) + eslint: 9.0.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@9.0.0) + eslint-plugin-react: 7.34.1(eslint@9.0.0) + eslint-plugin-react-hooks: 4.6.0(eslint@9.0.0) typescript: 5.4.4 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color dev: true - /eslint-config-prettier@9.1.0(eslint@8.57.0): + /eslint-config-prettier@9.1.0(eslint@9.0.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.57.0 + eslint: 9.0.0 dev: true - /eslint-config-turbo@1.13.2(eslint@8.57.0): + /eslint-config-turbo@1.13.2(eslint@9.0.0): resolution: {integrity: sha512-TzvsMwNJx/P4JYw79iFqbyQApnyT050gW7dBxnNeNVl3pVMnT2rwaFo9Q3Hc49Tp5NANxEwYN9RStF50P/IwGA==} peerDependencies: eslint: '>6.6.0' dependencies: - eslint: 8.57.0 - eslint-plugin-turbo: 1.13.2(eslint@8.57.0) + eslint: 9.0.0 + eslint-plugin-turbo: 1.13.2(eslint@9.0.0) dev: true /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): @@ -4368,7 +4447,7 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -4381,7 +4460,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4389,12 +4468,12 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.4(supports-color@5.5.0) - enhanced-resolve: 5.15.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + enhanced-resolve: 5.16.0 + eslint: 9.0.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.2 + get-tsconfig: 4.7.3 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -4404,7 +4483,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.5.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4412,12 +4491,12 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.4(supports-color@5.5.0) - enhanced-resolve: 5.15.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + enhanced-resolve: 5.16.0 + eslint: 9.0.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.2 + get-tsconfig: 4.7.3 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -4427,8 +4506,8 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -4448,17 +4527,17 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) debug: 3.2.7 - eslint: 8.57.0 + eslint: 9.0.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -4478,27 +4557,27 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) debug: 3.2.7 - eslint: 8.57.0 + eslint: 9.0.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.5.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@9.0.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.57.0 + eslint: 9.0.0 ignore: 5.3.0 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4508,23 +4587,23 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.4) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 9.0.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 transitivePeerDependencies: @@ -4533,7 +4612,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4543,23 +4622,23 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 9.0.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 transitivePeerDependencies: @@ -4568,7 +4647,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(jest@29.7.0)(typescript@5.4.4): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4581,16 +4660,16 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.4) - eslint: 8.57.0 - jest: 29.7.0(@types/node@20.12.5) + '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4) + '@typescript-eslint/utils': 5.62.0(eslint@9.0.0)(typescript@5.4.4) + eslint: 9.0.0 + jest: 29.7.0(@types/node@20.12.7) transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): + /eslint-plugin-jsx-a11y@6.8.0(eslint@9.0.0): resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} engines: {node: '>=4.0'} peerDependencies: @@ -4598,7 +4677,7 @@ packages: dependencies: '@babel/runtime': 7.24.4 aria-query: 5.3.0 - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 axe-core: 4.7.0 @@ -4606,16 +4685,16 @@ packages: damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.18 - eslint: 8.57.0 + eslint: 9.0.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 dev: true - /eslint-plugin-playwright@1.5.4(eslint-plugin-jest@27.9.0)(eslint@8.57.0): + /eslint-plugin-playwright@1.5.4(eslint-plugin-jest@27.9.0)(eslint@9.0.0): resolution: {integrity: sha512-J38Wy3Vc2f9y73J+KRmgXgbYI8TZ3zbz6qBbTj3PhpFndUS572jZ7kqQ3rJ9si5BaMHT7lmZzraO+3UjwIDV4Q==} engines: {node: '>=16.6.0'} peerDependencies: @@ -4625,63 +4704,63 @@ packages: eslint-plugin-jest: optional: true dependencies: - eslint: 8.57.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.4) + eslint: 9.0.0 + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(jest@29.7.0)(typescript@5.4.4) globals: 13.24.0 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): + /eslint-plugin-react-hooks@4.6.0(eslint@9.0.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.57.0 + eslint: 9.0.0 dev: true - /eslint-plugin-react@7.34.1(eslint@8.57.0): + /eslint-plugin-react@7.34.1(eslint@9.0.0): resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 es-iterator-helpers: 1.0.18 - eslint: 8.57.0 + eslint: 9.0.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.57.0): - resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + /eslint-plugin-simple-import-sort@12.0.0(eslint@9.0.0): + resolution: {integrity: sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.57.0 + eslint: 9.0.0 dev: true - /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.4): + /eslint-plugin-testing-library@6.2.0(eslint@9.0.0)(typescript@5.4.4): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.4) - eslint: 8.57.0 + '@typescript-eslint/utils': 5.62.0(eslint@9.0.0)(typescript@5.4.4) + eslint: 9.0.0 transitivePeerDependencies: - supports-color - typescript @@ -4694,28 +4773,28 @@ packages: '@microsoft/tsdoc-config': 0.16.2 dev: true - /eslint-plugin-turbo@1.13.2(eslint@8.57.0): + /eslint-plugin-turbo@1.13.2(eslint@9.0.0): resolution: {integrity: sha512-QNaihF0hTRjfOBd1SLHrftm8V3pOU35CNS/C0/Z6qY1xxdL1PSv4IctEIldSMX7/A1jOPYwMPO7wYwPXgjgp/g==} peerDependencies: eslint: '>6.6.0' dependencies: dotenv: 16.0.3 - eslint: 8.57.0 + eslint: 9.0.0 dev: true - /eslint-plugin-unicorn@51.0.1(eslint@8.57.0): + /eslint-plugin-unicorn@51.0.1(eslint@9.0.0): resolution: {integrity: sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==} engines: {node: '>=16'} peerDependencies: eslint: '>=8.56.0' dependencies: '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) '@eslint/eslintrc': 2.1.4 ci-info: 4.0.0 clean-regexp: 1.0.0 core-js-compat: 3.36.1 - eslint: 8.57.0 + eslint: 9.0.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -4730,7 +4809,7 @@ packages: - supports-color dev: true - /eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.57.0)(typescript@5.4.4): + /eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(typescript@5.4.4): resolution: {integrity: sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg==} engines: {node: ^18.0.0 || >= 20.0.0} peerDependencies: @@ -4743,9 +4822,9 @@ packages: vitest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) - eslint: 8.57.0 + '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4) + '@typescript-eslint/utils': 7.5.0(eslint@9.0.0)(typescript@5.4.4) + eslint: 9.0.0 transitivePeerDependencies: - supports-color - typescript @@ -4767,6 +4846,14 @@ packages: estraverse: 5.3.0 dev: true + /eslint-scope@8.0.1: + resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + /eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} @@ -4777,6 +4864,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + /eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4793,7 +4885,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -4824,6 +4916,58 @@ packages: - supports-color dev: true + /eslint@9.0.0: + resolution: {integrity: sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 3.0.2 + '@eslint/js': 9.0.0 + '@humanwhocodes/config-array': 0.12.3 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.1 + eslint-visitor-keys: 4.0.0 + espree: 10.0.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + 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.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@10.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 4.0.0 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4872,18 +5016,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /event-stream@3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} - dependencies: - duplexer: 0.1.2 - from: 0.1.7 - map-stream: 0.1.0 - pause-stream: 0.0.11 - split: 0.3.3 - stream-combiner: 0.0.4 - through: 2.3.8 - dev: true - /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -5026,6 +5158,13 @@ packages: flat-cache: 3.2.0 dev: true + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + dependencies: + flat-cache: 4.0.1 + dev: true + /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -5080,10 +5219,22 @@ packages: rimraf: 3.0.2 dev: true + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + dev: true + /flatted@3.2.9: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -5123,10 +5274,6 @@ packages: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true - /from@0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - dev: true - /front-matter@4.0.2: resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} dependencies: @@ -5206,11 +5353,6 @@ packages: engines: {node: '>=10'} dev: true - /fx@31.0.0: - resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==} - hasBin: true - dev: true - /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -5277,8 +5419,8 @@ packages: get-intrinsic: 1.2.4 dev: true - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} dependencies: resolve-pkg-maps: 1.0.0 dev: true @@ -5289,7 +5431,7 @@ packages: dependencies: basic-ftp: 5.0.4 data-uri-to-buffer: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -5344,10 +5486,6 @@ packages: is-glob: 4.0.3 dev: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: false - /glob@10.3.10: resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} engines: {node: '>=16 || 14 >=14.17'} @@ -5360,17 +5498,6 @@ packages: path-scurry: 1.10.1 dev: true - /glob@7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -5411,6 +5538,11 @@ packages: type-fest: 0.20.2 dev: true + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + dev: true + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -5436,7 +5568,7 @@ packages: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.1 merge2: 1.4.1 slash: 4.0.0 dev: true @@ -5583,7 +5715,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -5593,7 +5725,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -5619,7 +5751,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -5628,7 +5760,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -5654,7 +5786,7 @@ packages: '@types/node': 17.0.45 chalk: 4.1.2 change-case: 3.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) degit: 2.8.4 ejs: 3.1.9 enquirer: 2.4.1 @@ -5697,6 +5829,11 @@ packages: engines: {node: '>= 4'} dev: true + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + /immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} dev: false @@ -6173,7 +6310,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6235,7 +6372,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -6256,7 +6393,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.12.5): + /jest-cli@29.7.0(@types/node@20.12.7): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6270,10 +6407,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.12.5) + create-jest: 29.7.0(@types/node@20.12.7) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.12.5) + jest-config: 29.7.0(@types/node@20.12.7) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6284,7 +6421,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.12.5): + /jest-config@29.7.0(@types/node@20.12.7): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -6299,7 +6436,7 @@ packages: '@babel/core': 7.24.4 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 babel-jest: 29.7.0(@babel/core@7.24.4) chalk: 4.1.2 ci-info: 3.9.0 @@ -6359,7 +6496,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -6375,7 +6512,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.12.5 + '@types/node': 20.12.7 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6426,7 +6563,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 jest-util: 29.7.0 dev: true @@ -6481,7 +6618,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6512,7 +6649,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -6564,7 +6701,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6589,7 +6726,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.5 + '@types/node': 20.12.7 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6601,13 +6738,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.12.5 + '@types/node': 20.12.7 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.12.5): + /jest@29.7.0(@types/node@20.12.7): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6620,7 +6757,7 @@ packages: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.12.5) + jest-cli: 29.7.0(@types/node@20.12.7) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -7023,10 +7160,6 @@ packages: engines: {node: '>=8'} dev: true - /map-stream@0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} - dev: true - /memfs-or-file-map-to-github-branch@1.2.1: resolution: {integrity: sha512-I/hQzJ2a/pCGR8fkSQ9l5Yx+FQ4e7X6blNHyWBm2ojeFLT3GVzGkTj7xnyWpdclrr7Nq4dmx3xrvu70m3ypzAQ==} dependencies: @@ -7149,6 +7282,13 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -7213,8 +7353,8 @@ packages: engines: {node: '>= 0.4.0'} dev: true - /next@14.0.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} + /next@14.1.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -7228,26 +7368,25 @@ packages: sass: optional: true dependencies: - '@next/env': 14.0.4 + '@next/env': 14.1.4 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001607 + caniuse-lite: 1.0.30001608 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) styled-jsx: 5.1.1(@babel/core@7.24.4)(react@18.2.0) - watchpack: 2.4.0 optionalDependencies: - '@next/swc-darwin-arm64': 14.0.4 - '@next/swc-darwin-x64': 14.0.4 - '@next/swc-linux-arm64-gnu': 14.0.4 - '@next/swc-linux-arm64-musl': 14.0.4 - '@next/swc-linux-x64-gnu': 14.0.4 - '@next/swc-linux-x64-musl': 14.0.4 - '@next/swc-win32-arm64-msvc': 14.0.4 - '@next/swc-win32-ia32-msvc': 14.0.4 - '@next/swc-win32-x64-msvc': 14.0.4 + '@next/swc-darwin-arm64': 14.1.4 + '@next/swc-darwin-x64': 14.1.4 + '@next/swc-linux-arm64-gnu': 14.1.4 + '@next/swc-linux-arm64-musl': 14.1.4 + '@next/swc-linux-x64-gnu': 14.1.4 + '@next/swc-linux-x64-musl': 14.1.4 + '@next/swc-win32-arm64-msvc': 14.1.4 + '@next/swc-win32-ia32-msvc': 14.1.4 + '@next/swc-win32-x64-msvc': 14.1.4 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -7279,15 +7418,6 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - dev: true - /node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7370,38 +7500,41 @@ packages: object-keys: 1.1.1 dev: true - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 - get-intrinsic: 1.2.4 dev: true - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + /object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true /object.values@1.1.7: @@ -7413,6 +7546,15 @@ packages: es-abstract: 1.23.3 dev: true + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -7548,7 +7690,7 @@ packages: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) get-uri: 6.0.3 http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 @@ -7680,12 +7822,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - /pause-stream@0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - dependencies: - through: 2.3.8 - dev: true - /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -7838,7 +7974,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.3 lru-cache: 7.18.3 @@ -7852,14 +7988,6 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - /ps-tree@1.2.0: - resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true - dependencies: - event-stream: 3.3.4 - dev: true - /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true @@ -7969,7 +8097,7 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-select@5.8.0(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0): + /react-select@5.8.0(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7977,7 +8105,7 @@ packages: dependencies: '@babel/runtime': 7.24.4 '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.3(@types/react@18.2.74)(react@18.2.0) + '@emotion/react': 11.11.3(@types/react@18.2.75)(react@18.2.0) '@floating-ui/dom': 1.5.4 '@types/react-transition-group': 4.4.10 memoize-one: 6.0.0 @@ -7985,7 +8113,7 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.74)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.75)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -8391,6 +8519,16 @@ packages: has-property-descriptors: 1.0.2 dev: true + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + /shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} dev: false @@ -8431,6 +8569,16 @@ packages: object-inspect: 1.13.1 dev: true + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true @@ -8489,7 +8637,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) socks: 2.7.3 transitivePeerDependencies: - supports-color @@ -8581,12 +8729,6 @@ packages: engines: {node: '>=6'} dev: true - /split@0.3.3: - resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} - dependencies: - through: 2.3.8 - dev: true - /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true @@ -8614,12 +8756,6 @@ packages: engines: {node: '>=18'} dev: true - /stream-combiner@0.0.4: - resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} - dependencies: - duplexer: 0.1.2 - dev: true - /stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: @@ -8671,18 +8807,22 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + /string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 + gopd: 1.0.1 has-symbols: 1.0.3 internal-slot: 1.0.7 regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.1 - side-channel: 1.0.4 + set-function-name: 2.0.2 + side-channel: 1.0.6 dev: true /string.prototype.trim@1.2.9: @@ -8914,10 +9054,6 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - /tippy.js@6.3.7: resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} dependencies: @@ -8999,7 +9135,7 @@ packages: '@babel/core': 7.24.4 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.12.5) + jest: 29.7.0(@types/node@20.12.7) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -9009,7 +9145,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-node@10.9.2(@types/node@20.12.5)(typescript@5.4.4): + /ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -9028,7 +9164,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.5 + '@types/node': 20.12.7 acorn: 8.11.2 acorn-walk: 8.3.1 arg: 4.1.3 @@ -9347,7 +9483,7 @@ packages: punycode: 2.3.1 dev: true - /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.74)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.75)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -9356,7 +9492,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.74 + '@types/react': 18.2.75 react: 18.2.0 dev: false @@ -9400,14 +9536,6 @@ packages: makeerror: 1.0.12 dev: true - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - dev: false - /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -9427,11 +9555,6 @@ packages: engines: {node: '>=10.13.0'} dev: false - /webpod@0.0.2: - resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} - hasBin: true - dev: true - /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -9516,14 +9639,6 @@ packages: dependencies: isexe: 2.0.0 - /which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - /widest-line@4.0.1: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} @@ -9616,11 +9731,6 @@ packages: engines: {node: '>= 6'} dev: false - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - dev: true - /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -9674,24 +9784,11 @@ packages: engines: {node: '>=10'} dev: true - /zx@7.2.3: - resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} + /zx@8.0.1: + resolution: {integrity: sha512-Y+ITW1GQjADk7qgrbhnukMgoNsJmlyx53cUQ6/6NXU+BMBdCbTc6flTOHUctmzKvPjTmdwaddzJY/dbLie9sQg==} engines: {node: '>= 16.0.0'} hasBin: true - dependencies: + optionalDependencies: '@types/fs-extra': 11.0.4 - '@types/minimist': 1.2.5 - '@types/node': 18.19.30 - '@types/ps-tree': 1.1.6 - '@types/which': 3.0.3 - chalk: 5.3.0 - fs-extra: 11.2.0 - fx: 31.0.0 - globby: 13.2.2 - minimist: 1.2.8 - node-fetch: 3.3.1 - ps-tree: 1.2.0 - webpod: 0.0.2 - which: 3.0.1 - yaml: 2.3.4 + '@types/node': 20.12.7 dev: true From a552b043e2dc42f6e5f91525537404a7f716b625 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Wed, 10 Apr 2024 10:55:00 +0200 Subject: [PATCH 174/253] :art: (core): Reviews --- apps/sample/src/components/Sidebar/index.tsx | 4 +- packages/core/src/api/DeviceSdk.ts | 2 +- packages/core/src/api/index.ts | 2 +- packages/core/src/api/types.ts | 2 +- .../core/src/api/usb/model/ConnectedDevice.ts | 30 ++++++++++ .../device-session/model/Session.stub.ts | 13 ++++- .../internal/device-session/model/Session.ts | 13 +++-- .../service/DefaultApduReceiverService.ts | 19 ++++--- .../service/DefaultApduSenderService.ts | 2 +- .../service/DefaultSessionService.test.ts | 8 ++- .../service/DefaultSessionService.ts | 2 +- .../device-session/service/SessionService.ts | 2 +- .../discovery/model/ConnectionType.ts | 1 + .../discovery/use-case/ConnectUseCase.test.ts | 10 ++-- .../send/use-case/SendApduUseCase.test.ts | 30 +++++++--- .../internal/send/use-case/SendApduUseCase.ts | 11 ++-- .../src/internal/usb/model/ConnectedDevice.ts | 56 ------------------- ...tub.ts => InternalConnectedDevice.stub.ts} | 17 +++--- .../usb/model/InternalConnectedDevice.ts | 35 ++++++++++++ .../internal/usb/transport/UsbHidTransport.ts | 4 +- .../usb/transport/WebUsbHidTransport.ts | 6 +- .../GetConnectedDeviceUseCase.test.ts | 29 +++++++--- .../usb/use-case/GetConnectedDeviceUseCase.ts | 9 ++- 23 files changed, 182 insertions(+), 125 deletions(-) create mode 100644 packages/core/src/api/usb/model/ConnectedDevice.ts create mode 100644 packages/core/src/internal/discovery/model/ConnectionType.ts delete mode 100644 packages/core/src/internal/usb/model/ConnectedDevice.ts rename packages/core/src/internal/usb/model/{ConnectedDevice.stub.ts => InternalConnectedDevice.stub.ts} (60%) create mode 100644 packages/core/src/internal/usb/model/InternalConnectedDevice.ts diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx index b3d133138..f8d9edf33 100644 --- a/apps/sample/src/components/Sidebar/index.tsx +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -79,8 +79,8 @@ export const Sidebar: React.FC = () => { {Object.entries(deviceById).map(([sessionId, device]) => ( ))} diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index f8d2a0f0b..a7ace6ba3 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -1,6 +1,7 @@ import { Container } from "inversify"; import { Observable } from "rxjs"; +import { ConnectedDevice } from "@api/usb/model/ConnectedDevice"; import { configTypes } from "@internal/config/di/configTypes"; import { GetSdkVersionUseCase } from "@internal/config/use-case/GetSdkVersionUseCase"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; @@ -18,7 +19,6 @@ import { SendApduUseCaseArgs, } from "@internal/send/use-case/SendApduUseCase"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; -import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { GetConnectedDeviceUseCase, diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 840d2bceb..63ac9f71b 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -5,4 +5,4 @@ export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; export { LogLevel } from "./logger-subscriber/model/LogLevel"; export { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; export * from "./types"; -export { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; +export { ConnectedDevice } from "./usb/model/ConnectedDevice"; diff --git a/packages/core/src/api/types.ts b/packages/core/src/api/types.ts index 636b5ad07..f6767eee7 100644 --- a/packages/core/src/api/types.ts +++ b/packages/core/src/api/types.ts @@ -5,5 +5,5 @@ export type { DeviceModelId, } from "@internal/device-model/model/DeviceModel"; export type { SessionId } from "@internal/device-session/model/Session"; -export type { ConnectionType } from "@internal/usb/model/ConnectedDevice"; +export type { ConnectionType } from "@internal/discovery/model/ConnectionType"; export type { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; diff --git a/packages/core/src/api/usb/model/ConnectedDevice.ts b/packages/core/src/api/usb/model/ConnectedDevice.ts new file mode 100644 index 000000000..b358e86c3 --- /dev/null +++ b/packages/core/src/api/usb/model/ConnectedDevice.ts @@ -0,0 +1,30 @@ +import { + DeviceId, + DeviceModelId, +} from "@internal/device-model/model/DeviceModel"; +import { ConnectionType } from "@internal/discovery/model/ConnectionType"; +import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; + +type ConnectedDeviceConstructorArgs = { + internalConnectedDevice: InternalConnectedDevice; +}; + +export class ConnectedDevice { + public readonly id: DeviceId; + public readonly modelId: DeviceModelId; + public readonly name: string; + public readonly type: ConnectionType; + + constructor({ + internalConnectedDevice: { + id, + deviceModel: { id: deviceModelId, productName: deviceName }, + type, + }, + }: ConnectedDeviceConstructorArgs) { + this.id = id; + this.modelId = deviceModelId; + this.name = deviceName; + this.type = type; + } +} diff --git a/packages/core/src/internal/device-session/model/Session.stub.ts b/packages/core/src/internal/device-session/model/Session.stub.ts index aba20aefb..66821ab55 100644 --- a/packages/core/src/internal/device-session/model/Session.stub.ts +++ b/packages/core/src/internal/device-session/model/Session.stub.ts @@ -1,7 +1,14 @@ -import { Session } from "@internal/device-session/model/Session"; -import { connectedDeviceStubBuilder } from "@internal/usb/model/ConnectedDevice.stub"; +import { + Session, + SessionConstructorArgs, +} from "@internal/device-session/model/Session"; +import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; -export const sessionStubBuilder = () => +export const sessionStubBuilder = ( + props: Partial = {}, +) => new Session({ connectedDevice: connectedDeviceStubBuilder(), + id: "fakeSessionId", + ...props, }); diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index a64d2bf43..a73233195 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -1,18 +1,23 @@ import { v4 as uuidv4 } from "uuid"; -import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; +import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; export type SessionId = ReturnType; +export type SessionConstructorArgs = { + connectedDevice: InternalConnectedDevice; + id?: SessionId; +}; + /** * Represents a session with a device. */ export class Session { private readonly _id: SessionId; - private readonly _connectedDevice: ConnectedDevice; + private readonly _connectedDevice: InternalConnectedDevice; - constructor({ connectedDevice }: { connectedDevice: ConnectedDevice }) { - this._id = uuidv4(); + constructor({ connectedDevice, id = uuidv4() }: SessionConstructorArgs) { + this._id = id; this._connectedDevice = connectedDevice; } diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts index 10139c5d8..09323a318 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts @@ -2,7 +2,6 @@ import { inject, injectable } from "inversify"; import { Either, Just, Left, Maybe, Nothing, Right } from "purify-ts"; import { v4 } from "uuid"; -import { SdkError } from "@api/Error"; import { APDU_RESPONSE_STATUS_CODE_LENGTH } from "@internal/device-session/data/ApduResponseConst"; import { APDU_DATA_LENGTH_LENGTH, @@ -50,8 +49,8 @@ export class DefaultApduReceiverService implements ApduReceiverService { */ public handleFrame( frameBytes: Uint8Array, - ): Either> { - const frame = this.getFrameFrom(frameBytes); + ): Either> { + const frame = this.getFrameFromBytes(frameBytes); return frame.map((value) => { this._logger.info("handle frame", { @@ -108,14 +107,16 @@ export class DefaultApduReceiverService implements ApduReceiverService { * * @param Uint8Array */ - private getFrameFrom(rawApdu: Uint8Array): Either { + private getFrameFromBytes( + rawFrame: Uint8Array, + ): Either { const channelSize = this._channel.caseOf({ Just: () => CHANNEL_LENGTH, Nothing: () => 0, }); - const headTag = rawApdu.slice(channelSize, channelSize + HEAD_TAG_LENGTH); - const index = rawApdu.slice( + const headTag = rawFrame.slice(channelSize, channelSize + HEAD_TAG_LENGTH); + const index = rawFrame.slice( channelSize + HEAD_TAG_LENGTH, channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH, ); @@ -130,18 +131,18 @@ export class DefaultApduReceiverService implements ApduReceiverService { const dataSizeLength = isFirstIndex ? APDU_DATA_LENGTH_LENGTH : 0; if ( - rawApdu.length < + rawFrame.length < channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH + dataSizeLength ) { return Left(new ReceiverApduError("Unable to parse header from apdu")); } const dataSize = isFirstIndex - ? Just(rawApdu.slice(dataSizeIndex, dataSizeIndex + dataSizeLength)) + ? Just(rawFrame.slice(dataSizeIndex, dataSizeIndex + dataSizeLength)) : Nothing; const dataIndex = dataSizeIndex + dataSizeLength; - const data = rawApdu.slice(dataIndex); + const data = rawFrame.slice(dataIndex); const frame = new Frame({ header: new FrameHeader({ diff --git a/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts index dcd75effb..959fd55cc 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts @@ -31,7 +31,7 @@ export type DefaultApduSenderServiceConstructorArgs = { /** * Default implementation of ApduSenderService * - * Split APDU in an array of frames readies to send to a ConnectedDevice + * Split APDU in an array of frames readies to send to a InternalConnectedDevice */ @injectable() export class DefaultApduSenderService implements ApduSenderService { diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts index ad8b1a5d9..4275ac6b6 100644 --- a/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts @@ -3,7 +3,7 @@ import { Either, Left } from "purify-ts"; import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; import { Session } from "@internal/device-session/model/Session"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; -import { connectedDeviceStubBuilder } from "@internal/usb/model/ConnectedDevice.stub"; +import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; import { DefaultSessionService } from "./DefaultSessionService"; @@ -48,11 +48,13 @@ describe("DefaultSessionService", () => { it("should get a session", () => { sessionService.addSession(session); - expect(sessionService.getSession(session.id)).toEqual(Either.of(session)); + expect(sessionService.getSessionById(session.id)).toEqual( + Either.of(session), + ); }); it("should not get a session if it does not exist", () => { - expect(sessionService.getSession(session.id)).toEqual( + expect(sessionService.getSessionById(session.id)).toEqual( Left(new DeviceSessionNotFound()), ); }); diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.ts index f7b986149..afad1737e 100644 --- a/packages/core/src/internal/device-session/service/DefaultSessionService.ts +++ b/packages/core/src/internal/device-session/service/DefaultSessionService.ts @@ -44,7 +44,7 @@ export class DefaultSessionService implements SessionService { return this; } - getSession(sessionId: string) { + getSessionById(sessionId: string) { const session = Maybe.fromNullable( this._sessions.find((s) => s.id === sessionId), ); diff --git a/packages/core/src/internal/device-session/service/SessionService.ts b/packages/core/src/internal/device-session/service/SessionService.ts index 374eb174d..4ee5fb680 100644 --- a/packages/core/src/internal/device-session/service/SessionService.ts +++ b/packages/core/src/internal/device-session/service/SessionService.ts @@ -5,7 +5,7 @@ import { Session } from "@internal/device-session/model/Session"; export interface SessionService { addSession(session: Session): SessionService; - getSession(sessionId: string): Either; + getSessionById(sessionId: string): Either; removeSession(sessionId: string): SessionService; getSessions(): Session[]; } diff --git a/packages/core/src/internal/discovery/model/ConnectionType.ts b/packages/core/src/internal/discovery/model/ConnectionType.ts new file mode 100644 index 000000000..ca778a045 --- /dev/null +++ b/packages/core/src/internal/discovery/model/ConnectionType.ts @@ -0,0 +1 @@ +export type ConnectionType = "USB" | "BLE" | "MOCK"; diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts index deffe1c27..34d804864 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts @@ -7,8 +7,8 @@ import { DefaultSessionService } from "@internal/device-session/service/DefaultS import { SessionService } from "@internal/device-session/service/SessionService"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { connectedDeviceStubBuilder } from "@internal/usb/model/ConnectedDevice.stub"; import { UnknownDeviceError } from "@internal/usb/model/Errors"; +import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; import { usbHidDeviceConnectionFactoryStubBuilder } from "@internal/usb/service/UsbHidDeviceConnectionFactory.stub"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; @@ -17,10 +17,10 @@ import { ConnectUseCase } from "./ConnectUseCase"; let transport: WebUsbHidTransport; let logger: LoggerPublisherService; let sessionService: SessionService; -const fakeSessionId = "42"; +const fakeSessionId = "fakeSessionId"; describe("ConnectUseCase", () => { - const stubConnectedDevice = connectedDeviceStubBuilder("1"); + const stubConnectedDevice = connectedDeviceStubBuilder({ id: "1" }); const tag = "logger-tag"; beforeAll(() => { @@ -57,7 +57,7 @@ describe("ConnectUseCase", () => { const usecase = new ConnectUseCase(transport, sessionService, () => logger); - const connectedDevice = await usecase.execute({ deviceId: "" }); - expect(connectedDevice).toBe(fakeSessionId); + const sessionId = await usecase.execute({ deviceId: "" }); + expect(sessionId).toBe(fakeSessionId); }); }); diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts index 8571a4e03..1c14eafab 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts @@ -1,5 +1,3 @@ -import * as uuid from "uuid"; - import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; @@ -7,18 +5,13 @@ import { SessionService } from "@internal/device-session/service/SessionService" import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { SendApduUseCase } from "@internal/send/use-case/SendApduUseCase"; - -jest.mock("uuid"); +import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; let logger: LoggerPublisherService; let sessionService: SessionService; - const fakeSessionId = "fakeSessionId"; describe("SendApduUseCase", () => { - beforeAll(() => { - jest.spyOn(uuid, "v4").mockReturnValue(fakeSessionId); - }); beforeEach(() => { logger = new DefaultLoggerPublisherService([], "send-apdu-use-case"); sessionService = new DefaultSessionService(() => logger); @@ -54,4 +47,25 @@ describe("SendApduUseCase", () => { // then await expect(response).rejects.toBeInstanceOf(DeviceSessionNotFound); }); + + it("should throw an error if the apdu receiver failed", () => { + // given + const connectedDevice = connectedDeviceStubBuilder({ + sendApdu: jest.fn(async () => { + throw new Error("apdu receiver failed"); + }), + }); + const session = sessionStubBuilder({ connectedDevice }); + sessionService.addSession(session); + const useCase = new SendApduUseCase(sessionService, () => logger); + + // when + const response = useCase.execute({ + sessionId: fakeSessionId, + apdu: new Uint8Array([0x00, 0x01, 0x02, 0x03]), + }); + + // then + expect(response).rejects.toThrow("apdu receiver failed"); + }); }); diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.ts index 0b6a7f775..47ad5cee9 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.ts @@ -34,16 +34,16 @@ export class SendApduUseCase { sessionId, apdu, }: SendApduUseCaseArgs): Promise { - const deviceSession = this._sessionService.getSession(sessionId); + const deviceSession = this._sessionService.getSessionById(sessionId); return deviceSession.caseOf({ + // Case device session found Right: async (session) => { const response = await session.sendApdu(apdu); return response.caseOf({ - Right: (data) => { - this._logger.info("APDU sent", { data: { sessionId, apdu } }); - return data; - }, + // Case APDU sent and response received successfully + Right: (data) => data, + // Case error sending or receiving APDU Left: (error) => { this._logger.error("Error sending APDU", { data: { sessionId, apdu, error }, @@ -52,6 +52,7 @@ export class SendApduUseCase { }, }); }, + // Case device session not found Left: (error) => { this._logger.error("Error getting session", { data: { error }, diff --git a/packages/core/src/internal/usb/model/ConnectedDevice.ts b/packages/core/src/internal/usb/model/ConnectedDevice.ts deleted file mode 100644 index cdcf127e8..000000000 --- a/packages/core/src/internal/usb/model/ConnectedDevice.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { - DeviceId, - DeviceModel, -} from "@internal/device-model/model/DeviceModel"; -import type { SendApduFnType } from "@internal/usb/transport/DeviceConnection"; - -export type ConnectionType = "USB" | "BLE" | "MOCK"; - -/** - * Represents a connected device. - */ -export type ConnectedDeviceConstructorArgs = { - id: DeviceId; - deviceModel: DeviceModel; - type: ConnectionType; - sendApdu: SendApduFnType; -}; - -export class ConnectedDevice { - private readonly _id: DeviceId; - private readonly _deviceModel: DeviceModel; - private readonly _sendApdu: SendApduFnType; - private readonly _type: ConnectionType; - - constructor({ - id, - deviceModel, - sendApdu, - type, - }: ConnectedDeviceConstructorArgs) { - this._id = id; - this._deviceModel = deviceModel; - this._sendApdu = sendApdu; - this._type = type; - } - - public get id() { - return this._id; - } - - public get deviceModel() { - return this._deviceModel; - } - - public get deviceName() { - return this._deviceModel.productName; - } - - public get type() { - return this._type; - } - - public get sendApdu() { - return this._sendApdu; - } -} diff --git a/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts b/packages/core/src/internal/usb/model/InternalConnectedDevice.stub.ts similarity index 60% rename from packages/core/src/internal/usb/model/ConnectedDevice.stub.ts rename to packages/core/src/internal/usb/model/InternalConnectedDevice.stub.ts index 4d34e49bc..a5502c09b 100644 --- a/packages/core/src/internal/usb/model/ConnectedDevice.stub.ts +++ b/packages/core/src/internal/usb/model/InternalConnectedDevice.stub.ts @@ -2,19 +2,22 @@ import { Right } from "purify-ts"; import { deviceModelStubBuilder } from "@internal/device-model/model/DeviceModel.stub"; import { defaultApduResponseStubBuilder } from "@internal/device-session/model/ApduResponse.stub"; -import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; +import { + ConnectedDeviceConstructorArgs, + InternalConnectedDevice, +} from "@internal/usb/model/InternalConnectedDevice"; export function connectedDeviceStubBuilder( - id = "42", - type: "USB" | "BLE" | "MOCK" = "USB", -): ConnectedDevice { + props: Partial = {}, +): InternalConnectedDevice { const deviceModel = deviceModelStubBuilder(); - return new ConnectedDevice({ + return new InternalConnectedDevice({ deviceModel, - id, - type, + id: "42", + type: "MOCK", sendApdu: jest.fn(async () => Promise.resolve(Right(defaultApduResponseStubBuilder())), ), + ...props, }); } diff --git a/packages/core/src/internal/usb/model/InternalConnectedDevice.ts b/packages/core/src/internal/usb/model/InternalConnectedDevice.ts new file mode 100644 index 000000000..d34208e44 --- /dev/null +++ b/packages/core/src/internal/usb/model/InternalConnectedDevice.ts @@ -0,0 +1,35 @@ +import { + DeviceId, + DeviceModel, +} from "@internal/device-model/model/DeviceModel"; +import { ConnectionType } from "@internal/discovery/model/ConnectionType"; +import { SendApduFnType } from "@internal/usb/transport/DeviceConnection"; + +/** + * Represents an internal connected device. + */ +export type ConnectedDeviceConstructorArgs = { + id: DeviceId; + deviceModel: DeviceModel; + type: ConnectionType; + sendApdu: SendApduFnType; +}; + +export class InternalConnectedDevice { + public readonly id: DeviceId; + public readonly deviceModel: DeviceModel; + public readonly sendApdu: SendApduFnType; + public readonly type: ConnectionType; + + constructor({ + id, + deviceModel, + sendApdu, + type, + }: ConnectedDeviceConstructorArgs) { + this.id = id; + this.deviceModel = deviceModel; + this.sendApdu = sendApdu; + this.type = type; + } +} diff --git a/packages/core/src/internal/usb/transport/UsbHidTransport.ts b/packages/core/src/internal/usb/transport/UsbHidTransport.ts index e89e8e5ab..aca83adc2 100644 --- a/packages/core/src/internal/usb/transport/UsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/UsbHidTransport.ts @@ -2,9 +2,9 @@ import { Either } from "purify-ts"; import { Observable } from "rxjs"; import { DeviceId } from "@internal/device-model/model/DeviceModel"; -import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { ConnectError } from "@internal/usb/model/Errors"; +import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; /** * Transport interface representing a USB HID communication @@ -24,5 +24,5 @@ export interface UsbHidTransport { */ connect(params: { deviceId: DeviceId; - }): Promise>; + }): Promise>; } diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index bc86e48b7..31924c797 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -11,7 +11,6 @@ import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { LEDGER_VENDOR_ID } from "@internal/usb/data/UsbHidConfig"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; -import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { ConnectError, @@ -22,6 +21,7 @@ import { UnknownDeviceError, UsbHidTransportNotSupportedError, } from "@internal/usb/model/Errors"; +import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; import { UsbHidDeviceConnectionFactory } from "@internal/usb/service/UsbHidDeviceConnectionFactory"; import { UsbHidTransport } from "./UsbHidTransport"; @@ -263,7 +263,7 @@ export class WebUsbHidTransport implements UsbHidTransport { deviceId, }: { deviceId: DeviceId; - }): Promise> { + }): Promise> { this._logger.debug("connect", { data: { deviceId } }); const internalDevice = this._internalDevicesById.get(deviceId); @@ -297,7 +297,7 @@ export class WebUsbHidTransport implements UsbHidTransport { const deviceConnection = this._usbHidDeviceConnectionFactory.create( internalDevice.hidDevice, ); - const connectedDevice = new ConnectedDevice({ + const connectedDevice = new InternalConnectedDevice({ sendApdu: deviceConnection.sendApdu, deviceModel, id: deviceId, diff --git a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts index c44b866a0..c8d6043e3 100644 --- a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts +++ b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts @@ -1,13 +1,10 @@ -import * as uuid from "uuid"; - import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; import { SessionService } from "@internal/device-session/service/SessionService"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { GetConnectedDeviceUseCase } from "@internal/usb/use-case/GetConnectedDeviceUseCase"; - -jest.mock("uuid"); +import { ConnectedDevice } from "@root/src"; let logger: LoggerPublisherService; let sessionService: SessionService; @@ -15,9 +12,6 @@ let sessionService: SessionService; const fakeSessionId = "fakeSessionId"; describe("GetConnectedDevice", () => { - beforeAll(() => { - jest.spyOn(uuid, "v4").mockReturnValue(fakeSessionId); - }); beforeEach(() => { logger = new DefaultLoggerPublisherService( [], @@ -26,9 +20,24 @@ describe("GetConnectedDevice", () => { sessionService = new DefaultSessionService(() => logger); }); + it("should retrieve an instance of ConnectedDevice", () => { + // given + const session = sessionStubBuilder({ id: fakeSessionId }); + sessionService.addSession(session); + const useCase = new GetConnectedDeviceUseCase(sessionService, () => logger); + + // when + const response = useCase.execute({ + sessionId: fakeSessionId, + }); + + // then + expect(response).toBeInstanceOf(ConnectedDevice); + }); + it("should retrieve correct device from session", () => { // given - const session = sessionStubBuilder(); + const session = sessionStubBuilder({ id: fakeSessionId }); sessionService.addSession(session); const useCase = new GetConnectedDeviceUseCase(sessionService, () => logger); @@ -38,6 +47,8 @@ describe("GetConnectedDevice", () => { }); // then - expect(session.connectedDevice).toStrictEqual(response); + expect(response).toStrictEqual( + new ConnectedDevice({ internalConnectedDevice: session.connectedDevice }), + ); }); }); diff --git a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts index 24be221c0..7e396634c 100644 --- a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts +++ b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts @@ -1,11 +1,11 @@ import { inject, injectable } from "inversify"; +import { ConnectedDevice } from "@api/usb/model/ConnectedDevice"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { SessionId } from "@internal/device-session/model/Session"; import type { SessionService } from "@internal/device-session/service/SessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { ConnectedDevice } from "@internal/usb/model/ConnectedDevice"; export type GetConnectedDeviceUseCaseArgs = { sessionId: SessionId; @@ -30,10 +30,13 @@ export class GetConnectedDeviceUseCase { } execute({ sessionId }: GetConnectedDeviceUseCaseArgs): ConnectedDevice { - const deviceSession = this._sessionService.getSession(sessionId); + const deviceSession = this._sessionService.getSessionById(sessionId); return deviceSession.caseOf({ - Right: (session) => session.connectedDevice, + Right: (session) => + new ConnectedDevice({ + internalConnectedDevice: session.connectedDevice, + }), Left: (error) => { this._logger.error("Error getting session", { data: { error }, From 87e8101b4804ade5b8c0da05f4cbb759884be994 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 11 Apr 2024 18:20:18 +0200 Subject: [PATCH 175/253] :lipstick: (smpl): Display ApduResponse raw after the form --- apps/sample/src/components/ApduView/index.tsx | 34 +++++++++++++++++-- apps/sample/src/components/Device/index.tsx | 6 +++- apps/sample/src/hooks/useApduForm.ts | 7 ++++ .../src/providers/SessionsProvider/index.tsx | 2 +- packages/core/src/api/index.ts | 1 + packages/core/src/api/types.ts | 2 +- .../device-session/model/ApduResponse.ts | 8 ++--- .../internal/device-session/model/Session.ts | 2 +- .../send/use-case/SendApduUseCase.test.ts | 17 ++++++---- .../transport/UsbHidDeviceConnection.test.ts | 4 +-- 10 files changed, 64 insertions(+), 19 deletions(-) diff --git a/apps/sample/src/components/ApduView/index.tsx b/apps/sample/src/components/ApduView/index.tsx index 11f19a4fc..92aef352f 100644 --- a/apps/sample/src/components/ApduView/index.tsx +++ b/apps/sample/src/components/ApduView/index.tsx @@ -1,4 +1,5 @@ import React, { useCallback, useState } from "react"; +import { ApduResponse } from "@ledgerhq/device-sdk-core"; import { Button, Divider, Flex, Grid, Input, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; @@ -56,9 +57,16 @@ const InputContainer = styled(Flex).attrs({ mx: 8, mb: 4 })` const inputContainerProps = { style: { borderRadius: 4 } }; +const ResultDescText = styled(Text).attrs({ variant: "body", mt: 4, px: 8 })` + min-width: 150px; + display: inline-block; +`; + export const ApduView: React.FC = () => { - const { apduFormValues, setApduFormValue, getRawApdu } = useApduForm(); + const { apduFormValues, setApduFormValue, getRawApdu, getHexString } = + useApduForm(); const [loading, setLoading] = useState(false); + const [apduResponse, setApduResponse] = useState(); const sdk = useSdk(); const { state: { selectedId: selectedSessionId }, @@ -66,11 +74,14 @@ export const ApduView: React.FC = () => { const onSubmit = useCallback( async (values: typeof apduFormValues) => { setLoading(true); + let rawApduResponse; try { - await sdk.sendApdu({ + rawApduResponse = await sdk.sendApdu({ + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion sessionId: selectedSessionId!, apdu: getRawApdu(values), }); + setApduResponse(rawApduResponse); setLoading(false); } catch (error) { setLoading(false); @@ -161,7 +172,24 @@ export const ApduView: React.FC = () => { - + + {apduResponse && ( + <> + + Raw APDU: + {getHexString(getRawApdu(apduFormValues))} + + + Response status: + {getHexString(apduResponse.statusCode)} + + + Response raw data: + {getHexString(apduResponse.data)} + + + + )} onSubmit(apduFormValues)} diff --git a/apps/sample/src/components/Device/index.tsx b/apps/sample/src/components/Device/index.tsx index a0fa4ab1b..6ec2558fd 100644 --- a/apps/sample/src/components/Device/index.tsx +++ b/apps/sample/src/components/Device/index.tsx @@ -43,7 +43,11 @@ export const Device: React.FC = ({ return ( - {model === "stax" ? : } + {model === DeviceModelId.STAX ? ( + + ) : ( + + )} {name} diff --git a/apps/sample/src/hooks/useApduForm.ts b/apps/sample/src/hooks/useApduForm.ts index 116cc1fd1..999c9506a 100644 --- a/apps/sample/src/hooks/useApduForm.ts +++ b/apps/sample/src/hooks/useApduForm.ts @@ -43,10 +43,17 @@ export function useApduForm() { [], ); + const getHexString = useCallback((raw: Uint8Array): string => { + return raw + .reduce((acc, curr) => acc + " " + curr.toString(16).padStart(2, "0"), "") + .toUpperCase(); + }, []); + return { apduFormValues: values, setApduFormValue: setValue, getRawApdu, + getHexString, }; } diff --git a/apps/sample/src/providers/SessionsProvider/index.tsx b/apps/sample/src/providers/SessionsProvider/index.tsx index 7caeca890..e73f6db7e 100644 --- a/apps/sample/src/providers/SessionsProvider/index.tsx +++ b/apps/sample/src/providers/SessionsProvider/index.tsx @@ -15,7 +15,7 @@ type SessionContextType = { const SessionContext: Context = createContext({ state: SessionsInitialState, - dispatch: (_value: AddSessionAction) => {}, + dispatch: (_value: AddSessionAction) => null, }); export const SessionProvider: React.FC = ({ diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 63ac9f71b..49f78b6f8 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -6,3 +6,4 @@ export { LogLevel } from "./logger-subscriber/model/LogLevel"; export { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; export * from "./types"; export { ConnectedDevice } from "./usb/model/ConnectedDevice"; +export { ApduResponse } from "@internal/device-session/model/ApduResponse"; diff --git a/packages/core/src/api/types.ts b/packages/core/src/api/types.ts index f6767eee7..384c0a79d 100644 --- a/packages/core/src/api/types.ts +++ b/packages/core/src/api/types.ts @@ -2,8 +2,8 @@ export type { LogSubscriberOptions } from "./logger-subscriber/model/LogSubscrib export type { DeviceId, DeviceModel, - DeviceModelId, } from "@internal/device-model/model/DeviceModel"; +export { DeviceModelId } from "@internal/device-model/model/DeviceModel"; export type { SessionId } from "@internal/device-session/model/Session"; export type { ConnectionType } from "@internal/discovery/model/ConnectionType"; export type { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; diff --git a/packages/core/src/internal/device-session/model/ApduResponse.ts b/packages/core/src/internal/device-session/model/ApduResponse.ts index 6f05fcaec..87c96f61f 100644 --- a/packages/core/src/internal/device-session/model/ApduResponse.ts +++ b/packages/core/src/internal/device-session/model/ApduResponse.ts @@ -4,11 +4,11 @@ export type ApduResponseConstructorArgs = { }; export class ApduResponse { - protected _statusCode: Uint8Array; - protected _data: Uint8Array; + public statusCode: Uint8Array; + public data: Uint8Array; constructor({ statusCode, data }: ApduResponseConstructorArgs) { - this._statusCode = statusCode; - this._data = data; + this.statusCode = statusCode; + this.data = data; } } diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index a73233195..53868f6dc 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -2,7 +2,7 @@ import { v4 as uuidv4 } from "uuid"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; -export type SessionId = ReturnType; +export type SessionId = string; export type SessionConstructorArgs = { connectedDevice: InternalConnectedDevice; diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts index 1c14eafab..280db169f 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts @@ -1,4 +1,9 @@ -import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; +import { Left } from "purify-ts"; + +import { + DeviceSessionNotFound, + ReceiverApduError, +} from "@internal/device-session/model/Errors"; import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; import { SessionService } from "@internal/device-session/service/SessionService"; @@ -48,12 +53,12 @@ describe("SendApduUseCase", () => { await expect(response).rejects.toBeInstanceOf(DeviceSessionNotFound); }); - it("should throw an error if the apdu receiver failed", () => { + it("should throw an error if the apdu receiver failed", async () => { // given const connectedDevice = connectedDeviceStubBuilder({ - sendApdu: jest.fn(async () => { - throw new Error("apdu receiver failed"); - }), + sendApdu: jest.fn(async () => + Promise.resolve(Left(new ReceiverApduError())), + ), }); const session = sessionStubBuilder({ connectedDevice }); sessionService.addSession(session); @@ -66,6 +71,6 @@ describe("SendApduUseCase", () => { }); // then - expect(response).rejects.toThrow("apdu receiver failed"); + await expect(response).rejects.toBeInstanceOf(ReceiverApduError); }); }); diff --git a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts index a39482d70..1b0cecc10 100644 --- a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts +++ b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts @@ -45,7 +45,7 @@ describe("UsbHidDeviceConnection", () => { logger, ); // when - connection.sendApdu(new Uint8Array(0)); + await connection.sendApdu(new Uint8Array(0)); // then expect(device.sendReport).toHaveBeenCalled(); }); @@ -65,6 +65,6 @@ describe("UsbHidDeviceConnection", () => { // when const response = connection.sendApdu(Uint8Array.from([])); // then - expect(response).resolves.toBe(RESPONSE_LOCKED_DEVICE); + await expect(response).resolves.toBe(RESPONSE_LOCKED_DEVICE); }); }); From f74d77abd3113108aedc77fe6c5cf9d1ba20ed1b Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 12 Apr 2024 09:36:26 +0200 Subject: [PATCH 176/253] :white_check_mark: (core): Improve coverage --- packages/core/src/api/DeviceSdk.test.ts | 43 ++++++++++++++++--- packages/core/src/api/DeviceSdk.ts | 8 ---- packages/core/src/di.stub.ts | 6 +++ packages/core/src/di.ts | 2 +- .../internal/discovery/di/discoveryModule.ts | 8 ++-- .../core/src/internal/send/di/sendModule.ts | 10 ++++- .../core/src/internal/usb/di/usbModule.ts | 6 +-- .../usb/model/InternalConnectedDevice.test.ts | 37 ++++++++++++++++ .../transport/UsbHidDeviceConnection.test.ts | 20 +++++---- 9 files changed, 108 insertions(+), 32 deletions(-) create mode 100644 packages/core/src/di.stub.ts create mode 100644 packages/core/src/internal/usb/model/InternalConnectedDevice.test.ts diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts index aed02851c..b701aee0e 100644 --- a/packages/core/src/api/DeviceSdk.test.ts +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -1,7 +1,11 @@ import { LocalConfigDataSource } from "@internal/config/data/ConfigDataSource"; import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; import { configTypes } from "@internal/config/di/configTypes"; +import { discoveryTypes } from "@internal/discovery/di/discoveryTypes"; +import { sendTypes } from "@internal/send/di/sendTypes"; +import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import pkg from "@root/package.json"; +import { StubUseCase } from "@root/src/di.stub"; import { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; import { DeviceSdk } from "./DeviceSdk"; @@ -26,12 +30,24 @@ describe("DeviceSdk", () => { expect(await sdk.getVersion()).toBe(pkg.version); }); - it("startScan should ....", () => { - expect(sdk.startScan()).toBeFalsy(); + it("should have startDiscovery method", () => { + expect(sdk.startDiscovering).toBeDefined(); }); - it("stopScan should ....", () => { - expect(sdk.stopScan()).toBeFalsy(); + it("should have stopDiscovery method", () => { + expect(sdk.stopDiscovering).toBeDefined(); + }); + + it("should have connect method", () => { + expect(sdk.connect).toBeDefined(); + }); + + it("should have sendApdu method", () => { + expect(sdk.sendApdu).toBeDefined(); + }); + + it("should have getConnectedDevice method", () => { + expect(sdk.getConnectedDevice).toBeDefined(); }); }); @@ -40,9 +56,12 @@ describe("DeviceSdk", () => { sdk = new DeviceSdk({ stub: true, loggers: [] }); }); - it("should create a stubbed version", () => { + it("should create a stubbed sdk", () => { expect(sdk).toBeDefined(); expect(sdk).toBeInstanceOf(DeviceSdk); + }); + + it("should return a stubbed config", () => { expect( sdk.container.get( configTypes.LocalConfigDataSource, @@ -50,9 +69,21 @@ describe("DeviceSdk", () => { ).toBeInstanceOf(StubLocalConfigDataSource); }); - it("should return a stubbed `version`", async () => { + it("should return a stubbed version", async () => { expect(await sdk.getVersion()).toBe("0.0.0-stub.1"); }); + + it.each([ + [discoveryTypes.StartDiscoveringUseCase], + [discoveryTypes.StopDiscoveringUseCase], + [discoveryTypes.ConnectUseCase], + [sendTypes.SendApduUseCase], + [usbDiTypes.GetConnectedDeviceUseCase], + ])("should have %p use case", (diSymbol) => { + const uc = sdk.container.get(diSymbol); + expect(uc).toBeInstanceOf(StubUseCase); + expect(uc.execute()).toBe("stub"); + }); }); describe("without args", () => { diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index a7ace6ba3..485d3dae1 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -36,14 +36,6 @@ export class DeviceSdk { this.container = makeContainer({ stub, loggers }); } - startScan() { - return; - } - - stopScan() { - return; - } - getVersion(): Promise { return this.container .get(configTypes.GetSdkVersionUseCase) diff --git a/packages/core/src/di.stub.ts b/packages/core/src/di.stub.ts new file mode 100644 index 000000000..b4c04f5bf --- /dev/null +++ b/packages/core/src/di.stub.ts @@ -0,0 +1,6 @@ +import { injectable } from "inversify"; + +@injectable() +export class StubUseCase { + execute = jest.fn(() => "stub"); +} diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index bab0d0fe9..90fb8e264 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -35,7 +35,7 @@ export const makeContainer = ({ discoveryModuleFactory({ stub }), loggerModuleFactory({ subscribers: loggers }), deviceSessionModuleFactory(), - sendModuleFactory(), + sendModuleFactory({ stub }), // modules go here ); diff --git a/packages/core/src/internal/discovery/di/discoveryModule.ts b/packages/core/src/internal/discovery/di/discoveryModule.ts index d26c3e00b..096e0cdf8 100644 --- a/packages/core/src/internal/discovery/di/discoveryModule.ts +++ b/packages/core/src/internal/discovery/di/discoveryModule.ts @@ -3,6 +3,7 @@ import { ContainerModule } from "inversify"; import { ConnectUseCase } from "@internal/discovery/use-case/ConnectUseCase"; import { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; import { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; +import { StubUseCase } from "@root/src/di.stub"; import { discoveryTypes } from "./discoveryTypes"; @@ -13,13 +14,14 @@ type FactoryProps = { export const discoveryModuleFactory = ({ stub = false, }: Partial = {}) => - new ContainerModule((bind, _unbind, _isBound, _rebind) => { + new ContainerModule((bind, _unbind, _isBound, rebind) => { bind(discoveryTypes.StartDiscoveringUseCase).to(StartDiscoveringUseCase); bind(discoveryTypes.StopDiscoveringUseCase).to(StopDiscoveringUseCase); bind(discoveryTypes.ConnectUseCase).to(ConnectUseCase); if (stub) { - // We can rebind our interfaces to their mock implementations - // rebind(...).to(....); + rebind(discoveryTypes.StartDiscoveringUseCase).to(StubUseCase); + rebind(discoveryTypes.StopDiscoveringUseCase).to(StubUseCase); + rebind(discoveryTypes.ConnectUseCase).to(StubUseCase); } }); diff --git a/packages/core/src/internal/send/di/sendModule.ts b/packages/core/src/internal/send/di/sendModule.ts index 6fb233ebc..8bc2c7e1c 100644 --- a/packages/core/src/internal/send/di/sendModule.ts +++ b/packages/core/src/internal/send/di/sendModule.ts @@ -1,6 +1,7 @@ import { ContainerModule } from "inversify"; import { SendApduUseCase } from "@internal/send/use-case/SendApduUseCase"; +import { StubUseCase } from "@root/src/di.stub"; import { sendTypes } from "./sendTypes"; @@ -8,17 +9,22 @@ type FactoryProps = { stub: boolean; }; -export const sendModuleFactory = (_args: Partial = {}) => +export const sendModuleFactory = ({ + stub = false, +}: Partial = {}) => new ContainerModule( ( bind, _unbind, _isBound, - _rebind, + rebind, _unbindAsync, _onActivation, _onDeactivation, ) => { bind(sendTypes.SendApduUseCase).to(SendApduUseCase); + if (stub) { + rebind(sendTypes.SendApduUseCase).to(StubUseCase); + } }, ); diff --git a/packages/core/src/internal/usb/di/usbModule.ts b/packages/core/src/internal/usb/di/usbModule.ts index 602fb4e6b..407344293 100644 --- a/packages/core/src/internal/usb/di/usbModule.ts +++ b/packages/core/src/internal/usb/di/usbModule.ts @@ -3,6 +3,7 @@ import { ContainerModule } from "inversify"; import { UsbHidDeviceConnectionFactory } from "@internal/usb/service/UsbHidDeviceConnectionFactory"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { GetConnectedDeviceUseCase } from "@internal/usb/use-case/GetConnectedDeviceUseCase"; +import { StubUseCase } from "@root/src/di.stub"; import { usbDiTypes } from "./usbDiTypes"; @@ -13,7 +14,7 @@ type FactoryProps = { export const usbModuleFactory = ({ stub = false, }: Partial = {}) => - new ContainerModule((bind, _unbind, _isBound, _rebind) => { + new ContainerModule((bind, _unbind, _isBound, rebind) => { // The transport needs to be a singleton to keep the internal states of the devices bind(usbDiTypes.UsbHidTransport).to(WebUsbHidTransport).inSingletonScope(); @@ -26,7 +27,6 @@ export const usbModuleFactory = ({ bind(usbDiTypes.GetConnectedDeviceUseCase).to(GetConnectedDeviceUseCase); if (stub) { - // We can rebind our interfaces to their mock implementations - // rebind(...).to(....); + rebind(usbDiTypes.GetConnectedDeviceUseCase).to(StubUseCase); } }); diff --git a/packages/core/src/internal/usb/model/InternalConnectedDevice.test.ts b/packages/core/src/internal/usb/model/InternalConnectedDevice.test.ts new file mode 100644 index 000000000..c6afaf37d --- /dev/null +++ b/packages/core/src/internal/usb/model/InternalConnectedDevice.test.ts @@ -0,0 +1,37 @@ +import { deviceModelStubBuilder } from "@internal/device-model/model/DeviceModel.stub"; +import { defaultApduResponseStubBuilder } from "@internal/device-session/model/ApduResponse.stub"; +import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; +import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; + +describe("InternalConnectedDevice", () => { + let connectedDevice: InternalConnectedDevice; + + beforeEach(() => { + connectedDevice = connectedDeviceStubBuilder(); + }); + + it("should create an instance", () => { + expect(connectedDevice).toBeDefined(); + expect(connectedDevice).toBeInstanceOf(InternalConnectedDevice); + }); + + it("should return the correct id", () => { + expect(connectedDevice.id).toEqual("42"); + }); + + it("should return the correct device model", () => { + expect(JSON.stringify(connectedDevice.deviceModel)).toEqual( + JSON.stringify(deviceModelStubBuilder()), + ); + }); + + it("should return the correct type", () => { + expect(connectedDevice.type).toEqual("MOCK"); + }); + + it("should return the correct send apdu response", () => { + expect(connectedDevice.sendApdu(new Uint8Array())).toMatchObject( + Promise.resolve(defaultApduResponseStubBuilder()), + ); + }); +}); diff --git a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts index 1b0cecc10..62eb03f77 100644 --- a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts +++ b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts @@ -20,7 +20,7 @@ describe("UsbHidDeviceConnection", () => { let apduReceiver: ApduReceiverService; const logger = (tag: string) => new DefaultLoggerPublisherService([], tag); - beforeEach(async () => { + beforeEach(() => { device = hidDeviceStubBuilder(); apduSender = defaultApduSenderServiceStubBuilder(undefined, logger); apduReceiver = defaultApduReceiverServiceStubBuilder(undefined, logger); @@ -45,19 +45,21 @@ describe("UsbHidDeviceConnection", () => { logger, ); // when - await connection.sendApdu(new Uint8Array(0)); + void connection.sendApdu(new Uint8Array(0)); // then expect(device.sendReport).toHaveBeenCalled(); }); it("should receive APDU through hid report", async () => { // given - device.sendReport = jest.fn(async () => { - device.oninputreport!({ - type: "inputreport", - data: new DataView(Uint8Array.from(RESPONSE_LOCKED_DEVICE).buffer), - } as HIDInputReportEvent); - }); + device.sendReport = jest.fn(() => + Promise.resolve( + device.oninputreport!({ + type: "inputreport", + data: new DataView(Uint8Array.from(RESPONSE_LOCKED_DEVICE).buffer), + } as HIDInputReportEvent), + ), + ); const connection = new UsbHidDeviceConnection( { device, apduSender, apduReceiver }, logger, @@ -65,6 +67,6 @@ describe("UsbHidDeviceConnection", () => { // when const response = connection.sendApdu(Uint8Array.from([])); // then - await expect(response).resolves.toBe(RESPONSE_LOCKED_DEVICE); + void expect(response).resolves.toBe(RESPONSE_LOCKED_DEVICE); }); }); From e4cfb5abed18c614c4d0f841b691416231eba2aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien?= Date: Tue, 9 Apr 2024 12:49:40 +0200 Subject: [PATCH 177/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Adds=20APDU=20com?= =?UTF-8?q?mand=20controller=20to=20core=20package?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The APDU command controller allow the developper to build an APDU without knowing its internal structure. Once the APDU is builded, the serialize method returns a Uint8Array that can be send directly to the device. --- packages/core/src/api/ApduCommand.test.ts | 421 ++++++++++++++++++++++ packages/core/src/api/ApduCommand.ts | 176 +++++++++ 2 files changed, 597 insertions(+) create mode 100644 packages/core/src/api/ApduCommand.test.ts create mode 100644 packages/core/src/api/ApduCommand.ts diff --git a/packages/core/src/api/ApduCommand.test.ts b/packages/core/src/api/ApduCommand.test.ts new file mode 100644 index 000000000..107a24eb0 --- /dev/null +++ b/packages/core/src/api/ApduCommand.test.ts @@ -0,0 +1,421 @@ +import { APDU_MAX_PAYLOAD, ApduCommand } from "./ApduCommand"; + +const COMMAND_NO_BODY = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); + +const COMMAND_NEW_P1 = new Uint8Array([0xe0, 0x01, 0xa5, 0x00, 0x00]); + +const COMMAND_NEW_P1P2 = new Uint8Array([0xe0, 0x01, 0xa5, 0xc3, 0x00]); + +const COMMAND_BODY_SINGLE = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x01, 0x01, +]); + +const COMMAND_BODY_TWO = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x02, 0x33, 0x02, +]); + +const COMMAND_BODY_HEXA1 = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x05, 0x80, 0x81, 0x82, 0x83, 0x84, +]); + +const COMMAND_BODY_HEXA2 = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x04, 0x85, 0x86, 0x87, 0x88, +]); + +const COMMAND_BODY_LV_HEXA = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x04, 0x03, 0xa1, 0xa2, 0xa3, +]); + +const COMMAND_BODY_LV_ASCII = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x06, 0x05, 0x6d, 0x61, 0x6d, 0x61, 0x6e, +]); + +const COMMAND_BODY_LV_ARRAY = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x03, 0x02, 0xf0, 0xf1, +]); + +const COMMAND_BODY_COMBINED = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x19, 0x01, 0x33, 0x02, 0x80, 0x81, 0x82, 0x83, 0x84, + 0x85, 0x86, 0x87, 0x88, 0x03, 0xa1, 0xa2, 0xa3, 0x05, 0x6d, 0x61, 0x6d, 0x61, + 0x6e, 0x02, 0xf0, 0xf1, +]); + +const COMMAND_BODY_MAX = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0xff, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +]); + +const COMMAND_BODY_NEARLY = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0xfe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, +]); + +let apdu: ApduCommand; + +describe("ApduCommand", () => { + describe("clean", () => { + beforeEach(() => { + apdu = new ApduCommand({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); + }); + + it("should create an instance", () => { + expect(apdu).toBeDefined(); + expect(apdu).toBeInstanceOf(ApduCommand); + }); + }); + + describe("simple", () => { + beforeEach(() => { + apdu = new ApduCommand({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); + }); + + it("should serialize with an empty body", () => { + expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); + }); + + it("should serialize with an single byte body", () => { + const status: boolean = apdu.addByte(0x01).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_SINGLE); + }); + + it("should serialize with an 2 byte body", () => { + const status: boolean = apdu.addShort(0x3302).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_TWO); + }); + + it("should serialize with an 5 byte body from an hexastring", () => { + const status: boolean = apdu.addHexaString("0x8081828384").status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_HEXA1); + }); + + it("should serialize with an 4 byte body from an hexastring without '0x'", () => { + const status: boolean = apdu.addHexaString("85868788").status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_HEXA2); + }); + + it("should serialize with an 4 byte body LV encoded from an hexastring", () => { + const status: boolean = apdu.encodeInLVFromHexa("0xA1A2A3").status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_LV_HEXA); + }); + + it("should serialize with an 4 byte body LV encoded from an ascci string", () => { + const status: boolean = apdu.encodeInLVFromAscii("maman").status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_LV_ASCII); + }); + + it("should serialize with an 4 byte body LV encoded from a buffer", () => { + const myarray = new Uint8Array([0xf0, 0xf1]); + const status: boolean = apdu.encodeInLVFromBuffer(myarray).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_LV_ARRAY); + }); + + it("should serialize with an 4 byte body LV encoded from a buffer", () => { + const myarray = new Uint8Array([0xf0, 0xf1]); + const status: boolean = apdu.encodeInLVFromBuffer(myarray).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_LV_ARRAY); + }); + + it("should serialize with an complete body of 0xAA", () => { + const myarray = new Uint8Array(255).fill(0xaa, 0, 255); + const status: boolean = apdu.addBuffer(myarray).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + }); + }); + + describe("mixed", () => { + beforeEach(() => { + apdu = new ApduCommand({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); + }); + + it("should serialize with all previous field", () => { + let available = APDU_MAX_PAYLOAD; + let status: boolean = apdu.addByte(0x01).status; + expect(status).toBe(true); + available--; + expect(apdu.getAvailablePayloadLength()).toBe(available); + + status = apdu.addShort(0x3302).status; + expect(status).toBe(true); + available -= 2; + expect(apdu.getAvailablePayloadLength()).toBe(available); + + status = apdu.addHexaString("0x8081828384").status; + expect(status).toBe(true); + available -= 5; + expect(apdu.getAvailablePayloadLength()).toBe(available); + + status = apdu.addHexaString("85868788").status; + expect(status).toBe(true); + available -= 4; + expect(apdu.getAvailablePayloadLength()).toBe(available); + + status = apdu.encodeInLVFromHexa("0xA1A2A3").status; + expect(status).toBe(true); + available -= 4; + expect(apdu.getAvailablePayloadLength()).toBe(available); + + status = apdu.encodeInLVFromAscii("maman").status; + expect(status).toBe(true); + available -= 6; + expect(apdu.getAvailablePayloadLength()).toBe(available); + + const myarray = new Uint8Array([0xf0, 0xf1]); + status = apdu.encodeInLVFromBuffer(myarray).status; + expect(status).toBe(true); + available -= 3; + expect(apdu.getAvailablePayloadLength()).toBe(available); + + expect(apdu.serialize()).toEqual(COMMAND_BODY_COMBINED); + apdu.clearPayload(); + expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); + expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + + apdu.updateP1(0xa5); + expect(apdu.serialize()).toEqual(COMMAND_NEW_P1); + expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + + apdu.updateP2(0xc3); + expect(apdu.serialize()).toEqual(COMMAND_NEW_P1P2); + expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + }); + + describe("error", () => { + beforeEach(() => { + apdu = new ApduCommand({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); + }); + + it("error to undefined value", () => { + const status: boolean = apdu.addByte(undefined).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); + expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due value greater than 8-bit integer", () => { + const status: boolean = apdu.addByte(0x100).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); + expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due value greater than 16-bit integer", () => { + const status: boolean = apdu.addShort(0x10000).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); + expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due to a string not well coded", () => { + let status: boolean = apdu.addHexaString(":08081828384").status; + expect(status).toBe(false); + status = apdu.addHexaString("081828384").status; + expect(status).toBe(false); + status = apdu.addHexaString("80818n8384").status; + expect(status).toBe(false); + status = apdu.addHexaString("808182838z").status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); + expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due direct overflow", () => { + const myarray = new Uint8Array(256).fill(0xaa, 0, 256); + const status: boolean = apdu.addBuffer(myarray).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); + expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due to subsequent overflow with one byte", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD, + ); + let status: boolean = apdu.addBuffer(myarray).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + expect(apdu.getAvailablePayloadLength()).toBe(0); + + status = apdu.addByte(0).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + }); + + it("error due to subsequent overflow with 2 bytes", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD, + ); + let status: boolean = apdu.addBuffer(myarray).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + expect(apdu.getAvailablePayloadLength()).toBe(0); + + status = apdu.addShort(0).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + expect(apdu.getAvailablePayloadLength()).toBe(0); + }); + + it("error due to subsequent overflow with 1-byte array", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD, + ); + let status: boolean = apdu.addBuffer(myarray).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + expect(apdu.getAvailablePayloadLength()).toBe(0); + + const mybuffer = new Uint8Array(1); + mybuffer[1] = 0xff; + + status = apdu.addBuffer(mybuffer).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + expect(apdu.getAvailablePayloadLength()).toBe(0); + }); + + it("error due to subsequent overflow with 1-char ascii", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD, + ); + let status: boolean = apdu.addBuffer(myarray).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + expect(apdu.getAvailablePayloadLength()).toBe(0); + + const mystring = "a"; + + status = apdu.addAsciiString(mystring).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + expect(apdu.getAvailablePayloadLength()).toBe(0); + }); + + it("error due to subsequent overflow with 1-char hexastring", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD, + ); + let status: boolean = apdu.addBuffer(myarray).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + expect(apdu.getAvailablePayloadLength()).toBe(0); + + let mystring = "0xB4"; + + status = apdu.addHexaString(mystring).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + expect(apdu.getAvailablePayloadLength()).toBe(0); + + mystring = "e1"; + + status = apdu.addHexaString(mystring).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); + expect(apdu.getAvailablePayloadLength()).toBe(0); + }); + + it("error due to empty values", () => { + const mystring = ""; + + let status: boolean = apdu.addHexaString(mystring).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); + expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + + status = apdu.encodeInLVFromHexa(mystring).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); + expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due to subsequent overflow with 1-char LV", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD - 1).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD - 1, + ); + let status: boolean = apdu.addBuffer(myarray).status; + expect(status).toBe(true); + expect(apdu.serialize()).toEqual(COMMAND_BODY_NEARLY); + expect(apdu.getAvailablePayloadLength()).toBe(1); + + let mystring = "n"; + + status = apdu.encodeInLVFromAscii(mystring).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_BODY_NEARLY); + expect(apdu.getAvailablePayloadLength()).toBe(1); + + mystring = "e1"; + + status = apdu.encodeInLVFromHexa(mystring).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_BODY_NEARLY); + expect(apdu.getAvailablePayloadLength()).toBe(1); + + const mybuffer = new Uint8Array(1); + mybuffer[1] = 0xff; + + status = apdu.encodeInLVFromBuffer(mybuffer).status; + expect(status).toBe(false); + expect(apdu.serialize()).toEqual(COMMAND_BODY_NEARLY); + expect(apdu.getAvailablePayloadLength()).toBe(1); + }); + }); +}); diff --git a/packages/core/src/api/ApduCommand.ts b/packages/core/src/api/ApduCommand.ts new file mode 100644 index 000000000..39fd4b774 --- /dev/null +++ b/packages/core/src/api/ApduCommand.ts @@ -0,0 +1,176 @@ +const OFFSET_CLA = 0; +const OFFSET_INS = 1; +const OFFSET_P1 = 2; +const OFFSET_P2 = 3; +export const APDU_MAX_PAYLOAD = 255; +const APDU_MAX_SIZE = APDU_MAX_PAYLOAD + 5; + +type ApduCommandConstructorArgs = { + ins: number; + cla: number; + p1: number; + p2: number; +}; + +export class ApduCommand { + apdu: Uint8Array = new Uint8Array(APDU_MAX_SIZE); + offset = 5; + constructor({ ins, cla, p1, p2 }: ApduCommandConstructorArgs) { + this.apdu[OFFSET_CLA] = cla & 0xff; + this.apdu[OFFSET_INS] = ins & 0xff; + this.apdu[OFFSET_P1] = p1 & 0xff; + this.apdu[OFFSET_P2] = p2 & 0xff; + } + + public updateP1(value: number) { + this.apdu[OFFSET_P1] = value & 0xff; + } + + public updateP2(value: number) { + this.apdu[OFFSET_P2] = value & 0xff; + } + + public addByte(value: number | undefined): { status: boolean } { + if (value === undefined) return { status: false }; + if (value > 0xff) return { status: false }; + if (this.offset >= APDU_MAX_SIZE) return { status: false }; + this.apdu[this.offset] = value & 0xff; + this.offset++; + return { status: true }; + } + + public addShort(value: number): { status: boolean } { + if (value > 0xffff) return { status: false }; + + // MSB first + if (this.addByte((value >>> 8) & 0xff).status == false) + return { status: false }; + return this.addByte(value & 0xff); + } + + public addBuffer(value: Uint8Array): { status: boolean } { + let index = 0; + + if (this.offset + value.length > APDU_MAX_SIZE) return { status: false }; + while (index < value.length) { + // values are always being well formatted at this point + // therefore no status test is needed + this.addByte(value.at(index)); + index++; + } + + return { status: true }; + } + + private addNumbers(value: number[]): { status: boolean } { + let index = 0; + + if (this.offset + value.length > APDU_MAX_SIZE) return { status: false }; + while (index < value.length) { + // values are always being well formatted at this point + // therefore no status test is needed + this.addByte(value.at(index)); + index++; + } + + return { status: true }; + } + + public addHexaString(value: string): { status: boolean } { + const result: number[] = this.isHexaString(value); + + if (result.length == 0) return { status: false }; + return this.addNumbers(result); + } + + public addAsciiString(value: string): { status: boolean } { + let index = 0; + let hexa = 0; + + if (this.offset + value.length > APDU_MAX_SIZE) return { status: false }; + while (index < value.length) { + // values are always being well formatted at this point + // therefore no status test is needed + hexa = value.charCodeAt(index); + this.addByte(hexa).status; + index++; + } + + return { status: true }; + } + + private isHexaString(value: string): number[] { + const error: number[] = []; + const table: number[] = []; + + if (value.length === 0) return error; + + // Hexadecimal are coded on two chars + if ((value.length & 1) != 0) return error; + + let index = 0; + + // Hexadecimal normally shoulf start with '0x' + // but some time this preamble is missing + if (value.startsWith("0x")) { + index = 2; + } + + let hexa = 0; + const ref = /[0-9A-Fa-f]{2}/g; + + while (index < value.length) { + const piece = value.substring(index, index + 2); + if (ref.test(piece) == false) return error; + ref.lastIndex = 0; + // Attention, parseInt return an integer if the fist char is a number + // even if the second one is a letter. + // But the input is already tested and well formatted + hexa = parseInt(piece, 16); + table.push(hexa); + index += 2; + } + + return table; + } + + public encodeInLVFromHexa(value: string): { status: boolean } { + const result: number[] = this.isHexaString(value); + + if (result.length == 0) return { status: false }; + if (this.offset + result.length >= APDU_MAX_SIZE) return { status: false }; + // values are always being well formatted at this point + // therefore no status test is needed + this.addByte(result.length); + return this.addNumbers(result); + } + + public encodeInLVFromBuffer(value: Uint8Array): { status: boolean } { + if (this.offset + value.length >= APDU_MAX_SIZE) return { status: false }; + // values are always being well formatted at this point + // therefore no status test is needed + this.addByte(value.length); + return this.addBuffer(value); + } + + public encodeInLVFromAscii(value: string): { status: boolean } { + if (this.offset + value.length >= APDU_MAX_SIZE) return { status: false }; + // values are always being well formatted at this point + // therefore no status test is needed + this.addByte(value.length); + return this.addAsciiString(value); + } + + public clearPayload() { + this.offset = 5; + } + + public getAvailablePayloadLength(): number { + return APDU_MAX_SIZE - this.offset; + } + + public serialize(): Uint8Array { + this.apdu[4] = this.offset - 5; + return this.apdu.subarray(0, this.offset); + } +} From d7355ddc31c9ee89af4c8c8a7778991890c5b391 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Thu, 11 Apr 2024 16:43:39 +0200 Subject: [PATCH 178/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Update?= =?UTF-8?q?=20ApduBuilder=20and=20Apdu=20class?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/Apdu.test.ts | 28 ++ packages/core/src/api/Apdu.ts | 40 ++ packages/core/src/api/ApduBuilder.test.ts | 378 +++++++++++++++++++ packages/core/src/api/ApduBuilder.ts | 172 +++++++++ packages/core/src/api/ApduCommand.test.ts | 421 ---------------------- packages/core/src/api/ApduCommand.ts | 176 --------- 6 files changed, 618 insertions(+), 597 deletions(-) create mode 100644 packages/core/src/api/Apdu.test.ts create mode 100644 packages/core/src/api/Apdu.ts create mode 100644 packages/core/src/api/ApduBuilder.test.ts create mode 100644 packages/core/src/api/ApduBuilder.ts delete mode 100644 packages/core/src/api/ApduCommand.test.ts delete mode 100644 packages/core/src/api/ApduCommand.ts diff --git a/packages/core/src/api/Apdu.test.ts b/packages/core/src/api/Apdu.test.ts new file mode 100644 index 000000000..65c167c6c --- /dev/null +++ b/packages/core/src/api/Apdu.test.ts @@ -0,0 +1,28 @@ +import { Apdu } from "./Apdu"; + +describe("Apdu", () => { + it("should create an instance", () => { + const apdu = new Apdu(0x00, 0x00, 0x00, 0x00); + expect(apdu).toBeInstanceOf(Apdu); + }); + + it("should return the raw APDU", () => { + const apdu = new Apdu(0x00, 0x00, 0x00, 0x00); + expect(apdu.getRawApdu()).toEqual( + new Uint8Array([0x00, 0x00, 0x00, 0x00, 0x00]), + ); + }); + + it("should return the raw APDU with data", () => { + const apdu = new Apdu( + 0x00, + 0x00, + 0x00, + 0x00, + new Uint8Array([0x01, 0x02, 0x03]), + ); + expect(apdu.getRawApdu()).toEqual( + new Uint8Array([0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x02, 0x03]), + ); + }); +}); diff --git a/packages/core/src/api/Apdu.ts b/packages/core/src/api/Apdu.ts new file mode 100644 index 000000000..2ecabdcdc --- /dev/null +++ b/packages/core/src/api/Apdu.ts @@ -0,0 +1,40 @@ +export class Apdu { + readonly cla: number; + readonly ins: number; + readonly p1: number; + readonly p2: number; + data?: Uint8Array; + + constructor( + cla: number, + ins: number, + p1: number, + p2: number, + data?: Uint8Array, + ) { + this.cla = cla; + this.ins = ins; + this.p1 = p1; + this.p2 = p2; + this.data = data; + } + + getRawApdu(): Uint8Array { + const header = Uint8Array.from([ + this.cla, + this.ins, + this.p1, + this.p2, + this.data?.length ?? 0, + ]); + + const apdu = new Uint8Array(header.length + (this.data?.length ?? 0)); + apdu.set(header, 0); + + if (this.data) { + apdu.set(this.data, header.length); + } + + return apdu; + } +} diff --git a/packages/core/src/api/ApduBuilder.test.ts b/packages/core/src/api/ApduBuilder.test.ts new file mode 100644 index 000000000..10a589d6f --- /dev/null +++ b/packages/core/src/api/ApduBuilder.test.ts @@ -0,0 +1,378 @@ +import { APDU_MAX_PAYLOAD, ApduBuilder } from "./ApduBuilder"; + +const COMMAND_NO_BODY = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); + +const COMMAND_BODY_SINGLE = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x01, 0x01, +]); + +const COMMAND_BODY_TWO = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x02, 0x33, 0x02, +]); + +const COMMAND_BODY_HEXA1 = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x05, 0x80, 0x81, 0x82, 0x83, 0x84, +]); + +const COMMAND_BODY_HEXA2 = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x04, 0x85, 0x86, 0x87, 0x88, +]); + +const COMMAND_BODY_LV_HEXA = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x04, 0x03, 0xa1, 0xa2, 0xa3, +]); + +const COMMAND_BODY_LV_ASCII = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x06, 0x05, 0x6d, 0x61, 0x6d, 0x61, 0x6e, +]); + +const COMMAND_BODY_LV_ARRAY = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x03, 0x02, 0xf0, 0xf1, +]); + +const COMMAND_BODY_COMBINED = new Uint8Array([ + 0xe0, 0x01, 0x00, 0x00, 0x19, 0x01, 0x33, 0x02, 0x80, 0x81, 0x82, 0x83, 0x84, + 0x85, 0x86, 0x87, 0x88, 0x03, 0xa1, 0xa2, 0xa3, 0x05, 0x6d, 0x61, 0x6d, 0x61, + 0x6e, 0x02, 0xf0, 0xf1, +]); + +const COMMAND_BODY_MAX = new Uint8Array([ + 0xe0, + 0x01, + 0x00, + 0x00, + 0xff, + ...Array(255).fill(0xaa), +]); + +const COMMAND_BODY_NEARLY = new Uint8Array([ + 0xe0, + 0x01, + 0x00, + 0x00, + 0xfe, + ...Array(254).fill(0xaa), +]); + +let builder: ApduBuilder; + +describe("ApduBuilder", () => { + describe("clean", () => { + beforeEach(() => { + builder = new ApduBuilder({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); + }); + + it("should create an instance", () => { + expect(builder).toBeDefined(); + expect(builder).toBeInstanceOf(ApduBuilder); + }); + }); + + describe("simple", () => { + beforeEach(() => { + builder = new ApduBuilder({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); + }); + + it("should serialize with an empty body", () => { + expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); + }); + + it("should serialize with an single byte body", () => { + const status = builder.addByteToData(0x01); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_SINGLE); + }); + + it("should serialize with an 2 byte body", () => { + const status = builder.addShortToData(0x3302); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_TWO); + }); + + it("should serialize with an 5 byte body from an hexastring", () => { + const status: boolean = builder.addHexaStringToData("0x8081828384"); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_HEXA1); + }); + + it("should serialize with an 4 byte body from an hexastring without '0x'", () => { + const status: boolean = builder.addHexaStringToData("85868788"); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_HEXA2); + }); + + it("should serialize with an 4 byte body LV encoded from an hexastring", () => { + const status: boolean = builder.encodeInLVFromHexa("0xA1A2A3"); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_LV_HEXA); + }); + + it("should serialize with an 4 byte body LV encoded from an ascci string", () => { + const status: boolean = builder.encodeInLVFromAscii("maman"); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_LV_ASCII); + }); + + it("should serialize with an 4 byte body LV encoded from a buffer", () => { + const myarray = new Uint8Array([0xf0, 0xf1]); + const status: boolean = builder.encodeInLVFromBuffer(myarray); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_LV_ARRAY); + }); + + it("should serialize with an 4 byte body LV encoded from a buffer", () => { + const myarray = new Uint8Array([0xf0, 0xf1]); + const status: boolean = builder.encodeInLVFromBuffer(myarray); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_LV_ARRAY); + }); + + it("should serialize with an complete body of 0xAA", () => { + const myarray = new Uint8Array(255).fill(0xaa, 0, 255); + const status = builder.addBufferToData(myarray); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + }); + }); + + describe("mixed", () => { + beforeEach(() => { + builder = new ApduBuilder({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); + }); + + it("should serialize with all previous field", () => { + let available = APDU_MAX_PAYLOAD; + let status: boolean = builder.addByteToData(0x01); + expect(status).toBe(true); + available--; + expect(builder.getAvailablePayloadLength()).toBe(available); + + status = builder.addShortToData(0x3302); + expect(status).toBe(true); + available -= 2; + expect(builder.getAvailablePayloadLength()).toBe(available); + + status = builder.addHexaStringToData("0x8081828384"); + expect(status).toBe(true); + available -= 5; + expect(builder.getAvailablePayloadLength()).toBe(available); + + status = builder.addHexaStringToData("85868788"); + expect(status).toBe(true); + available -= 4; + expect(builder.getAvailablePayloadLength()).toBe(available); + + status = builder.encodeInLVFromHexa("0xA1A2A3"); + expect(status).toBe(true); + available -= 4; + expect(builder.getAvailablePayloadLength()).toBe(available); + + status = builder.encodeInLVFromAscii("maman"); + expect(status).toBe(true); + available -= 6; + expect(builder.getAvailablePayloadLength()).toBe(available); + + const myarray = new Uint8Array([0xf0, 0xf1]); + status = builder.encodeInLVFromBuffer(myarray); + expect(status).toBe(true); + available -= 3; + expect(builder.getAvailablePayloadLength()).toBe(available); + + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_COMBINED); + }); + }); + + describe("error", () => { + beforeEach(() => { + builder = new ApduBuilder({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); + }); + + it("error to undefined value", () => { + const status: boolean = builder.addByteToData(undefined); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); + expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due value greater than 8-bit integer", () => { + const status: boolean = builder.addByteToData(0x100); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); + expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due value greater than 16-bit integer", () => { + const status: boolean = builder.addShortToData(0x10000); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); + expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due to a string not well coded", () => { + let status = builder.addHexaStringToData(":08081828384"); + expect(status).toBe(false); + status = builder.addHexaStringToData("081828384"); + expect(status).toBe(false); + status = builder.addHexaStringToData("80818n8384"); + expect(status).toBe(false); + status = builder.addHexaStringToData("808182838z"); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); + expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due direct overflow", () => { + const myarray = new Uint8Array(256).fill(0xaa, 0, 256); + const status: boolean = builder.addBufferToData(myarray); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); + expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due to subsequent overflow with one byte", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD, + ); + let status: boolean = builder.addBufferToData(myarray); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getAvailablePayloadLength()).toBe(0); + + status = builder.addByteToData(0); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + }); + + it("error due to subsequent overflow with 2 bytes", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD, + ); + let status: boolean = builder.addBufferToData(myarray); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getAvailablePayloadLength()).toBe(0); + + status = builder.addShortToData(0); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getAvailablePayloadLength()).toBe(0); + }); + + it("error due to subsequent overflow with 1-byte array", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD, + ); + let status = builder.addBufferToData(myarray); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getAvailablePayloadLength()).toBe(0); + + const mybuffer = new Uint8Array(1); + mybuffer[1] = 0xff; + + status = builder.addBufferToData(mybuffer); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getAvailablePayloadLength()).toBe(0); + }); + + it("error due to subsequent overflow with 1-char ascii", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD, + ); + let status: boolean = builder.addBufferToData(myarray); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getAvailablePayloadLength()).toBe(0); + + const mystring = "a"; + + status = builder.addAsciiStringToData(mystring); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getAvailablePayloadLength()).toBe(0); + }); + + it("error due to subsequent overflow with 1-char hexastring", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD, + ); + let status = builder.addBufferToData(myarray); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getAvailablePayloadLength()).toBe(0); + + let mystring = "0xB4"; + + status = builder.addHexaStringToData(mystring); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getAvailablePayloadLength()).toBe(0); + + mystring = "e1"; + + status = builder.addHexaStringToData(mystring); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getAvailablePayloadLength()).toBe(0); + }); + + it("error due to empty values", () => { + const mystring = ""; + + let status: boolean = builder.addHexaStringToData(mystring); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); + expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + + status = builder.encodeInLVFromHexa(mystring); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); + expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + }); + + it("error due to subsequent overflow with 1-char LV", () => { + const myarray = new Uint8Array(APDU_MAX_PAYLOAD - 1).fill( + 0xaa, + 0, + APDU_MAX_PAYLOAD - 1, + ); + let status = builder.addBufferToData(myarray); + expect(status).toBe(true); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_NEARLY); + expect(builder.getAvailablePayloadLength()).toBe(1); + + let mystring = "n"; + + status = builder.encodeInLVFromAscii(mystring); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_NEARLY); + expect(builder.getAvailablePayloadLength()).toBe(1); + + mystring = "e1"; + + status = builder.encodeInLVFromHexa(mystring); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_NEARLY); + expect(builder.getAvailablePayloadLength()).toBe(1); + + const mybuffer = new Uint8Array(1); + mybuffer[1] = 0xff; + + status = builder.encodeInLVFromBuffer(mybuffer); + expect(status).toBe(false); + expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_NEARLY); + expect(builder.getAvailablePayloadLength()).toBe(1); + }); + }); +}); diff --git a/packages/core/src/api/ApduBuilder.ts b/packages/core/src/api/ApduBuilder.ts new file mode 100644 index 000000000..702729997 --- /dev/null +++ b/packages/core/src/api/ApduBuilder.ts @@ -0,0 +1,172 @@ +import { Apdu } from "./Apdu"; + +// const OFFSET_CLA = 0; +// const OFFSET_INS = 1; +// const OFFSET_P1 = 2; +// const OFFSET_P2 = 3; +export const HEADER_LENGTH = 5; +export const APDU_MAX_PAYLOAD = 255; +export const APDU_MAX_SIZE = APDU_MAX_PAYLOAD + 5; + +type ApduBuilderArgs = { + ins: number; + cla: number; + p1: number; + p2: number; + offset?: number; +}; + +export class ApduBuilder { + private _ins: number; + private _cla: number; + private _p1: number; + private p2: number; + private data?: Uint8Array; + + constructor({ ins, cla, p1, p2 }: ApduBuilderArgs) { + this._cla = cla & 0xff; + this._ins = ins & 0xff; + this._p1 = p1 & 0xff; + this.p2 = p2 & 0xff; + } + + // Public API + + build = () => new Apdu(this._cla, this._ins, this._p1, this.p2, this.data); + + addByteToData = (value?: number) => { + if (!value) return false; + if (value > 0xff) return false; + if ((this.data?.length ?? 0) >= APDU_MAX_PAYLOAD) return false; + + this.data = Uint8Array.from([...(this.data ?? []), value & 0xff]); + return true; + }; + + addShortToData = (value: number) => { + if (value > 0xffff) return false; + + if (!this.addByteToData((value >>> 8) & 0xff)) { + return false; + } + + return this.addByteToData(value & 0xff); + }; + + addBufferToData = (value: Uint8Array) => { + if (!this.hasEnoughLengthRemaining(value)) return false; + for (const byte of value) { + this.addByteToData(byte); + } + return true; + }; + + addHexaStringToData = (value: string) => { + const result = this.getHexaString(value); + if (!result.length) return false; + return this.addNumbers(result); + }; + + addAsciiStringToData = (value: string) => { + let hexa = 0; + + if (!this.hasEnoughLengthRemaining(value)) return false; + + for (const char of value) { + hexa = char.charCodeAt(0); + this.addByteToData(hexa); + } + + return true; + }; + + encodeInLVFromHexa = (value: string) => { + const result: number[] = this.getHexaString(value); + + if (result.length == 0) return false; + if (!this.hasEnoughLengthRemaining(value, true)) return false; + // values are always being well formatted at this point + // therefore no status test is needed + this.addByteToData(result.length); + return this.addNumbers(result); + }; + + encodeInLVFromBuffer = (value: Uint8Array) => { + if (!this.hasEnoughLengthRemaining(value, true)) return false; + // values are always being well formatted at this point + // therefore no status test is needed + this.addByteToData(value.length); + return this.addBufferToData(value); + }; + + encodeInLVFromAscii = (value: string) => { + if (!this.hasEnoughLengthRemaining(value, true)) return false; + // values are always being well formatted at this point + // therefore no status test is needed + this.addByteToData(value.length); + return this.addAsciiStringToData(value); + }; + + getAvailablePayloadLength = () => { + return APDU_MAX_SIZE - (HEADER_LENGTH + (this.data?.length ?? 0)); + }; + + // Private API + + private hasEnoughLengthRemaining = ( + value: string | Uint8Array | number[], + hasLv = false, + ) => { + return ( + HEADER_LENGTH + + (this.data?.length ?? 0) + + value.length + + (hasLv ? 1 : 0) <= + APDU_MAX_SIZE + ); + }; + + private getHexaString = (value: string) => { + const table: number[] = []; + + if (!value.length) return []; + + // Hexadecimal are coded on two chars + if ((value.length & 1) != 0) return []; + + let index = 0; + + // Hexadecimal normally should start with '0x' + // but some time this prefix is missing + if (value.startsWith("0x")) { + index = 2; + } + + let hexa = 0; + const ref = /[0-9a-f]{2}/gi; + + while (index < value.length) { + const piece = value.substring(index, index + 2); + if (ref.test(piece) == false) return []; + ref.lastIndex = 0; + // Attention, parseInt return an integer if the fist char is a number + // even if the second one is a letter. + // But the input is already tested and well formatted + hexa = parseInt(piece, 16); + table.push(hexa); + index += 2; + } + + return table; + }; + + private addNumbers = (value: number[]) => { + if (!this.hasEnoughLengthRemaining(value)) return false; + + for (const byte of value) { + this.addByteToData(byte); + } + + return true; + }; +} diff --git a/packages/core/src/api/ApduCommand.test.ts b/packages/core/src/api/ApduCommand.test.ts deleted file mode 100644 index 107a24eb0..000000000 --- a/packages/core/src/api/ApduCommand.test.ts +++ /dev/null @@ -1,421 +0,0 @@ -import { APDU_MAX_PAYLOAD, ApduCommand } from "./ApduCommand"; - -const COMMAND_NO_BODY = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); - -const COMMAND_NEW_P1 = new Uint8Array([0xe0, 0x01, 0xa5, 0x00, 0x00]); - -const COMMAND_NEW_P1P2 = new Uint8Array([0xe0, 0x01, 0xa5, 0xc3, 0x00]); - -const COMMAND_BODY_SINGLE = new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0x01, 0x01, -]); - -const COMMAND_BODY_TWO = new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0x02, 0x33, 0x02, -]); - -const COMMAND_BODY_HEXA1 = new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0x05, 0x80, 0x81, 0x82, 0x83, 0x84, -]); - -const COMMAND_BODY_HEXA2 = new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0x04, 0x85, 0x86, 0x87, 0x88, -]); - -const COMMAND_BODY_LV_HEXA = new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0x04, 0x03, 0xa1, 0xa2, 0xa3, -]); - -const COMMAND_BODY_LV_ASCII = new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0x06, 0x05, 0x6d, 0x61, 0x6d, 0x61, 0x6e, -]); - -const COMMAND_BODY_LV_ARRAY = new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0x03, 0x02, 0xf0, 0xf1, -]); - -const COMMAND_BODY_COMBINED = new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0x19, 0x01, 0x33, 0x02, 0x80, 0x81, 0x82, 0x83, 0x84, - 0x85, 0x86, 0x87, 0x88, 0x03, 0xa1, 0xa2, 0xa3, 0x05, 0x6d, 0x61, 0x6d, 0x61, - 0x6e, 0x02, 0xf0, 0xf1, -]); - -const COMMAND_BODY_MAX = new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0xff, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, -]); - -const COMMAND_BODY_NEARLY = new Uint8Array([ - 0xe0, 0x01, 0x00, 0x00, 0xfe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, -]); - -let apdu: ApduCommand; - -describe("ApduCommand", () => { - describe("clean", () => { - beforeEach(() => { - apdu = new ApduCommand({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); - }); - - it("should create an instance", () => { - expect(apdu).toBeDefined(); - expect(apdu).toBeInstanceOf(ApduCommand); - }); - }); - - describe("simple", () => { - beforeEach(() => { - apdu = new ApduCommand({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); - }); - - it("should serialize with an empty body", () => { - expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); - }); - - it("should serialize with an single byte body", () => { - const status: boolean = apdu.addByte(0x01).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_SINGLE); - }); - - it("should serialize with an 2 byte body", () => { - const status: boolean = apdu.addShort(0x3302).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_TWO); - }); - - it("should serialize with an 5 byte body from an hexastring", () => { - const status: boolean = apdu.addHexaString("0x8081828384").status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_HEXA1); - }); - - it("should serialize with an 4 byte body from an hexastring without '0x'", () => { - const status: boolean = apdu.addHexaString("85868788").status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_HEXA2); - }); - - it("should serialize with an 4 byte body LV encoded from an hexastring", () => { - const status: boolean = apdu.encodeInLVFromHexa("0xA1A2A3").status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_LV_HEXA); - }); - - it("should serialize with an 4 byte body LV encoded from an ascci string", () => { - const status: boolean = apdu.encodeInLVFromAscii("maman").status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_LV_ASCII); - }); - - it("should serialize with an 4 byte body LV encoded from a buffer", () => { - const myarray = new Uint8Array([0xf0, 0xf1]); - const status: boolean = apdu.encodeInLVFromBuffer(myarray).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_LV_ARRAY); - }); - - it("should serialize with an 4 byte body LV encoded from a buffer", () => { - const myarray = new Uint8Array([0xf0, 0xf1]); - const status: boolean = apdu.encodeInLVFromBuffer(myarray).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_LV_ARRAY); - }); - - it("should serialize with an complete body of 0xAA", () => { - const myarray = new Uint8Array(255).fill(0xaa, 0, 255); - const status: boolean = apdu.addBuffer(myarray).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - }); - }); - - describe("mixed", () => { - beforeEach(() => { - apdu = new ApduCommand({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); - }); - - it("should serialize with all previous field", () => { - let available = APDU_MAX_PAYLOAD; - let status: boolean = apdu.addByte(0x01).status; - expect(status).toBe(true); - available--; - expect(apdu.getAvailablePayloadLength()).toBe(available); - - status = apdu.addShort(0x3302).status; - expect(status).toBe(true); - available -= 2; - expect(apdu.getAvailablePayloadLength()).toBe(available); - - status = apdu.addHexaString("0x8081828384").status; - expect(status).toBe(true); - available -= 5; - expect(apdu.getAvailablePayloadLength()).toBe(available); - - status = apdu.addHexaString("85868788").status; - expect(status).toBe(true); - available -= 4; - expect(apdu.getAvailablePayloadLength()).toBe(available); - - status = apdu.encodeInLVFromHexa("0xA1A2A3").status; - expect(status).toBe(true); - available -= 4; - expect(apdu.getAvailablePayloadLength()).toBe(available); - - status = apdu.encodeInLVFromAscii("maman").status; - expect(status).toBe(true); - available -= 6; - expect(apdu.getAvailablePayloadLength()).toBe(available); - - const myarray = new Uint8Array([0xf0, 0xf1]); - status = apdu.encodeInLVFromBuffer(myarray).status; - expect(status).toBe(true); - available -= 3; - expect(apdu.getAvailablePayloadLength()).toBe(available); - - expect(apdu.serialize()).toEqual(COMMAND_BODY_COMBINED); - apdu.clearPayload(); - expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); - expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); - - apdu.updateP1(0xa5); - expect(apdu.serialize()).toEqual(COMMAND_NEW_P1); - expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); - - apdu.updateP2(0xc3); - expect(apdu.serialize()).toEqual(COMMAND_NEW_P1P2); - expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); - }); - }); - - describe("error", () => { - beforeEach(() => { - apdu = new ApduCommand({ cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00 }); - }); - - it("error to undefined value", () => { - const status: boolean = apdu.addByte(undefined).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); - expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); - }); - - it("error due value greater than 8-bit integer", () => { - const status: boolean = apdu.addByte(0x100).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); - expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); - }); - - it("error due value greater than 16-bit integer", () => { - const status: boolean = apdu.addShort(0x10000).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); - expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); - }); - - it("error due to a string not well coded", () => { - let status: boolean = apdu.addHexaString(":08081828384").status; - expect(status).toBe(false); - status = apdu.addHexaString("081828384").status; - expect(status).toBe(false); - status = apdu.addHexaString("80818n8384").status; - expect(status).toBe(false); - status = apdu.addHexaString("808182838z").status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); - expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); - }); - - it("error due direct overflow", () => { - const myarray = new Uint8Array(256).fill(0xaa, 0, 256); - const status: boolean = apdu.addBuffer(myarray).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); - expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); - }); - - it("error due to subsequent overflow with one byte", () => { - const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( - 0xaa, - 0, - APDU_MAX_PAYLOAD, - ); - let status: boolean = apdu.addBuffer(myarray).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - expect(apdu.getAvailablePayloadLength()).toBe(0); - - status = apdu.addByte(0).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - }); - - it("error due to subsequent overflow with 2 bytes", () => { - const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( - 0xaa, - 0, - APDU_MAX_PAYLOAD, - ); - let status: boolean = apdu.addBuffer(myarray).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - expect(apdu.getAvailablePayloadLength()).toBe(0); - - status = apdu.addShort(0).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - expect(apdu.getAvailablePayloadLength()).toBe(0); - }); - - it("error due to subsequent overflow with 1-byte array", () => { - const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( - 0xaa, - 0, - APDU_MAX_PAYLOAD, - ); - let status: boolean = apdu.addBuffer(myarray).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - expect(apdu.getAvailablePayloadLength()).toBe(0); - - const mybuffer = new Uint8Array(1); - mybuffer[1] = 0xff; - - status = apdu.addBuffer(mybuffer).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - expect(apdu.getAvailablePayloadLength()).toBe(0); - }); - - it("error due to subsequent overflow with 1-char ascii", () => { - const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( - 0xaa, - 0, - APDU_MAX_PAYLOAD, - ); - let status: boolean = apdu.addBuffer(myarray).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - expect(apdu.getAvailablePayloadLength()).toBe(0); - - const mystring = "a"; - - status = apdu.addAsciiString(mystring).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - expect(apdu.getAvailablePayloadLength()).toBe(0); - }); - - it("error due to subsequent overflow with 1-char hexastring", () => { - const myarray = new Uint8Array(APDU_MAX_PAYLOAD).fill( - 0xaa, - 0, - APDU_MAX_PAYLOAD, - ); - let status: boolean = apdu.addBuffer(myarray).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - expect(apdu.getAvailablePayloadLength()).toBe(0); - - let mystring = "0xB4"; - - status = apdu.addHexaString(mystring).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - expect(apdu.getAvailablePayloadLength()).toBe(0); - - mystring = "e1"; - - status = apdu.addHexaString(mystring).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_BODY_MAX); - expect(apdu.getAvailablePayloadLength()).toBe(0); - }); - - it("error due to empty values", () => { - const mystring = ""; - - let status: boolean = apdu.addHexaString(mystring).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); - expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); - - status = apdu.encodeInLVFromHexa(mystring).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_NO_BODY); - expect(apdu.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); - }); - - it("error due to subsequent overflow with 1-char LV", () => { - const myarray = new Uint8Array(APDU_MAX_PAYLOAD - 1).fill( - 0xaa, - 0, - APDU_MAX_PAYLOAD - 1, - ); - let status: boolean = apdu.addBuffer(myarray).status; - expect(status).toBe(true); - expect(apdu.serialize()).toEqual(COMMAND_BODY_NEARLY); - expect(apdu.getAvailablePayloadLength()).toBe(1); - - let mystring = "n"; - - status = apdu.encodeInLVFromAscii(mystring).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_BODY_NEARLY); - expect(apdu.getAvailablePayloadLength()).toBe(1); - - mystring = "e1"; - - status = apdu.encodeInLVFromHexa(mystring).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_BODY_NEARLY); - expect(apdu.getAvailablePayloadLength()).toBe(1); - - const mybuffer = new Uint8Array(1); - mybuffer[1] = 0xff; - - status = apdu.encodeInLVFromBuffer(mybuffer).status; - expect(status).toBe(false); - expect(apdu.serialize()).toEqual(COMMAND_BODY_NEARLY); - expect(apdu.getAvailablePayloadLength()).toBe(1); - }); - }); -}); diff --git a/packages/core/src/api/ApduCommand.ts b/packages/core/src/api/ApduCommand.ts deleted file mode 100644 index 39fd4b774..000000000 --- a/packages/core/src/api/ApduCommand.ts +++ /dev/null @@ -1,176 +0,0 @@ -const OFFSET_CLA = 0; -const OFFSET_INS = 1; -const OFFSET_P1 = 2; -const OFFSET_P2 = 3; -export const APDU_MAX_PAYLOAD = 255; -const APDU_MAX_SIZE = APDU_MAX_PAYLOAD + 5; - -type ApduCommandConstructorArgs = { - ins: number; - cla: number; - p1: number; - p2: number; -}; - -export class ApduCommand { - apdu: Uint8Array = new Uint8Array(APDU_MAX_SIZE); - offset = 5; - constructor({ ins, cla, p1, p2 }: ApduCommandConstructorArgs) { - this.apdu[OFFSET_CLA] = cla & 0xff; - this.apdu[OFFSET_INS] = ins & 0xff; - this.apdu[OFFSET_P1] = p1 & 0xff; - this.apdu[OFFSET_P2] = p2 & 0xff; - } - - public updateP1(value: number) { - this.apdu[OFFSET_P1] = value & 0xff; - } - - public updateP2(value: number) { - this.apdu[OFFSET_P2] = value & 0xff; - } - - public addByte(value: number | undefined): { status: boolean } { - if (value === undefined) return { status: false }; - if (value > 0xff) return { status: false }; - if (this.offset >= APDU_MAX_SIZE) return { status: false }; - this.apdu[this.offset] = value & 0xff; - this.offset++; - return { status: true }; - } - - public addShort(value: number): { status: boolean } { - if (value > 0xffff) return { status: false }; - - // MSB first - if (this.addByte((value >>> 8) & 0xff).status == false) - return { status: false }; - return this.addByte(value & 0xff); - } - - public addBuffer(value: Uint8Array): { status: boolean } { - let index = 0; - - if (this.offset + value.length > APDU_MAX_SIZE) return { status: false }; - while (index < value.length) { - // values are always being well formatted at this point - // therefore no status test is needed - this.addByte(value.at(index)); - index++; - } - - return { status: true }; - } - - private addNumbers(value: number[]): { status: boolean } { - let index = 0; - - if (this.offset + value.length > APDU_MAX_SIZE) return { status: false }; - while (index < value.length) { - // values are always being well formatted at this point - // therefore no status test is needed - this.addByte(value.at(index)); - index++; - } - - return { status: true }; - } - - public addHexaString(value: string): { status: boolean } { - const result: number[] = this.isHexaString(value); - - if (result.length == 0) return { status: false }; - return this.addNumbers(result); - } - - public addAsciiString(value: string): { status: boolean } { - let index = 0; - let hexa = 0; - - if (this.offset + value.length > APDU_MAX_SIZE) return { status: false }; - while (index < value.length) { - // values are always being well formatted at this point - // therefore no status test is needed - hexa = value.charCodeAt(index); - this.addByte(hexa).status; - index++; - } - - return { status: true }; - } - - private isHexaString(value: string): number[] { - const error: number[] = []; - const table: number[] = []; - - if (value.length === 0) return error; - - // Hexadecimal are coded on two chars - if ((value.length & 1) != 0) return error; - - let index = 0; - - // Hexadecimal normally shoulf start with '0x' - // but some time this preamble is missing - if (value.startsWith("0x")) { - index = 2; - } - - let hexa = 0; - const ref = /[0-9A-Fa-f]{2}/g; - - while (index < value.length) { - const piece = value.substring(index, index + 2); - if (ref.test(piece) == false) return error; - ref.lastIndex = 0; - // Attention, parseInt return an integer if the fist char is a number - // even if the second one is a letter. - // But the input is already tested and well formatted - hexa = parseInt(piece, 16); - table.push(hexa); - index += 2; - } - - return table; - } - - public encodeInLVFromHexa(value: string): { status: boolean } { - const result: number[] = this.isHexaString(value); - - if (result.length == 0) return { status: false }; - if (this.offset + result.length >= APDU_MAX_SIZE) return { status: false }; - // values are always being well formatted at this point - // therefore no status test is needed - this.addByte(result.length); - return this.addNumbers(result); - } - - public encodeInLVFromBuffer(value: Uint8Array): { status: boolean } { - if (this.offset + value.length >= APDU_MAX_SIZE) return { status: false }; - // values are always being well formatted at this point - // therefore no status test is needed - this.addByte(value.length); - return this.addBuffer(value); - } - - public encodeInLVFromAscii(value: string): { status: boolean } { - if (this.offset + value.length >= APDU_MAX_SIZE) return { status: false }; - // values are always being well formatted at this point - // therefore no status test is needed - this.addByte(value.length); - return this.addAsciiString(value); - } - - public clearPayload() { - this.offset = 5; - } - - public getAvailablePayloadLength(): number { - return APDU_MAX_SIZE - this.offset; - } - - public serialize(): Uint8Array { - this.apdu[4] = this.offset - 5; - return this.apdu.subarray(0, this.offset); - } -} From becf07786c05794ad0b2d00c9aaf9604079b6905 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 12 Apr 2024 15:31:45 +0200 Subject: [PATCH 179/253] =?UTF-8?q?=F0=9F=93=9D=20(readme):=20Use=20a=20ta?= =?UTF-8?q?ble=20for=20project=20display?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9b670fe87..1afe2fbc2 100644 --- a/README.md +++ b/README.md @@ -65,14 +65,16 @@ This project uses [turbo monorepo](https://turbo.build/repo/docs) to build and r A brief description of this project packages: -* `@ledgerhq/device-sdk-sample` in `apps/sample`: React Next web app used to test & demonstrate the Web Device SDK -* `@ledgerhq/eslint-config-dsdk` in `packages/config/eslint`: internal package which contains eslint shared config. Used by `extends: ["@ledgerhq/dsdk"]` in `.eslintrc`. -* `@ledgerhq/jest-config-dsdk` in `packages/config/jest`: internal package which contains jest shared config. Used by `preset: "@ledgerhq/jest-config-dsdk"` in `jest.config.ts` -* `@ledgerhq/tsconfig-dsdk` in `packages/config/typescript`: internal package which contains typescript shared config. Used by `"extends": "@ledgerhq/tsconfig-dsdk/sdk"` in `tsconfig.json` -* `@ledgerhq/device-sdk-core` in `packages/core`: external package that contains the core of the Web SDK -* `@ledgerhq/device-sdk-signer` in `packages/signer`: external package -* `@ledgerhq/device-sdk-trusted-apps` in `packages/trusted-apps`: external package -* `@ledgerhq/device-sdk-ui` in `packages/ui`: external package +| Name | Path | Description | +| -- | -- | -- | +| @ledgerhq/device-sdk-sample | apps/sample | React Next web app used to test & demonstrate the Web Device SDK | +| @ledgerhq/eslint-config-dsdk | packages/config/eslint | internal package which contains eslint shared config. Used by `extends: ["@ledgerhq/dsdk"]` in `.eslintrc`. | +| @ledgerhq/jest-config-dsdk | packages/config/jest | internal package which contains jest shared config. Used by `preset: "@ledgerhq/jest-config-dsdk"` in `jest.config.ts` | +| @ledgerhq/tsconfig-dsdk | packages/config/typescript | internal package which contains typescript shared config. Used by `"extends": "@ledgerhq/tsconfig-dsdk/sdk"` in `tsconfig.json` | +| @ledgerhq/device-sdk-core | packages/core | external package that contains the core of the Web SDK | +| @ledgerhq/device-sdk-signer | packages/signer | external package | +| @ledgerhq/device-sdk-trusted-apps | packages/trusted-apps | external package | +| @ledgerhq/device-sdk-ui | packages/ui | external package | # CI From 42c5005bde4f11c6ee4fcd640f738d33e7a0bc69 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 15 Apr 2024 16:18:55 +0200 Subject: [PATCH 180/253] =?UTF-8?q?=F0=9F=8E=A8=20(core):=20AppBuilder=20f?= =?UTF-8?q?ix=20builder=20pattern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/{ => apdu/model}/Apdu.test.ts | 0 .../core/src/api/{ => apdu/model}/Apdu.ts | 0 .../api/{ => apdu/utils}/ApduBuilder.test.ts | 202 +++++++++--------- .../src/api/{ => apdu/utils}/ApduBuilder.ts | 144 +++++++++---- .../src/api/apdu/utils/AppBuilderError.ts | 52 +++++ 5 files changed, 253 insertions(+), 145 deletions(-) rename packages/core/src/api/{ => apdu/model}/Apdu.test.ts (100%) rename packages/core/src/api/{ => apdu/model}/Apdu.ts (100%) rename packages/core/src/api/{ => apdu/utils}/ApduBuilder.test.ts (67%) rename packages/core/src/api/{ => apdu/utils}/ApduBuilder.ts (56%) create mode 100644 packages/core/src/api/apdu/utils/AppBuilderError.ts diff --git a/packages/core/src/api/Apdu.test.ts b/packages/core/src/api/apdu/model/Apdu.test.ts similarity index 100% rename from packages/core/src/api/Apdu.test.ts rename to packages/core/src/api/apdu/model/Apdu.test.ts diff --git a/packages/core/src/api/Apdu.ts b/packages/core/src/api/apdu/model/Apdu.ts similarity index 100% rename from packages/core/src/api/Apdu.ts rename to packages/core/src/api/apdu/model/Apdu.ts diff --git a/packages/core/src/api/ApduBuilder.test.ts b/packages/core/src/api/apdu/utils/ApduBuilder.test.ts similarity index 67% rename from packages/core/src/api/ApduBuilder.test.ts rename to packages/core/src/api/apdu/utils/ApduBuilder.test.ts index 10a589d6f..9e874a35a 100644 --- a/packages/core/src/api/ApduBuilder.test.ts +++ b/packages/core/src/api/apdu/utils/ApduBuilder.test.ts @@ -1,4 +1,10 @@ import { APDU_MAX_PAYLOAD, ApduBuilder } from "./ApduBuilder"; +import { + DataOverflowError, + HexaStringEncodeError, + InvalidValueError, + ValueOverflowError, +} from "./AppBuilderError"; const COMMAND_NO_BODY = new Uint8Array([0xe0, 0x01, 0x00, 0x00, 0x00]); @@ -78,60 +84,60 @@ describe("ApduBuilder", () => { }); it("should serialize with an single byte body", () => { - const status = builder.addByteToData(0x01); - expect(status).toBe(true); + builder.addByteToData(0x01); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_SINGLE); + expect(builder.getErrors()).toEqual([]); }); it("should serialize with an 2 byte body", () => { - const status = builder.addShortToData(0x3302); - expect(status).toBe(true); + builder.addShortToData(0x3302); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_TWO); + expect(builder.getErrors()).toEqual([]); }); it("should serialize with an 5 byte body from an hexastring", () => { - const status: boolean = builder.addHexaStringToData("0x8081828384"); - expect(status).toBe(true); + builder.addHexaStringToData("0x8081828384"); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_HEXA1); + expect(builder.getErrors()).toEqual([]); }); it("should serialize with an 4 byte body from an hexastring without '0x'", () => { - const status: boolean = builder.addHexaStringToData("85868788"); - expect(status).toBe(true); + builder.addHexaStringToData("85868788"); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_HEXA2); + expect(builder.getErrors()).toEqual([]); }); it("should serialize with an 4 byte body LV encoded from an hexastring", () => { - const status: boolean = builder.encodeInLVFromHexa("0xA1A2A3"); - expect(status).toBe(true); + builder.encodeInLVFromHexa("0xA1A2A3"); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_LV_HEXA); + expect(builder.getErrors()).toEqual([]); }); it("should serialize with an 4 byte body LV encoded from an ascci string", () => { - const status: boolean = builder.encodeInLVFromAscii("maman"); - expect(status).toBe(true); + builder.encodeInLVFromAscii("maman"); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_LV_ASCII); + expect(builder.getErrors()).toEqual([]); }); it("should serialize with an 4 byte body LV encoded from a buffer", () => { const myarray = new Uint8Array([0xf0, 0xf1]); - const status: boolean = builder.encodeInLVFromBuffer(myarray); - expect(status).toBe(true); + builder.encodeInLVFromBuffer(myarray); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_LV_ARRAY); + expect(builder.getErrors()).toEqual([]); }); it("should serialize with an 4 byte body LV encoded from a buffer", () => { const myarray = new Uint8Array([0xf0, 0xf1]); - const status: boolean = builder.encodeInLVFromBuffer(myarray); - expect(status).toBe(true); + builder.encodeInLVFromBuffer(myarray); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_LV_ARRAY); + expect(builder.getErrors()).toEqual([]); }); it("should serialize with an complete body of 0xAA", () => { const myarray = new Uint8Array(255).fill(0xaa, 0, 255); - const status = builder.addBufferToData(myarray); - expect(status).toBe(true); + builder.addBufferToData(myarray); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getErrors()).toEqual([]); }); }); @@ -142,39 +148,32 @@ describe("ApduBuilder", () => { it("should serialize with all previous field", () => { let available = APDU_MAX_PAYLOAD; - let status: boolean = builder.addByteToData(0x01); - expect(status).toBe(true); + builder.addByteToData(0x01); available--; expect(builder.getAvailablePayloadLength()).toBe(available); - status = builder.addShortToData(0x3302); - expect(status).toBe(true); + builder.addShortToData(0x3302); available -= 2; expect(builder.getAvailablePayloadLength()).toBe(available); - status = builder.addHexaStringToData("0x8081828384"); - expect(status).toBe(true); + builder.addHexaStringToData("0x8081828384"); available -= 5; expect(builder.getAvailablePayloadLength()).toBe(available); - status = builder.addHexaStringToData("85868788"); - expect(status).toBe(true); + builder.addHexaStringToData("85868788"); available -= 4; expect(builder.getAvailablePayloadLength()).toBe(available); - status = builder.encodeInLVFromHexa("0xA1A2A3"); - expect(status).toBe(true); + builder.encodeInLVFromHexa("0xA1A2A3"); available -= 4; expect(builder.getAvailablePayloadLength()).toBe(available); - status = builder.encodeInLVFromAscii("maman"); - expect(status).toBe(true); + builder.encodeInLVFromAscii("maman"); available -= 6; expect(builder.getAvailablePayloadLength()).toBe(available); const myarray = new Uint8Array([0xf0, 0xf1]); - status = builder.encodeInLVFromBuffer(myarray); - expect(status).toBe(true); + builder.encodeInLVFromBuffer(myarray); available -= 3; expect(builder.getAvailablePayloadLength()).toBe(available); @@ -188,45 +187,55 @@ describe("ApduBuilder", () => { }); it("error to undefined value", () => { - const status: boolean = builder.addByteToData(undefined); - expect(status).toBe(false); + builder.addByteToData(undefined); expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + expect(builder.getErrors()).toEqual([new InvalidValueError("byte")]); }); it("error due value greater than 8-bit integer", () => { - const status: boolean = builder.addByteToData(0x100); - expect(status).toBe(false); + builder.addByteToData(0x100); expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + expect(builder.getErrors()).toEqual([ + new ValueOverflowError((0x100).toString(), 255), + ]); }); it("error due value greater than 16-bit integer", () => { - const status: boolean = builder.addShortToData(0x10000); - expect(status).toBe(false); + builder.addShortToData(0x10000); expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + expect(builder.getErrors()).toEqual([ + new ValueOverflowError((0x10000).toString(), 65535), + ]); }); it("error due to a string not well coded", () => { - let status = builder.addHexaStringToData(":08081828384"); - expect(status).toBe(false); - status = builder.addHexaStringToData("081828384"); - expect(status).toBe(false); - status = builder.addHexaStringToData("80818n8384"); - expect(status).toBe(false); - status = builder.addHexaStringToData("808182838z"); - expect(status).toBe(false); + builder + .addHexaStringToData(":08081828384") + .addHexaStringToData("081828384") + .addHexaStringToData("80818n8384") + .addHexaStringToData("808182838z"); + expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + expect(builder.getErrors()).toEqual([ + new HexaStringEncodeError(":08081828384"), + new HexaStringEncodeError("081828384"), + new HexaStringEncodeError("80818n8384"), + new HexaStringEncodeError("808182838z"), + ]); }); it("error due direct overflow", () => { const myarray = new Uint8Array(256).fill(0xaa, 0, 256); - const status: boolean = builder.addBufferToData(myarray); - expect(status).toBe(false); + builder.addBufferToData(myarray); expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + expect(builder.getErrors()).toEqual([ + new DataOverflowError(myarray.toString()), + ]); }); it("error due to subsequent overflow with one byte", () => { @@ -235,14 +244,13 @@ describe("ApduBuilder", () => { 0, APDU_MAX_PAYLOAD, ); - let status: boolean = builder.addBufferToData(myarray); - expect(status).toBe(true); + builder.addBufferToData(myarray); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); - status = builder.addByteToData(0); - expect(status).toBe(false); + builder.addByteToData(0); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); + expect(builder.getErrors()).toEqual([new DataOverflowError("0")]); }); it("error due to subsequent overflow with 2 bytes", () => { @@ -251,15 +259,14 @@ describe("ApduBuilder", () => { 0, APDU_MAX_PAYLOAD, ); - let status: boolean = builder.addBufferToData(myarray); - expect(status).toBe(true); + builder.addBufferToData(myarray); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); - status = builder.addShortToData(0); - expect(status).toBe(false); + builder.addShortToData(0); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); + expect(builder.getErrors()).toEqual([new DataOverflowError("0")]); }); it("error due to subsequent overflow with 1-byte array", () => { @@ -268,18 +275,19 @@ describe("ApduBuilder", () => { 0, APDU_MAX_PAYLOAD, ); - let status = builder.addBufferToData(myarray); - expect(status).toBe(true); + builder.addBufferToData(myarray); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); const mybuffer = new Uint8Array(1); - mybuffer[1] = 0xff; + mybuffer.set([0xff], 0); - status = builder.addBufferToData(mybuffer); - expect(status).toBe(false); + builder.addBufferToData(mybuffer); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); + expect(builder.getErrors()).toEqual([ + new DataOverflowError(mybuffer.toString()), + ]); }); it("error due to subsequent overflow with 1-char ascii", () => { @@ -288,17 +296,16 @@ describe("ApduBuilder", () => { 0, APDU_MAX_PAYLOAD, ); - let status: boolean = builder.addBufferToData(myarray); - expect(status).toBe(true); + builder.addBufferToData(myarray); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); const mystring = "a"; - status = builder.addAsciiStringToData(mystring); - expect(status).toBe(false); + builder.addAsciiStringToData(mystring); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); + expect(builder.getErrors()).toEqual([new DataOverflowError(mystring)]); }); it("error due to subsequent overflow with 1-char hexastring", () => { @@ -307,38 +314,36 @@ describe("ApduBuilder", () => { 0, APDU_MAX_PAYLOAD, ); - let status = builder.addBufferToData(myarray); - expect(status).toBe(true); + builder.addBufferToData(myarray); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); - let mystring = "0xB4"; - - status = builder.addHexaStringToData(mystring); - expect(status).toBe(false); - expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); - expect(builder.getAvailablePayloadLength()).toBe(0); + const firstString = "0xB4"; + const secondString = "e1"; - mystring = "e1"; + builder + .addHexaStringToData(firstString) + .addHexaStringToData(secondString); - status = builder.addHexaStringToData(mystring); - expect(status).toBe(false); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); + expect(builder.getErrors()).toEqual([ + new DataOverflowError(builder.getHexaString(firstString).toString()), + new DataOverflowError(builder.getHexaString(secondString).toString()), + ]); }); it("error due to empty values", () => { const mystring = ""; - let status: boolean = builder.addHexaStringToData(mystring); - expect(status).toBe(false); - expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); - expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + builder.addHexaStringToData(mystring).encodeInLVFromHexa(mystring); - status = builder.encodeInLVFromHexa(mystring); - expect(status).toBe(false); expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); + expect(builder.getErrors()).toEqual([ + new HexaStringEncodeError(mystring), + new HexaStringEncodeError(mystring), + ]); }); it("error due to subsequent overflow with 1-char LV", () => { @@ -347,32 +352,27 @@ describe("ApduBuilder", () => { 0, APDU_MAX_PAYLOAD - 1, ); - let status = builder.addBufferToData(myarray); - expect(status).toBe(true); - expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_NEARLY); - expect(builder.getAvailablePayloadLength()).toBe(1); - - let mystring = "n"; - - status = builder.encodeInLVFromAscii(mystring); - expect(status).toBe(false); - expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_NEARLY); - expect(builder.getAvailablePayloadLength()).toBe(1); - - mystring = "e1"; - - status = builder.encodeInLVFromHexa(mystring); - expect(status).toBe(false); + builder.addBufferToData(myarray); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_NEARLY); expect(builder.getAvailablePayloadLength()).toBe(1); + const firstString = "n"; + const secondString = "e1"; const mybuffer = new Uint8Array(1); - mybuffer[1] = 0xff; + mybuffer.set([0xff], 0); + + builder + .encodeInLVFromAscii(firstString) + .encodeInLVFromHexa(secondString) + .encodeInLVFromBuffer(mybuffer); - status = builder.encodeInLVFromBuffer(mybuffer); - expect(status).toBe(false); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_NEARLY); expect(builder.getAvailablePayloadLength()).toBe(1); + expect(builder.getErrors()).toEqual([ + new DataOverflowError(firstString), + new DataOverflowError(secondString), + new DataOverflowError(mybuffer.toString()), + ]); }); }); }); diff --git a/packages/core/src/api/ApduBuilder.ts b/packages/core/src/api/apdu/utils/ApduBuilder.ts similarity index 56% rename from packages/core/src/api/ApduBuilder.ts rename to packages/core/src/api/apdu/utils/ApduBuilder.ts index 702729997..044a0f0dc 100644 --- a/packages/core/src/api/ApduBuilder.ts +++ b/packages/core/src/api/apdu/utils/ApduBuilder.ts @@ -1,9 +1,13 @@ -import { Apdu } from "./Apdu"; +import { Apdu } from "@api/apdu/model/Apdu"; + +import { + AppBuilderError, + DataOverflowError, + HexaStringEncodeError, + InvalidValueError, + ValueOverflowError, +} from "./AppBuilderError"; -// const OFFSET_CLA = 0; -// const OFFSET_INS = 1; -// const OFFSET_P1 = 2; -// const OFFSET_P2 = 3; export const HEADER_LENGTH = 5; export const APDU_MAX_PAYLOAD = 255; export const APDU_MAX_SIZE = APDU_MAX_PAYLOAD + 5; @@ -22,6 +26,7 @@ export class ApduBuilder { private _p1: number; private p2: number; private data?: Uint8Array; + private errors: AppBuilderError[] = []; // Custom Error constructor({ ins, cla, p1, p2 }: ApduBuilderArgs) { this._cla = cla & 0xff; @@ -35,98 +40,129 @@ export class ApduBuilder { build = () => new Apdu(this._cla, this._ins, this._p1, this.p2, this.data); addByteToData = (value?: number) => { - if (!value) return false; - if (value > 0xff) return false; - if ((this.data?.length ?? 0) >= APDU_MAX_PAYLOAD) return false; + if (typeof value === "undefined" || isNaN(value)) { + this.errors?.push(new InvalidValueError("byte", value?.toString())); + return this; + } + + if (value > 0xff) { + this.errors?.push( + new ValueOverflowError(value.toString(), 255 /* 0xff */), + ); + return this; + } + + if ((this.data?.length ?? 0) >= APDU_MAX_PAYLOAD) { + this.errors?.push(new DataOverflowError(value.toString())); + return this; + } this.data = Uint8Array.from([...(this.data ?? []), value & 0xff]); - return true; + return this; }; addShortToData = (value: number) => { - if (value > 0xffff) return false; + if (value > 0xffff) { + this.errors?.push(new ValueOverflowError(value.toString(), 65535)); + return this; + } - if (!this.addByteToData((value >>> 8) & 0xff)) { - return false; + if (this.getAvailablePayloadLength() < 4) { + this.errors?.push(new DataOverflowError(value.toString())); + return this; } - return this.addByteToData(value & 0xff); + this.addByteToData((value >>> 8) & 0xff); + this.addByteToData(value & 0xff); + return this; }; addBufferToData = (value: Uint8Array) => { - if (!this.hasEnoughLengthRemaining(value)) return false; + if (!this.hasEnoughLengthRemaining(value)) { + this.errors?.push(new DataOverflowError(value.toString())); + return this; + } + for (const byte of value) { this.addByteToData(byte); } - return true; + return this; }; addHexaStringToData = (value: string) => { const result = this.getHexaString(value); - if (!result.length) return false; - return this.addNumbers(result); + if (!result.length) { + this.errors?.push(new HexaStringEncodeError(value)); + return this; + } + this.addNumbers(result); + return this; }; addAsciiStringToData = (value: string) => { let hexa = 0; - if (!this.hasEnoughLengthRemaining(value)) return false; + if (!this.hasEnoughLengthRemaining(value)) { + this.errors?.push(new DataOverflowError(value)); + return this; + } for (const char of value) { hexa = char.charCodeAt(0); this.addByteToData(hexa); } - return true; + return this; }; encodeInLVFromHexa = (value: string) => { const result: number[] = this.getHexaString(value); - if (result.length == 0) return false; - if (!this.hasEnoughLengthRemaining(value, true)) return false; + if (!result.length) { + this.errors?.push(new HexaStringEncodeError(value)); + return this; + } + + if (!this.hasEnoughLengthRemaining(value, true)) { + this.errors?.push(new DataOverflowError(value)); + return this; + } // values are always being well formatted at this point // therefore no status test is needed this.addByteToData(result.length); - return this.addNumbers(result); + this.addNumbers(result); + return this; }; encodeInLVFromBuffer = (value: Uint8Array) => { - if (!this.hasEnoughLengthRemaining(value, true)) return false; + if (!this.hasEnoughLengthRemaining(value, true)) { + this.errors?.push(new DataOverflowError(value.toString())); + return this; + } // values are always being well formatted at this point // therefore no status test is needed this.addByteToData(value.length); - return this.addBufferToData(value); + this.addBufferToData(value); + return this; }; encodeInLVFromAscii = (value: string) => { - if (!this.hasEnoughLengthRemaining(value, true)) return false; + if (!this.hasEnoughLengthRemaining(value, true)) { + this.errors?.push(new DataOverflowError(value)); + return this; + } // values are always being well formatted at this point // therefore no status test is needed this.addByteToData(value.length); - return this.addAsciiStringToData(value); + this.addAsciiStringToData(value); + return this; }; getAvailablePayloadLength = () => { return APDU_MAX_SIZE - (HEADER_LENGTH + (this.data?.length ?? 0)); }; - // Private API - - private hasEnoughLengthRemaining = ( - value: string | Uint8Array | number[], - hasLv = false, - ) => { - return ( - HEADER_LENGTH + - (this.data?.length ?? 0) + - value.length + - (hasLv ? 1 : 0) <= - APDU_MAX_SIZE - ); - }; - - private getHexaString = (value: string) => { + getHexaString = (value: string) => { const table: number[] = []; if (!value.length) return []; @@ -160,13 +196,33 @@ export class ApduBuilder { return table; }; + getErrors = () => this.errors; + + // Private API + + private hasEnoughLengthRemaining = ( + value: string | Uint8Array | number[], + hasLv = false, + ) => { + return ( + HEADER_LENGTH + + (this.data?.length ?? 0) + + value.length + + (hasLv ? 1 : 0) <= + APDU_MAX_SIZE + ); + }; + private addNumbers = (value: number[]) => { - if (!this.hasEnoughLengthRemaining(value)) return false; + if (!this.hasEnoughLengthRemaining(value)) { + this.errors?.push(new DataOverflowError(value.toString())); + return this; + } for (const byte of value) { this.addByteToData(byte); } - return true; + return this; }; } diff --git a/packages/core/src/api/apdu/utils/AppBuilderError.ts b/packages/core/src/api/apdu/utils/AppBuilderError.ts new file mode 100644 index 000000000..c0c725250 --- /dev/null +++ b/packages/core/src/api/apdu/utils/AppBuilderError.ts @@ -0,0 +1,52 @@ +import { SdkError } from "@api/Error"; + +import { APDU_MAX_PAYLOAD } from "./ApduBuilder"; + +interface SdkAppBuilderError extends SdkError { + message: string; +} + +export class InvalidValueError implements SdkAppBuilderError { + readonly _tag = "InvalidValue"; + originalError?: Error; + message: string; + constructor(valueType: string, value?: string) { + this.message = `Invalid value for ${valueType}: ${value}`; + } +} + +export class ValueOverflowError implements SdkAppBuilderError { + readonly _tag = "ValueOverflow"; + originalError?: Error; + message: string; + constructor(value: string, max: number = APDU_MAX_PAYLOAD) { + this.message = `Value overflow for ${value}, max is ${max}`; + } +} + +export class DataOverflowError implements SdkAppBuilderError { + readonly _tag = "DataOverflow"; + message: string; + originalError?: Error; + constructor(value: string, remaining = 0) { + this.message = + remaining === 0 + ? `this.data is already full (value: ${value})` + : `this.data will overflow with "${value}", remaining bytes: ${remaining}`; + } +} + +export class HexaStringEncodeError implements SdkAppBuilderError { + readonly _tag = "HexaString"; + message: string; + originalError?: Error; + constructor(value: string) { + this.message = `Invalid encoded hexa string or length is null: ${value}`; + } +} + +export type AppBuilderError = + | InvalidValueError + | ValueOverflowError + | DataOverflowError + | HexaStringEncodeError; From ad3bff99cc2edecc422a9302cba14c205a956480 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Mon, 15 Apr 2024 16:24:30 +0200 Subject: [PATCH 181/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Add=20Command=20i?= =?UTF-8?q?nterface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/command/Command.ts | 6 ++++++ .../src/internal/device-session/model/Session.ts | 12 ++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 packages/core/src/api/command/Command.ts diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts new file mode 100644 index 000000000..2d1e47f4e --- /dev/null +++ b/packages/core/src/api/command/Command.ts @@ -0,0 +1,6 @@ +import { Apdu } from "@api/apdu/model/Apdu"; + +export interface Command { + getApdu(params?: Params): Apdu; + parseResponse(responseApdu: Apdu): T; +} diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index 53868f6dc..20f93ee39 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -1,5 +1,6 @@ import { v4 as uuidv4 } from "uuid"; +import { Command } from "@api/command/Command"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; export type SessionId = string; @@ -32,4 +33,15 @@ export class Session { sendApdu(_args: Uint8Array) { return this._connectedDevice.sendApdu(_args); } + + executeCommand( + _params: Params, + _command: Command, + ): Promise { + // const apdu = command.getApdu(params); + // do some magic with apdu + // const response = command.parseResponse(); + // return response; + throw new Error("Method not implemented."); + } } From 777412b204de5993e2975ad20091080b9e0e088e Mon Sep 17 00:00:00 2001 From: IoTPlumber Date: Mon, 15 Apr 2024 19:57:19 +0200 Subject: [PATCH 182/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Add=20ApduParser?= =?UTF-8?q?=20to=20core=20package?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/apdu/utils/ApduParser.test.ts | 443 ++++++++++++++++++ .../core/src/api/apdu/utils/ApduParser.ts | 131 ++++++ 2 files changed, 574 insertions(+) create mode 100644 packages/core/src/api/apdu/utils/ApduParser.test.ts create mode 100644 packages/core/src/api/apdu/utils/ApduParser.ts diff --git a/packages/core/src/api/apdu/utils/ApduParser.test.ts b/packages/core/src/api/apdu/utils/ApduParser.test.ts new file mode 100644 index 000000000..e8ad086f4 --- /dev/null +++ b/packages/core/src/api/apdu/utils/ApduParser.test.ts @@ -0,0 +1,443 @@ +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; + +import { ApduParser } from "./ApduParser"; + +const STATUS_WORD_SUCCESS = new Uint8Array([0x90, 0x00]); +const RESPONSE_ONE_BYTE = new Uint8Array([0x01]); +const RESPONSE_LV_ZERO = new Uint8Array([0x00]); +const RESPONSE_TWO_BYTES = new Uint8Array([0x01, 0x01]); +const RESPONSE_TLV_ZERO = new Uint8Array([0xab, 0x00]); +const RESPONSE_ALL_BYTES = new Uint8Array([ + 0x01, + 0x02, + 0x03, + ...Array(253).fill(0xaa), +]); + +/* +Type : 33 00 00 04 -> nanoX +Version SE (LV): 2.2.3 +Flag: E600000000 + PIN OK + Factory init Ok + Onboarding done +Version MCU(LV): 2.30 +Version BootLoader(LV): 1.16 +HW rev: 0 +Language(LV): Fra & Eng +Recover state (LV): 1 +*/ +const DEVICE_TYPE = "33000004"; +const DEVICE_FLAGS = "0xe6000000"; +const NUMERIC_FLAGS = 0xe6000000; +const VERSION_FW_SE = "2.2.3"; +const VERSION_FW_MCU = "2.30"; +const VERSION_FW_BL = "1.16"; +const HARDWARE_REV = 0; +const LANGUAGE_PACK = 1; +const RECOVER_STATE = 0; +const RESPONSE_GET_VERSION = new Uint8Array([ + 0x33, 0x00, 0x00, 0x04, 0x05, 0x32, 0x2e, 0x32, 0x2e, 0x33, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0x32, 0x2e, 0x33, 0x30, 0x04, 0x31, 0x2e, 0x31, 0x36, 0x01, + 0x00, 0x01, 0x01, 0x01, 0x00, +]); + +/* +Format version: 1 +Name: BOLOS +Version: 2.2.3 +*/ +const DASHBOARD_HEX = new Uint8Array([0x42, 0x4f, 0x4c, 0x4f, 0x53]); +const DASHBOARD_NAME = "BOLOS"; +const RESPONSE_GET_APP_VERSION = new Uint8Array([ + 0x01, 0x05, 0x42, 0x4f, 0x4c, 0x4f, 0x53, 0x05, 0x32, 0x2e, 0x32, 0x2e, 0x33, +]); + +let parser: ApduParser; +let response: ApduResponse = new ApduResponse({ + statusCode: STATUS_WORD_SUCCESS, + data: RESPONSE_ONE_BYTE, +}); + +describe("ApduParser", () => { + describe("clean", () => { + it("should create an instance", () => { + parser = new ApduParser(response); + expect(parser).toBeDefined(); + expect(parser).toBeInstanceOf(ApduParser); + }); + + it("Extract a single byte", () => { + parser = new ApduParser(response); + expect(parser.extract8BitUint()).toBe(0x01); + expect(parser.getCurrentIndex()).toBe(1); + expect(parser.getUnparsedRemainingLength()).toBe(0); + }); + + it("Extract one byte", () => { + response = new ApduResponse({ + statusCode: STATUS_WORD_SUCCESS, + data: RESPONSE_ALL_BYTES, + }); + parser = new ApduParser(response); + let index = 0; + let length = RESPONSE_ALL_BYTES.length; + + expect(length).toBe(256); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + index++; + length--; + + expect(parser.extract8BitUint()).toBe(0x01); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + index++; + length--; + + expect(parser.extract8BitUint()).toBe(0x02); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + index++; + length--; + + expect(parser.extract8BitUint()).toBe(0x03); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + index++; + length--; + + while (length != 0) { + expect(parser.extract8BitUint()).toBe(0xaa); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + index++; + length--; + } + }); + + it("Extract 16-bit & 32-bit number", () => { + response = new ApduResponse({ + statusCode: STATUS_WORD_SUCCESS, + data: RESPONSE_ALL_BYTES, + }); + parser = new ApduParser(response); + let index = 0; + let length = RESPONSE_ALL_BYTES.length; + + expect(length).toBe(256); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + expect(parser.extract16BitUInt()).toBe(0x0102); + index += 2; + length -= 2; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + expect(parser.extract16BitUInt()).toBe(0x03aa); + index += 2; + length -= 2; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + parser.resetIndex(); + index = 0; + length = RESPONSE_ALL_BYTES.length; + + expect(parser.extract32BitUInt()).toBe(0x010203aa); + index += 4; + length -= 4; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + expect(parser.extract32BitUInt()).toBe(0xaaaaaaaa); + index += 4; + length -= 4; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + }); + + it("Parse a GetAppVersion response", () => { + response = new ApduResponse({ + statusCode: STATUS_WORD_SUCCESS, + data: RESPONSE_GET_APP_VERSION, + }); + parser = new ApduParser(response); + let index = 0; + let length = RESPONSE_GET_APP_VERSION.length; + + // Parse the response considering the first field to be the format field + expect(length).toBe(13); + + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + const value = parser.extract8BitUint(); + index++; + length--; + expect(value).toBe(1); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + let array = parser.extractFieldLVEncoded(); + expect(array).toStrictEqual(DASHBOARD_HEX); + expect(parser.encodeToString(array)).toBe(DASHBOARD_NAME); + index += 6; + length -= 6; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(parser.encodeToString(array)).toBe(VERSION_FW_SE); + index += 6; + length -= 6; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + // Reparse the response considering the first field to be the TLV formatted + parser.resetIndex(); + index = 0; + length = RESPONSE_GET_APP_VERSION.length; + + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + const field = parser.extractFieldTLVEncoded(); + expect(field?.tag).toBe(0x01); + expect(field?.value).toStrictEqual(DASHBOARD_HEX); + expect(parser.encodeToString(field?.value)).toBe(DASHBOARD_NAME); + index += 7; + length -= 7; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(parser.encodeToString(array)).toBe(VERSION_FW_SE); + index += 6; + length -= 6; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + }); + + it("Parse a GetVersion response", () => { + response = new ApduResponse({ + statusCode: STATUS_WORD_SUCCESS, + data: RESPONSE_GET_VERSION, + }); + parser = new ApduParser(response); + let index = 0; + let length = RESPONSE_GET_VERSION.length; + + expect(length).toBe(31); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + expect(parser.testMinimalLength(25)).toBe(true); + + let array = parser.extractFieldDirect(4); + expect(parser.encodeToHexaString(array)).toBe(DEVICE_TYPE); + index += 4; + length -= 4; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(parser.encodeToString(array)).toBe(VERSION_FW_SE); + index += 6; + length -= 6; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + const flags = parser.encodeToHexaString(array, true); + expect(flags).toBe(DEVICE_FLAGS); + expect(parseInt(flags, 16)).toBe(NUMERIC_FLAGS); + index += 5; + length -= 5; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(parser.encodeToString(array)).toBe(VERSION_FW_MCU); + index += 5; + length -= 5; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(parser.encodeToString(array)).toBe(VERSION_FW_BL); + index += 5; + length -= 5; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(array?.at(0)).toBe(HARDWARE_REV); + index += 2; + length -= 2; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(array?.at(0)).toBe(LANGUAGE_PACK); + index += 2; + length -= 2; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(array?.at(0)).toBe(RECOVER_STATE); + index += 2; + length -= 2; + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + }); + }); + + describe("errors", () => { + it("no response", () => { + response = new ApduResponse({ + statusCode: STATUS_WORD_SUCCESS, + data: new Uint8Array(), + }); + parser = new ApduParser(response); + const index = 0; + const length = 0; + + expect(parser.testMinimalLength(1)).toBe(false); + + expect(parser.extract8BitUint()).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + expect(parser.extract16BitUInt()).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + expect(parser.extract32BitUInt()).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + let array = parser.extractFieldDirect(2); + expect(array).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(array).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + const field = parser.extractFieldTLVEncoded(); + expect(field).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + }); + + it("length error", () => { + response = new ApduResponse({ + statusCode: STATUS_WORD_SUCCESS, + data: RESPONSE_ONE_BYTE, + }); + parser = new ApduParser(response); + const index = 0; + const length = RESPONSE_ONE_BYTE.length; + + expect(length).toBe(1); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + expect(parser.extract16BitUInt()).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + expect(parser.extract32BitUInt()).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + let array = parser.extractFieldDirect(2); + expect(array).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(array).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + let field = parser.extractFieldTLVEncoded(); + expect(field).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + response = new ApduResponse({ + statusCode: STATUS_WORD_SUCCESS, + data: RESPONSE_TWO_BYTES, + }); + parser = new ApduParser(response); + + field = parser.extractFieldTLVEncoded(); + expect(field).toBe(undefined); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe( + RESPONSE_TWO_BYTES.length, + ); + }); + + it("Test zero length", () => { + response = new ApduResponse({ + statusCode: STATUS_WORD_SUCCESS, + data: RESPONSE_LV_ZERO, + }); + parser = new ApduParser(response); + const zero = new Uint8Array(); + + const index = 0; + let length = RESPONSE_LV_ZERO.length; + + expect(length).toBe(1); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + const value = parser.extract8BitUint(); + expect(value).toBe(0); + expect(parser.getCurrentIndex()).toBe(1); + expect(parser.getUnparsedRemainingLength()).toBe(0); + + parser.resetIndex(); + + let array = parser.extractFieldDirect(0); + expect(array).toStrictEqual(zero); + expect(parser.encodeToString(array)).toBe(""); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + array = parser.extractFieldLVEncoded(); + expect(parser.getCurrentIndex()).toBe(1); + expect(parser.getUnparsedRemainingLength()).toBe(0); + expect(array).toStrictEqual(zero); + expect(parser.encodeToString(array)).toBe(""); + + response = new ApduResponse({ + statusCode: STATUS_WORD_SUCCESS, + data: RESPONSE_TLV_ZERO, + }); + parser = new ApduParser(response); + length = RESPONSE_TLV_ZERO.length; + + expect(length).toBe(2); + expect(parser.getCurrentIndex()).toBe(index); + expect(parser.getUnparsedRemainingLength()).toBe(length); + + const field = parser.extractFieldTLVEncoded(); + expect(field?.tag).toBe(0xab); + expect(field?.value).toStrictEqual(zero); + expect(parser.encodeToString(field?.value)).toBe(""); + expect(parser.getCurrentIndex()).toBe(2); + expect(parser.getUnparsedRemainingLength()).toBe(0); + + expect(parser.encodeToHexaString()).toBe(""); + expect(parser.encodeToString()).toBe(""); + }); + }); +}); diff --git a/packages/core/src/api/apdu/utils/ApduParser.ts b/packages/core/src/api/apdu/utils/ApduParser.ts new file mode 100644 index 000000000..745bd1020 --- /dev/null +++ b/packages/core/src/api/apdu/utils/ApduParser.ts @@ -0,0 +1,131 @@ +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; + +export type TaggedField = { + tag: number; + value: Uint8Array; +}; + +export class ApduParser { + private _index: number; + private _response: Uint8Array; + + constructor(response: ApduResponse) { + this._index = 0; + this._response = response.data; + } + + // Public API + testMinimalLength = (length: number) => { + if (length > this._response.length) return false; + return true; + }; + + extract8BitUint = () => { + if (!this.testLength(1)) return undefined; + return this._response[this._index++]; + }; + + extract16BitUInt = () => { + if (!this.testLength(2)) return undefined; + let msb = this.extract8BitUint(); + if (!msb) return undefined; + const lsb = this.extract8BitUint(); + if (!lsb) return undefined; + msb *= 0x100; + return msb + lsb; + }; + + extract32BitUInt = () => { + if (!this.testLength(4)) return undefined; + let msw = this.extract16BitUInt(); + if (!msw) return undefined; + const lsw = this.extract16BitUInt(); + if (!lsw) return undefined; + msw *= 0x10000; + return msw + lsw; + }; + + extractFieldDirect = (length: number) => { + if (!this.testLength(length)) return undefined; + if (length == 0) return new Uint8Array(); + const field = this._response.slice(this._index, this._index + length); + this._index += length; + return field; + }; + + extractFieldLVEncoded = () => { + // extract Length field + const length = this.extract8BitUint(); + if (length == 0) return new Uint8Array(); + if (!length) return undefined; + const field = this.extractFieldDirect(length); + + // if the field is inconsistent then roll back to the initial point + if (!field) this._index--; + return field; + }; + + extractFieldTLVEncoded = () => { + if (!this.testLength(2)) return undefined; + + // extract the tag field + const tag = this.extract8BitUint(); + const value = this.extractFieldLVEncoded(); + + // if the field is inconsistent then roll back to the initial point + if (!value) { + this._index--; + return undefined; + } + return { tag, value }; + }; + + encodeToHexaString = (value?: Uint8Array, preamble?: boolean) => { + let result = ""; + let index = 0; + + if (!value) return result; + + if (preamble) result += "0x"; + + while (index <= value.length) { + const item = value.at(index)?.toString(16); + if (item) result += item.length < 2 ? "0" + item : item; + index++; + } + return result; + }; + + encodeToString = (value?: Uint8Array) => { + let result = ""; + let index = 0; + + if (!value) return result; + + while (index <= value.length) { + const item = value.at(index); + if (item) result += String.fromCharCode(item); + index++; + } + + return result; + }; + + getCurrentIndex = () => { + return this._index; + }; + + resetIndex = () => { + this._index = 0; + }; + + getUnparsedRemainingLength = () => { + return this._response.length - this._index; + }; + + // Private API + private testLength = (length: number) => { + if (this._index + length > this._response.length) return false; + return true; + }; +} From 37a2573901d912a5c7b67b21d92dbbd5bc109cbe Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 16 Apr 2024 15:59:46 +0200 Subject: [PATCH 183/253] =?UTF-8?q?=F0=9F=93=9D=20(core):=20ApduParser=20+?= =?UTF-8?q?=20ApduBuilder=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/apdu/utils/ApduBuilder.test.ts | 18 +-- .../core/src/api/apdu/utils/ApduBuilder.ts | 114 +++++++++++++++--- .../src/api/apdu/utils/ApduParser.test.ts | 32 ++--- .../core/src/api/apdu/utils/ApduParser.ts | 108 +++++++++++++---- 4 files changed, 206 insertions(+), 66 deletions(-) diff --git a/packages/core/src/api/apdu/utils/ApduBuilder.test.ts b/packages/core/src/api/apdu/utils/ApduBuilder.test.ts index 9e874a35a..3345231c7 100644 --- a/packages/core/src/api/apdu/utils/ApduBuilder.test.ts +++ b/packages/core/src/api/apdu/utils/ApduBuilder.test.ts @@ -84,13 +84,13 @@ describe("ApduBuilder", () => { }); it("should serialize with an single byte body", () => { - builder.addByteToData(0x01); + builder.add8BitUintToData(0x01); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_SINGLE); expect(builder.getErrors()).toEqual([]); }); it("should serialize with an 2 byte body", () => { - builder.addShortToData(0x3302); + builder.add16BitUintToData(0x3302); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_TWO); expect(builder.getErrors()).toEqual([]); }); @@ -148,11 +148,11 @@ describe("ApduBuilder", () => { it("should serialize with all previous field", () => { let available = APDU_MAX_PAYLOAD; - builder.addByteToData(0x01); + builder.add8BitUintToData(0x01); available--; expect(builder.getAvailablePayloadLength()).toBe(available); - builder.addShortToData(0x3302); + builder.add16BitUintToData(0x3302); available -= 2; expect(builder.getAvailablePayloadLength()).toBe(available); @@ -187,14 +187,14 @@ describe("ApduBuilder", () => { }); it("error to undefined value", () => { - builder.addByteToData(undefined); + builder.add8BitUintToData(undefined); expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); expect(builder.getErrors()).toEqual([new InvalidValueError("byte")]); }); it("error due value greater than 8-bit integer", () => { - builder.addByteToData(0x100); + builder.add8BitUintToData(0x100); expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); expect(builder.getErrors()).toEqual([ @@ -203,7 +203,7 @@ describe("ApduBuilder", () => { }); it("error due value greater than 16-bit integer", () => { - builder.addShortToData(0x10000); + builder.add16BitUintToData(0x10000); expect(builder.build().getRawApdu()).toEqual(COMMAND_NO_BODY); expect(builder.getAvailablePayloadLength()).toBe(APDU_MAX_PAYLOAD); expect(builder.getErrors()).toEqual([ @@ -248,7 +248,7 @@ describe("ApduBuilder", () => { expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); - builder.addByteToData(0); + builder.add8BitUintToData(0); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getErrors()).toEqual([new DataOverflowError("0")]); }); @@ -263,7 +263,7 @@ describe("ApduBuilder", () => { expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); - builder.addShortToData(0); + builder.add16BitUintToData(0); expect(builder.build().getRawApdu()).toEqual(COMMAND_BODY_MAX); expect(builder.getAvailablePayloadLength()).toBe(0); expect(builder.getErrors()).toEqual([new DataOverflowError("0")]); diff --git a/packages/core/src/api/apdu/utils/ApduBuilder.ts b/packages/core/src/api/apdu/utils/ApduBuilder.ts index 044a0f0dc..7c2a893bf 100644 --- a/packages/core/src/api/apdu/utils/ApduBuilder.ts +++ b/packages/core/src/api/apdu/utils/ApduBuilder.ts @@ -12,7 +12,7 @@ export const HEADER_LENGTH = 5; export const APDU_MAX_PAYLOAD = 255; export const APDU_MAX_SIZE = APDU_MAX_PAYLOAD + 5; -type ApduBuilderArgs = { +export type ApduBuilderArgs = { ins: number; cla: number; p1: number; @@ -20,6 +20,11 @@ type ApduBuilderArgs = { offset?: number; }; +/** + * ApduBuilder is a utility class to help build APDU commands + * It allows to easily add data to the data field of the APDU command + * and to encode data in different formats + */ export class ApduBuilder { private _ins: number; private _cla: number; @@ -35,11 +40,22 @@ export class ApduBuilder { this.p2 = p2 & 0xff; } + // ========== // Public API + // ========== + /** + * Build a new Apdu instance with the current state of the builder + * @returns {Apdu} - Returns a new Apdu instance + */ build = () => new Apdu(this._cla, this._ins, this._p1, this.p2, this.data); - addByteToData = (value?: number) => { + /** + * Add a 8-bit unsigned integer to the data field (max value 0xff = 255) + * @param value?: number - The value to add to the data + * @returns {ApduBuilder} - Returns the current instance of ApduBuilder + */ + add8BitUintToData = (value?: number) => { if (typeof value === "undefined" || isNaN(value)) { this.errors?.push(new InvalidValueError("byte", value?.toString())); return this; @@ -61,7 +77,12 @@ export class ApduBuilder { return this; }; - addShortToData = (value: number) => { + /** + * Add a 16-bit unsigned integer to the data field (max value 0xffff = 65535) + * @param value: number - The value to add to the data + * @returns {ApduBuilder} - Returns the current instance of ApduBuilder + */ + add16BitUintToData = (value: number) => { if (value > 0xffff) { this.errors?.push(new ValueOverflowError(value.toString(), 65535)); return this; @@ -72,11 +93,16 @@ export class ApduBuilder { return this; } - this.addByteToData((value >>> 8) & 0xff); - this.addByteToData(value & 0xff); + this.add8BitUintToData((value >>> 8) & 0xff); + this.add8BitUintToData(value & 0xff); return this; }; + /** + * Add a Uint8Array to the data field if it has enough remaining space + * @param value: Uint8Array - The value to add to the data + * @returns {ApduBuilder} - Returns the current instance of ApduBuilder + */ addBufferToData = (value: Uint8Array) => { if (!this.hasEnoughLengthRemaining(value)) { this.errors?.push(new DataOverflowError(value.toString())); @@ -84,11 +110,17 @@ export class ApduBuilder { } for (const byte of value) { - this.addByteToData(byte); + this.add8BitUintToData(byte); } return this; }; + /** + * Add a string to the data field if it has enough remaining space + * and it can be formatted as a hexadecimal string + * @param value: string - The value to add to the data + * @returns {ApduBuilder} - Returns the current instance of ApduBuilder + */ addHexaStringToData = (value: string) => { const result = this.getHexaString(value); if (!result.length) { @@ -99,6 +131,11 @@ export class ApduBuilder { return this; }; + /** + * Add an ascii string to the data field if it has enough remaining space + * @param value: string - The value to add to the data + * @returns {ApduBuilder} - Returns the current instance of ApduBuilder + */ addAsciiStringToData = (value: string) => { let hexa = 0; @@ -109,12 +146,19 @@ export class ApduBuilder { for (const char of value) { hexa = char.charCodeAt(0); - this.addByteToData(hexa); + this.add8BitUintToData(hexa); } return this; }; + /** + * Add a Length-Value encoded hexadecimal string to the data field if it has enough remaining space + * Length-Value encoding is a way to encode data in a binary format with the first byte + * being the length of the data and the following bytes being the data itself + * @param value: string - The value to add to the data + * @returns {ApduBuilder} - Returns the current instance of ApduBuilder + */ encodeInLVFromHexa = (value: string) => { const result: number[] = this.getHexaString(value); @@ -129,39 +173,60 @@ export class ApduBuilder { } // values are always being well formatted at this point // therefore no status test is needed - this.addByteToData(result.length); + this.add8BitUintToData(result.length); this.addNumbers(result); return this; }; + /** + * Add a Length-Value encoded buffer to the data field if it has enough remaining space + * Length-Value encoding is a way to encode data in a binary format with the first byte + * being the length of the data and the following bytes being the data itself + * @param value: Uint8Array - The value to add to the data + * @returns {ApduBuilder} - Returns the current instance of ApduBuilder + */ encodeInLVFromBuffer = (value: Uint8Array) => { if (!this.hasEnoughLengthRemaining(value, true)) { this.errors?.push(new DataOverflowError(value.toString())); return this; } - // values are always being well formatted at this point - // therefore no status test is needed - this.addByteToData(value.length); + + this.add8BitUintToData(value.length); this.addBufferToData(value); return this; }; + /** + * Add a Length-Value encoded ascii string to the data field if it has enough remaining space + * Length-Value encoding is a way to encode data in a binary format with the first byte + * being the length of the data and the following bytes being the data itself + * @param value: string - The value to add to the data + * @returns {ApduBuilder} - Returns the current instance of ApduBuilder + */ encodeInLVFromAscii = (value: string) => { if (!this.hasEnoughLengthRemaining(value, true)) { this.errors?.push(new DataOverflowError(value)); return this; } - // values are always being well formatted at this point - // therefore no status test is needed - this.addByteToData(value.length); + + this.add8BitUintToData(value.length); this.addAsciiStringToData(value); return this; }; + /** + * Returns the remaining payload length + * @returns {number} + */ getAvailablePayloadLength = () => { return APDU_MAX_SIZE - (HEADER_LENGTH + (this.data?.length ?? 0)); }; + /** + * Returns the hexadecimal representation of a string + * @param value: string - The value to convert to hexadecimal + * @returns {number[]} - Returns an array of numbers representing the hexadecimal value + */ getHexaString = (value: string) => { const table: number[] = []; @@ -196,10 +261,22 @@ export class ApduBuilder { return table; }; + /** + * Returns the current errors + * @returns {AppBuilderError[]} - Returns an array of errors + */ getErrors = () => this.errors; + // =========== // Private API - + // =========== + + /** + * Check if there is enough space to add a value to the data field + * @param value {string | Uint8Array | number[]} - Value to add to the data + * @param hasLv {boolean} - Length-Value encoding flag + * @returns {boolean} - Returns true if there is enough space to add the value + */ private hasEnoughLengthRemaining = ( value: string | Uint8Array | number[], hasLv = false, @@ -213,6 +290,11 @@ export class ApduBuilder { ); }; + /** + * Add an array of numbers to the data field if it has enough remaining space + * @param value: number[] - The value to add to the data + * @returns {ApduBuilder} - Returns the current instance of ApduBuilder + */ private addNumbers = (value: number[]) => { if (!this.hasEnoughLengthRemaining(value)) { this.errors?.push(new DataOverflowError(value.toString())); @@ -220,7 +302,7 @@ export class ApduBuilder { } for (const byte of value) { - this.addByteToData(byte); + this.add8BitUintToData(byte); } return this; diff --git a/packages/core/src/api/apdu/utils/ApduParser.test.ts b/packages/core/src/api/apdu/utils/ApduParser.test.ts index e8ad086f4..54033d244 100644 --- a/packages/core/src/api/apdu/utils/ApduParser.test.ts +++ b/packages/core/src/api/apdu/utils/ApduParser.test.ts @@ -234,7 +234,7 @@ describe("ApduParser", () => { expect(parser.getUnparsedRemainingLength()).toBe(length); expect(parser.testMinimalLength(25)).toBe(true); - let array = parser.extractFieldDirect(4); + let array = parser.extractFieldByLength(4); expect(parser.encodeToHexaString(array)).toBe(DEVICE_TYPE); index += 4; length -= 4; @@ -306,30 +306,30 @@ describe("ApduParser", () => { expect(parser.testMinimalLength(1)).toBe(false); - expect(parser.extract8BitUint()).toBe(undefined); + expect(parser.extract8BitUint()).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); - expect(parser.extract16BitUInt()).toBe(undefined); + expect(parser.extract16BitUInt()).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); - expect(parser.extract32BitUInt()).toBe(undefined); + expect(parser.extract32BitUInt()).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); - let array = parser.extractFieldDirect(2); - expect(array).toBe(undefined); + let array = parser.extractFieldByLength(2); + expect(array).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); array = parser.extractFieldLVEncoded(); - expect(array).toBe(undefined); + expect(array).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); const field = parser.extractFieldTLVEncoded(); - expect(field).toBe(undefined); + expect(field).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); }); @@ -347,26 +347,26 @@ describe("ApduParser", () => { expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); - expect(parser.extract16BitUInt()).toBe(undefined); + expect(parser.extract16BitUInt()).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); - expect(parser.extract32BitUInt()).toBe(undefined); + expect(parser.extract32BitUInt()).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); - let array = parser.extractFieldDirect(2); - expect(array).toBe(undefined); + let array = parser.extractFieldByLength(2); + expect(array).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); array = parser.extractFieldLVEncoded(); - expect(array).toBe(undefined); + expect(array).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); let field = parser.extractFieldTLVEncoded(); - expect(field).toBe(undefined); + expect(field).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe(length); @@ -377,7 +377,7 @@ describe("ApduParser", () => { parser = new ApduParser(response); field = parser.extractFieldTLVEncoded(); - expect(field).toBe(undefined); + expect(field).toBeUndefined(); expect(parser.getCurrentIndex()).toBe(index); expect(parser.getUnparsedRemainingLength()).toBe( RESPONSE_TWO_BYTES.length, @@ -406,7 +406,7 @@ describe("ApduParser", () => { parser.resetIndex(); - let array = parser.extractFieldDirect(0); + let array = parser.extractFieldByLength(0); expect(array).toStrictEqual(zero); expect(parser.encodeToString(array)).toBe(""); expect(parser.getCurrentIndex()).toBe(index); diff --git a/packages/core/src/api/apdu/utils/ApduParser.ts b/packages/core/src/api/apdu/utils/ApduParser.ts index 745bd1020..525fd4502 100644 --- a/packages/core/src/api/apdu/utils/ApduParser.ts +++ b/packages/core/src/api/apdu/utils/ApduParser.ts @@ -14,59 +14,89 @@ export class ApduParser { this._response = response.data; } + // ========== // Public API - testMinimalLength = (length: number) => { - if (length > this._response.length) return false; - return true; - }; - + // ========== + + /** + * Test if the length is greater than the response length + * @param length: number + * @returns {boolean} - Returns false if the length is greater than the response length + */ + testMinimalLength = (length: number) => !(length > this._response.length); + + /** + * Extract a single byte from the response + * @returns {number | undefined} - Returns the byte extracted from the response + */ extract8BitUint = () => { - if (!this.testLength(1)) return undefined; + if (!this.testLength(1)) return; return this._response[this._index++]; }; + /** + * Extract a 16-bit unsigned integer (Big Endian coding) from the response + * @returns {number | undefined} - Returns the 16-bit unsigned integer extracted from the response + */ extract16BitUInt = () => { - if (!this.testLength(2)) return undefined; + if (!this.testLength(2)) return; let msb = this.extract8BitUint(); - if (!msb) return undefined; + if (!msb) return; const lsb = this.extract8BitUint(); - if (!lsb) return undefined; + if (!lsb) return; msb *= 0x100; return msb + lsb; }; + /** + * Extract a 32-bit unsigned integer (Big Endian coding) from the response + * @returns {number | undefined} - Returns the 32-bit unsigned integer extracted from the response + */ extract32BitUInt = () => { - if (!this.testLength(4)) return undefined; + if (!this.testLength(4)) return; let msw = this.extract16BitUInt(); - if (!msw) return undefined; + if (!msw) return; const lsw = this.extract16BitUInt(); - if (!lsw) return undefined; + if (!lsw) return; msw *= 0x10000; return msw + lsw; }; - extractFieldDirect = (length: number) => { - if (!this.testLength(length)) return undefined; + /** + * Extract a field of a specified length from the response + * @param length: number - The length of the field to extract + * @returns {Uint8Array | undefined} - Returns the field extracted from the response + */ + extractFieldByLength = (length: number) => { + if (!this.testLength(length)) return; if (length == 0) return new Uint8Array(); const field = this._response.slice(this._index, this._index + length); this._index += length; return field; }; + /** + * Extract a field from the response that is length-value encoded + * @returns {Uint8Array | undefined} - Returns the field extracted from the response + */ extractFieldLVEncoded = () => { // extract Length field const length = this.extract8BitUint(); if (length == 0) return new Uint8Array(); - if (!length) return undefined; - const field = this.extractFieldDirect(length); + if (!length) return; + const field = this.extractFieldByLength(length); // if the field is inconsistent then roll back to the initial point if (!field) this._index--; return field; }; + /** + * Extract a field from the response that is tag-length-value encoded + * @returns {TaggedField | undefined} - Returns the field extracted from the response + */ extractFieldTLVEncoded = () => { - if (!this.testLength(2)) return undefined; + if (!this.testLength(2)) return; // extract the tag field const tag = this.extract8BitUint(); @@ -75,18 +105,24 @@ export class ApduParser { // if the field is inconsistent then roll back to the initial point if (!value) { this._index--; - return undefined; + return; } - return { tag, value }; + return { tag, value } as TaggedField; }; - encodeToHexaString = (value?: Uint8Array, preamble?: boolean) => { + /** + * Encode a value to a hexadecimal string + * @param value {Uint8Array} - The value to encode + * @param prefix {boolean} - Whether to add a prefix to the encoded value + * @returns {string} - The encoded value as a hexadecimal string + */ + encodeToHexaString = (value?: Uint8Array, prefix?: boolean) => { let result = ""; let index = 0; if (!value) return result; - if (preamble) result += "0x"; + if (prefix) result += "0x"; while (index <= value.length) { const item = value.at(index)?.toString(16); @@ -96,6 +132,11 @@ export class ApduParser { return result; }; + /** + * Encode a value to an ASCII string + * @param value {Uint8Array} - The value to encode + * @returns {string} - The encoded value as an ASCII string + */ encodeToString = (value?: Uint8Array) => { let result = ""; let index = 0; @@ -111,21 +152,38 @@ export class ApduParser { return result; }; + /** + * Get the current index of the parser + * @returns {number} - The current index of the parser + */ getCurrentIndex = () => { return this._index; }; + /** + * Reset the index of the parser to 0 + */ resetIndex = () => { this._index = 0; }; + /** + * Get the remaining length of the response + * @returns {number} - The remaining length of the response + */ getUnparsedRemainingLength = () => { return this._response.length - this._index; }; + // =========== // Private API - private testLength = (length: number) => { - if (this._index + length > this._response.length) return false; - return true; - }; + // =========== + + /** + * Test if the length is greater than the response length + * @param length: number + * @returns {boolean} - Returns false if the length is greater than the response length + */ + private testLength = (length: number) => + !(this._index + length > this._response.length); } From 8250c93b5f24ccc7a585c906e056c1343f7dabff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 08:20:02 +0000 Subject: [PATCH 184/253] Bump @babel/traverse from 7.22.8 to 7.24.1 in /pocs/tsyringe-sample Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.8 to 7.24.1. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.24.1/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] --- pocs/tsyringe-sample/package-lock.json | 286 ++++++++++++------------- 1 file changed, 138 insertions(+), 148 deletions(-) diff --git a/pocs/tsyringe-sample/package-lock.json b/pocs/tsyringe-sample/package-lock.json index 572696a9e..aede0cc28 100644 --- a/pocs/tsyringe-sample/package-lock.json +++ b/pocs/tsyringe-sample/package-lock.json @@ -33,12 +33,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -90,14 +91,14 @@ "dev": true }, "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -124,22 +125,22 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -222,18 +223,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" @@ -263,14 +264,15 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -348,9 +350,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -537,34 +539,34 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -572,13 +574,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -895,14 +897,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -918,9 +920,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" @@ -933,21 +935,15 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -3648,12 +3644,13 @@ } }, "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "requires": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" } }, "@babel/compat-data": { @@ -3694,14 +3691,14 @@ } }, "@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dev": true, "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" } }, @@ -3719,19 +3716,19 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { @@ -3790,15 +3787,15 @@ } }, "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { @@ -3819,14 +3816,15 @@ } }, "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "dependencies": { "ansi-styles": { @@ -3888,9 +3886,9 @@ } }, "@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -4020,42 +4018,42 @@ } }, "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" } }, "@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -4305,14 +4303,14 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { @@ -4322,9 +4320,9 @@ "dev": true }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, "@jridgewell/sourcemap-codec": { @@ -4334,21 +4332,13 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@sinclair/typebox": { From 05a8e7916801529ec9b0434f911dea58cc7d08d9 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 17 Apr 2024 18:18:00 +0200 Subject: [PATCH 185/253] =?UTF-8?q?=F0=9F=92=9A=20(ci):=20Allow=20some=20r?= =?UTF-8?q?ef=20to=20skip=20dangercheck?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 54f90bb1d..3c17ebefc 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,4 +1,4 @@ -name: pull_request +name: Pull Request on: pull_request: types: [opened, synchronize, reopened, edited] @@ -18,7 +18,8 @@ jobs: - uses: toshimaru/auto-author-assign@v2.1.0 danger: - name: Pass Danger check + name: Run Danger check + if: ${{ !contains(github.ref_name, 'dependabot') }} runs-on: [ubuntu-latest] steps: - uses: actions/checkout@v4 @@ -34,7 +35,7 @@ jobs: run: ./.github/actions/danger-check.sh health-check: - name: Pass health check + name: Run health check needs: [danger] runs-on: [device-sdk-4xlarge-linux] steps: @@ -46,7 +47,7 @@ jobs: run: pnpm health-check unit-tests: - name: Launch unit tests + name: Run unit tests needs: [danger] runs-on: [device-sdk-4xlarge-linux] steps: From c1cdfcd182350ce1b0c6cb1a3a7368756e07619e Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 17 Apr 2024 10:08:47 +0200 Subject: [PATCH 186/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Add=20sendCommand?= =?UTF-8?q?=20use=20case=20+=20GetOsVersion=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/blue-insects-punch.md | 5 ++ packages/core/jest.config.ts | 2 +- packages/core/src/api/DeviceSdk.ts | 11 +++ packages/core/src/api/command/Command.ts | 3 +- .../src/api/command/di/commandModule.test.ts | 51 +++++++++++++ .../core/src/api/command/di/commandModule.ts | 30 ++++++++ .../core/src/api/command/di/commandTypes.ts | 3 + .../src/api/command/os/GetOsVersionCommand.ts | 72 +++++++++++++++++++ .../command/use-case/SendCommandUseCase.ts | 54 ++++++++++++++ packages/core/src/di.ts | 2 + .../internal/device-session/model/Session.ts | 29 +++++--- 11 files changed, 249 insertions(+), 13 deletions(-) create mode 100644 .changeset/blue-insects-punch.md create mode 100644 packages/core/src/api/command/di/commandModule.test.ts create mode 100644 packages/core/src/api/command/di/commandModule.ts create mode 100644 packages/core/src/api/command/di/commandTypes.ts create mode 100644 packages/core/src/api/command/os/GetOsVersionCommand.ts create mode 100644 packages/core/src/api/command/use-case/SendCommandUseCase.ts diff --git a/.changeset/blue-insects-punch.md b/.changeset/blue-insects-punch.md new file mode 100644 index 000000000..6dc178deb --- /dev/null +++ b/.changeset/blue-insects-punch.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": minor +--- + +Add SendCommand use case + GetOsVersion command diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index da6381a71..ac318d966 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -4,7 +4,7 @@ import type { JestConfigWithTsJest } from "ts-jest"; const config: JestConfigWithTsJest = { preset: "@ledgerhq/jest-config-dsdk", setupFiles: ["/jest.setup.ts"], - testPathIgnorePatterns: ["/lib/"], + testPathIgnorePatterns: ["/lib/esm", "/lib/cjs"], collectCoverageFrom: [ "src/**/*.ts", "!src/**/*.stub.ts", diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 485d3dae1..a7c3f521a 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -1,6 +1,11 @@ import { Container } from "inversify"; import { Observable } from "rxjs"; +import { commandTypes } from "@api/command/di/commandTypes"; +import { + SendCommandUseCase, + SendCommandUseCaseArgs, +} from "@api/command/use-case/SendCommandUseCase"; import { ConnectedDevice } from "@api/usb/model/ConnectedDevice"; import { configTypes } from "@internal/config/di/configTypes"; import { GetSdkVersionUseCase } from "@internal/config/use-case/GetSdkVersionUseCase"; @@ -66,6 +71,12 @@ export class DeviceSdk { .execute(args); } + sendCommand(args: SendCommandUseCaseArgs): Promise { + return this.container + .get(commandTypes.SendCommandUseCase) + .execute(args); + } + getConnectedDevice(args: GetConnectedDeviceUseCaseArgs): ConnectedDevice { return this.container .get(usbDiTypes.GetConnectedDeviceUseCase) diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index 2d1e47f4e..304e5147e 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -1,6 +1,7 @@ import { Apdu } from "@api/apdu/model/Apdu"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; export interface Command { getApdu(params?: Params): Apdu; - parseResponse(responseApdu: Apdu): T; + parseResponse(responseApdu: ApduResponse): T; } diff --git a/packages/core/src/api/command/di/commandModule.test.ts b/packages/core/src/api/command/di/commandModule.test.ts new file mode 100644 index 000000000..6a7d3cb6d --- /dev/null +++ b/packages/core/src/api/command/di/commandModule.test.ts @@ -0,0 +1,51 @@ +import { Container } from "inversify"; + +import { SendCommandUseCase } from "@api/command/use-case/SendCommandUseCase"; +import { deviceSessionModuleFactory } from "@internal/device-session/di/deviceSessionModule"; +import { loggerModuleFactory } from "@internal/logger-publisher/di/loggerModule"; +import { StubUseCase } from "@root/src/di.stub"; + +import { commandModuleFactory } from "./commandModule"; +import { commandTypes } from "./commandTypes"; + +describe("commandModuleFactory", () => { + describe("Default", () => { + let container: Container; + let mod: ReturnType; + beforeEach(() => { + mod = commandModuleFactory(); + container = new Container(); + container.load(mod, deviceSessionModuleFactory(), loggerModuleFactory()); + }); + + it("should return the config module", () => { + expect(mod).toBeDefined(); + }); + + it("should return non-stubbed sendCommand usecase", () => { + const sendCommandUseCase = container.get( + commandTypes.SendCommandUseCase, + ); + expect(sendCommandUseCase).toBeInstanceOf(SendCommandUseCase); + }); + }); + + describe("Stubbed", () => { + let container: Container; + let mod: ReturnType; + beforeEach(() => { + mod = commandModuleFactory({ stub: true }); + container = new Container(); + container.load(mod); + }); + + it("should return the config module", () => { + expect(mod).toBeDefined(); + }); + + it("should return stubbed sendCommand usecase", () => { + const sendCommandUseCase = container.get(commandTypes.SendCommandUseCase); + expect(sendCommandUseCase).toBeInstanceOf(StubUseCase); + }); + }); +}); diff --git a/packages/core/src/api/command/di/commandModule.ts b/packages/core/src/api/command/di/commandModule.ts new file mode 100644 index 000000000..32f0657a6 --- /dev/null +++ b/packages/core/src/api/command/di/commandModule.ts @@ -0,0 +1,30 @@ +import { ContainerModule } from "inversify"; + +import { SendCommandUseCase } from "@api/command/use-case/SendCommandUseCase"; +import { StubUseCase } from "@root/src/di.stub"; + +import { commandTypes } from "./commandTypes"; + +type CommandModuleArgs = Partial<{ + stub: boolean; +}>; + +export const commandModuleFactory = ({ + stub = false, +}: CommandModuleArgs = {}) => + new ContainerModule( + ( + bind, + _unbind, + _isBound, + rebind, + _unbindAsync, + _onActivation, + _onDeactivation, + ) => { + bind(commandTypes.SendCommandUseCase).to(SendCommandUseCase); + if (stub) { + rebind(commandTypes.SendCommandUseCase).to(StubUseCase); + } + }, + ); diff --git a/packages/core/src/api/command/di/commandTypes.ts b/packages/core/src/api/command/di/commandTypes.ts new file mode 100644 index 000000000..2ab6ed617 --- /dev/null +++ b/packages/core/src/api/command/di/commandTypes.ts @@ -0,0 +1,3 @@ +export const commandTypes = { + SendCommandUseCase: Symbol.for("SendCommandUseCase"), +}; diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.ts b/packages/core/src/api/command/os/GetOsVersionCommand.ts new file mode 100644 index 000000000..29f3effc0 --- /dev/null +++ b/packages/core/src/api/command/os/GetOsVersionCommand.ts @@ -0,0 +1,72 @@ +import { Apdu } from "@api/apdu/model/Apdu"; +import { ApduBuilder } from "@api/apdu/utils/ApduBuilder"; +import { ApduParser } from "@api/apdu/utils/ApduParser"; +import { Command } from "@api/command/Command"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; + +type GetOsVersionResponse = { + targetId: number; + seVersion: Uint8Array; + seFlags: Uint8Array; + mcuSephVersion: Uint8Array; + mcuBootloaderVersion: Uint8Array; + hwVersion?: Uint8Array; + langId: Uint8Array; + recoverState?: Uint8Array; + sw: Uint8Array; +}; + +export class GetOsVersionCommand + implements Command +{ + getApdu = (): Apdu => + new ApduBuilder({ + cla: 0xe0, + ins: 0x01, + p1: 0x00, + p2: 0x00, + }).build(); + + parseResponse(responseApdu: ApduResponse) { + const sw = responseApdu.statusCode; + + if (!this.isSuccess(sw)) { + throw new Error(`Unexpected status word: ${sw.toString()}`); + } + + const parser = new ApduParser(responseApdu); + + // [ASK] Do we want to parse the value directly ? + // eg: const targetId = parser.encodeToString(parser.extract32BitUInt()); + const targetId = parser.extract32BitUInt()!; + const seVersion = parser.extractFieldLVEncoded()!; + const seFlags = parser.extractFieldLVEncoded()!; + const mcuSephVersion = parser.extractFieldLVEncoded()!; + const mcuBootloaderVersion = parser.extractFieldLVEncoded()!; + + // [ASK] hwVersion is LNX only, does it mean that we should skip this step + // if we are not on LNX and continue with the other fields? + const hwVersion = parser.extractFieldLVEncoded(); + const langId = parser.extractFieldLVEncoded()!; + const recoverState = parser.extractFieldLVEncoded(); + + return { + targetId, + seVersion, + seFlags, + mcuSephVersion, + mcuBootloaderVersion, + hwVersion, + langId, + recoverState, + sw, + }; + } + + private isSuccess(statusWord: Uint8Array) { + if (statusWord.length !== 2) { + return false; + } + return statusWord[0] === 0x90 && statusWord[1] === 0x00; + } +} diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.ts new file mode 100644 index 000000000..e9eb94247 --- /dev/null +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.ts @@ -0,0 +1,54 @@ +import { inject, injectable } from "inversify"; + +import { Command } from "@api/command/Command"; +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; +import type { SessionService } from "@internal/device-session/service/SessionService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +export type SendCommandUseCaseArgs = { + sessionId: string; + command: Command; + params?: Params; +}; + +/** + * Sends a command to a device through a device session. + */ +@injectable() +export class SendCommandUseCase { + private readonly _sessionService: SessionService; + private readonly _logger: LoggerPublisherService; + constructor( + @inject(deviceSessionTypes.SessionService) sessionService: SessionService, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerFactory: (tag: string) => LoggerPublisherService, + ) { + this._sessionService = sessionService; + this._logger = loggerFactory("SendCommandUseCase"); + } + + async execute({ + sessionId, + command, + params, + }: SendCommandUseCaseArgs): Promise { + const deviceSession = this._sessionService.getSessionById(sessionId); + + return deviceSession.caseOf({ + // Case device session found + Right: async (session) => { + const action = session.getCommand(command); + const response = await action(params); + return response; + }, + // Case device session not found + Left: (error) => { + this._logger.error("Error getting session", { + data: { error }, + }); + throw error; + }, + }); + } +} diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 90fb8e264..2d2462389 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -1,5 +1,6 @@ import { Container } from "inversify"; +import { commandModuleFactory } from "@api/command/di/commandModule"; import { LoggerSubscriberService } from "@api/logger-subscriber/service/LoggerSubscriberService"; // Uncomment this line to enable the logger middleware // import { makeLoggerMiddleware } from "inversify-logger-middleware"; @@ -36,6 +37,7 @@ export const makeContainer = ({ loggerModuleFactory({ subscribers: loggers }), deviceSessionModuleFactory(), sendModuleFactory({ stub }), + commandModuleFactory({ stub }), // modules go here ); diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index 20f93ee39..b43a473b4 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -5,6 +5,10 @@ import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDe export type SessionId = string; +export type ExecuteCommandFn = ( + command: Command, +) => (params?: Params) => Promise; + export type SessionConstructorArgs = { connectedDevice: InternalConnectedDevice; id?: SessionId; @@ -30,18 +34,21 @@ export class Session { return this._connectedDevice; } - sendApdu(_args: Uint8Array) { - return this._connectedDevice.sendApdu(_args); + sendApdu(apdu: Uint8Array) { + return this._connectedDevice.sendApdu(apdu); } - executeCommand( - _params: Params, - _command: Command, - ): Promise { - // const apdu = command.getApdu(params); - // do some magic with apdu - // const response = command.parseResponse(); - // return response; - throw new Error("Method not implemented."); + getCommand(command: Command) { + return async (params?: Params): Promise => { + const apdu = command.getApdu(params); + const response = await this.sendApdu(apdu.getRawApdu()); + + return response.caseOf({ + Left: (err) => { + throw err; + }, + Right: (r) => command.parseResponse(r), + }); + }; } } From 640df4346b65f673ea227ff599db5cefec77c304 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 17 Apr 2024 18:15:44 +0200 Subject: [PATCH 187/253] =?UTF-8?q?=E2=9C=A8=20(core):=20GetOsVersion=20pa?= =?UTF-8?q?rsing=20+=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/DeviceSdk.test.ts | 6 + packages/core/src/api/command/Command.ts | 3 +- .../command/os/GetOsVersionCommand.test.ts | 136 ++++++++++++++++++ .../src/api/command/os/GetOsVersionCommand.ts | 76 +++++----- .../use-case/SendCommandUseCase.test.ts | 64 +++++++++ .../command/use-case/SendCommandUseCase.ts | 3 +- .../api/command/utils/CommandUtils.test.ts | 34 +++++ .../src/api/command/utils/CommandUtils.ts | 11 ++ .../internal/device-session/model/Session.ts | 13 +- 9 files changed, 299 insertions(+), 47 deletions(-) create mode 100644 packages/core/src/api/command/os/GetOsVersionCommand.test.ts create mode 100644 packages/core/src/api/command/use-case/SendCommandUseCase.test.ts create mode 100644 packages/core/src/api/command/utils/CommandUtils.test.ts create mode 100644 packages/core/src/api/command/utils/CommandUtils.ts diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts index b701aee0e..76dba1a5c 100644 --- a/packages/core/src/api/DeviceSdk.test.ts +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -7,6 +7,7 @@ import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import pkg from "@root/package.json"; import { StubUseCase } from "@root/src/di.stub"; +import { commandTypes } from "./command/di/commandTypes"; import { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; import { DeviceSdk } from "./DeviceSdk"; @@ -49,6 +50,10 @@ describe("DeviceSdk", () => { it("should have getConnectedDevice method", () => { expect(sdk.getConnectedDevice).toBeDefined(); }); + + it("should have sendCommand method", () => { + expect(sdk.sendCommand).toBeDefined(); + }); }); describe("stubbed", () => { @@ -78,6 +83,7 @@ describe("DeviceSdk", () => { [discoveryTypes.StopDiscoveringUseCase], [discoveryTypes.ConnectUseCase], [sendTypes.SendApduUseCase], + [commandTypes.SendCommandUseCase], [usbDiTypes.GetConnectedDeviceUseCase], ])("should have %p use case", (diSymbol) => { const uc = sdk.container.get(diSymbol); diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index 304e5147e..7b4f35586 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -1,7 +1,8 @@ import { Apdu } from "@api/apdu/model/Apdu"; +import { DeviceModelId } from "@internal/device-model/model/DeviceModel"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; export interface Command { getApdu(params?: Params): Apdu; - parseResponse(responseApdu: ApduResponse): T; + parseResponse(responseApdu: ApduResponse, deviceModelId: DeviceModelId): T; } diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.test.ts b/packages/core/src/api/command/os/GetOsVersionCommand.test.ts new file mode 100644 index 000000000..8df4e9eea --- /dev/null +++ b/packages/core/src/api/command/os/GetOsVersionCommand.test.ts @@ -0,0 +1,136 @@ +import { Command } from "@api/command/Command"; +import { DeviceModelId } from "@api/types"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; + +import { + GetOsVersionCommand, + GetOsVersionResponse, +} from "./GetOsVersionCommand"; + +const GET_OS_VERSION_APDU = Uint8Array.from([0xe0, 0x01, 0x00, 0x00, 0x00]); + +const LNX_RESPONSE_DATA_GOOD = Uint8Array.from([ + 0x33, 0x00, 0x00, 0x04, 0x05, 0x32, 0x2e, 0x32, 0x2e, 0x33, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0x32, 0x2e, 0x33, 0x30, 0x04, 0x31, 0x2e, 0x31, 0x36, 0x01, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x90, 0x00, +]); +const LNX_RESPONSE_GOOD = new ApduResponse({ + statusCode: Uint8Array.from([0x90, 0x00]), + data: LNX_RESPONSE_DATA_GOOD, +}); + +const LNSP_REPONSE_DATA_GOOD = Uint8Array.from([ + 0x33, 0x10, 0x00, 0x04, 0x05, 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0x34, 0x2e, 0x30, 0x33, 0x04, 0x33, 0x2e, 0x31, 0x32, 0x01, + 0x00, 0x01, 0x00, 0x90, 0x00, +]); +const LNSP_RESPONSE_GOOD = new ApduResponse({ + statusCode: Uint8Array.from([0x90, 0x00]), + data: LNSP_REPONSE_DATA_GOOD, +}); + +const STAX_RESPONSE_DATA_GOOD = Uint8Array.from([ + 0x33, 0x20, 0x00, 0x04, 0x05, 0x31, 0x2e, 0x33, 0x2e, 0x30, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0x35, 0x2e, 0x32, 0x34, 0x04, 0x30, 0x2e, 0x34, 0x38, 0x01, + 0x00, 0x01, 0x00, 0x90, 0x00, +]); +const STAX_RESPONSE_GOOD = new ApduResponse({ + statusCode: Uint8Array.from([0x90, 0x00]), + data: STAX_RESPONSE_DATA_GOOD, +}); + +describe("GetOsVersionCommand", () => { + let command: Command; + + beforeEach(() => { + command = new GetOsVersionCommand(); + }); + + describe("getApdu", () => { + it("should return the GetOsVersion apdu", () => { + const apdu = command.getApdu(); + expect(apdu.getRawApdu()).toStrictEqual(GET_OS_VERSION_APDU); + }); + }); + + describe("parseResponse", () => { + describe("Nano X", () => { + it("should parse the LNX response", () => { + const parsed = command.parseResponse( + LNX_RESPONSE_GOOD, + DeviceModelId.NANO_X, + ); + + const expected = { + targetId: "33000004", + seVersion: "2.2.3", + seFlags: 3858759680, + mcuSephVersion: "2.30", + mcuBootloaderVersion: "1.16", + hwVersion: "00", + langId: "00", + recoverState: "00", + }; + + expect(parsed).toStrictEqual(expected); + }); + }); + + describe("Nano S Plus", () => { + it("should parse the LNSP response", () => { + const parsed = command.parseResponse( + LNSP_RESPONSE_GOOD, + DeviceModelId.NANO_SP, + ); + + const expected = { + targetId: "33100004", + seVersion: "1.1.1", + seFlags: 3858759680, + mcuSephVersion: "4.03", + mcuBootloaderVersion: "3.12", + hwVersion: "00", + langId: "00", + recoverState: "00", + }; + + expect(parsed).toStrictEqual(expected); + }); + }); + + describe("Stax", () => { + it("should parse the STAX response", () => { + const parsed = command.parseResponse( + STAX_RESPONSE_GOOD, + DeviceModelId.STAX, + ); + + const expected = { + targetId: "33200004", + seVersion: "1.3.0", + seFlags: 3858759680, + mcuSephVersion: "5.24", + mcuBootloaderVersion: "0.48", + hwVersion: "00", + langId: "00", + recoverState: "00", + }; + + expect(parsed).toStrictEqual(expected); + }); + }); + + describe("Error handling", () => { + it("should throw an error if the response is not successful", () => { + const response = new ApduResponse({ + statusCode: Uint8Array.from([0x6e, 0x80]), + data: Uint8Array.from([]), + }); + + expect(() => + command.parseResponse(response, DeviceModelId.NANO_X), + ).toThrow("Unexpected status word: 6e80"); + }); + }); + }); +}); diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.ts b/packages/core/src/api/command/os/GetOsVersionCommand.ts index 29f3effc0..84c8fca69 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.ts @@ -2,18 +2,19 @@ import { Apdu } from "@api/apdu/model/Apdu"; import { ApduBuilder } from "@api/apdu/utils/ApduBuilder"; import { ApduParser } from "@api/apdu/utils/ApduParser"; import { Command } from "@api/command/Command"; +import { CommandUtils } from "@api/command/utils/CommandUtils"; +import { DeviceModelId } from "@api/types"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; -type GetOsVersionResponse = { - targetId: number; - seVersion: Uint8Array; - seFlags: Uint8Array; - mcuSephVersion: Uint8Array; - mcuBootloaderVersion: Uint8Array; - hwVersion?: Uint8Array; - langId: Uint8Array; - recoverState?: Uint8Array; - sw: Uint8Array; +export type GetOsVersionResponse = { + targetId: string; + seVersion: string; + seFlags: number; + mcuSephVersion: string; + mcuBootloaderVersion: string; + hwVersion: string; + langId: string; + recoverState: string; }; export class GetOsVersionCommand @@ -27,28 +28,37 @@ export class GetOsVersionCommand p2: 0x00, }).build(); - parseResponse(responseApdu: ApduResponse) { - const sw = responseApdu.statusCode; - - if (!this.isSuccess(sw)) { - throw new Error(`Unexpected status word: ${sw.toString()}`); + parseResponse(responseApdu: ApduResponse, deviceModelId: DeviceModelId) { + const parser = new ApduParser(responseApdu); + if (!CommandUtils.isSuccessResponse(responseApdu)) { + // [ASK] How de we handle unsuccessful responses? + throw new Error( + `Unexpected status word: ${parser.encodeToHexaString(responseApdu.statusCode)}`, + ); } - const parser = new ApduParser(responseApdu); + const targetId = parser.encodeToHexaString(parser.extractFieldByLength(4)); + const seVersion = parser.encodeToString(parser.extractFieldLVEncoded()); + const seFlags = parseInt( + parser.encodeToHexaString(parser.extractFieldLVEncoded()).toString(), + 16, + ); + const mcuSephVersion = parser.encodeToString( + parser.extractFieldLVEncoded(), + ); + const mcuBootloaderVersion = parser.encodeToString( + parser.extractFieldLVEncoded(), + ); - // [ASK] Do we want to parse the value directly ? - // eg: const targetId = parser.encodeToString(parser.extract32BitUInt()); - const targetId = parser.extract32BitUInt()!; - const seVersion = parser.extractFieldLVEncoded()!; - const seFlags = parser.extractFieldLVEncoded()!; - const mcuSephVersion = parser.extractFieldLVEncoded()!; - const mcuBootloaderVersion = parser.extractFieldLVEncoded()!; + let hwVersion = "00"; + if (deviceModelId === DeviceModelId.NANO_X) { + hwVersion = parser.encodeToHexaString(parser.extractFieldLVEncoded()); + } - // [ASK] hwVersion is LNX only, does it mean that we should skip this step - // if we are not on LNX and continue with the other fields? - const hwVersion = parser.extractFieldLVEncoded(); - const langId = parser.extractFieldLVEncoded()!; - const recoverState = parser.extractFieldLVEncoded(); + const langId = parser.encodeToHexaString(parser.extractFieldLVEncoded()); + const recoverState = parser.encodeToHexaString( + parser.extractFieldLVEncoded(), + ); return { targetId, @@ -58,15 +68,7 @@ export class GetOsVersionCommand mcuBootloaderVersion, hwVersion, langId, - recoverState, - sw, + recoverState: recoverState ? recoverState : "0", }; } - - private isSuccess(statusWord: Uint8Array) { - if (statusWord.length !== 2) { - return false; - } - return statusWord[0] === 0x90 && statusWord[1] === 0x00; - } } diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts new file mode 100644 index 000000000..8ee94dbaf --- /dev/null +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts @@ -0,0 +1,64 @@ +import { Left } from "purify-ts"; + +import { Command } from "@api/command/Command"; +import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; +import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { SessionService } from "@internal/device-session/service/SessionService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +import { + SendCommandUseCase, + // SendCommandUseCaseArgs, +} from "./SendCommandUseCase"; + +let logger: LoggerPublisherService; +let sessionService: SessionService; +const fakeSessionId = "fakeSessionId"; +let command: Command; + +describe("SendCommandUseCase", () => { + beforeEach(() => { + logger = new DefaultLoggerPublisherService([], "send-command-use-case"); + sessionService = new DefaultSessionService(() => logger); + command = { + getApdu: jest.fn(), + parseResponse: jest.fn(), + }; + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + it("should send a command to a connected device", async () => { + const session = sessionStubBuilder(); + sessionService.addSession(session); + const useCase = new SendCommandUseCase(sessionService, () => logger); + + jest + .spyOn(session, "getCommand") + .mockReturnValue(async () => Promise.resolve({ status: "success" })); + + const response = await useCase.execute({ + sessionId: fakeSessionId, + command, + }); + + expect(response).toStrictEqual({ status: "success" }); + }); + + it("should throw an error if the session is not found", async () => { + const useCase = new SendCommandUseCase(sessionService, () => logger); + jest + .spyOn(sessionService, "getSessionById") + .mockReturnValue(Left({ _tag: "DeviceSessionNotFound" })); + + const res = useCase.execute({ + sessionId: fakeSessionId, + command, + }); + + await expect(res).rejects.toMatchObject({ _tag: "DeviceSessionNotFound" }); + }); +}); diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.ts index e9eb94247..686424350 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.ts @@ -38,8 +38,9 @@ export class SendCommandUseCase { return deviceSession.caseOf({ // Case device session found Right: async (session) => { + const deviceModelId = session.connectedDevice.deviceModel.id; const action = session.getCommand(command); - const response = await action(params); + const response = await action(deviceModelId, params); return response; }, // Case device session not found diff --git a/packages/core/src/api/command/utils/CommandUtils.test.ts b/packages/core/src/api/command/utils/CommandUtils.test.ts new file mode 100644 index 000000000..e640b83bf --- /dev/null +++ b/packages/core/src/api/command/utils/CommandUtils.test.ts @@ -0,0 +1,34 @@ +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; + +import { CommandUtils } from "./CommandUtils"; + +describe("CommandUtils", () => { + describe("static isSuccessResponse", () => { + it("should return true if the status code is 0x9000", () => { + const response = new ApduResponse({ + statusCode: Uint8Array.from([0x90, 0x00]), + data: Uint8Array.from([]), + }); + + expect(CommandUtils.isSuccessResponse(response)).toBe(true); + }); + + it("should return false if the status code is not 0x9000", () => { + const response = new ApduResponse({ + statusCode: Uint8Array.from([0x6e, 0x80]), + data: Uint8Array.from([]), + }); + + expect(CommandUtils.isSuccessResponse(response)).toBe(false); + }); + + it("should return false if the status code is not 2 bytes long", () => { + const response = new ApduResponse({ + statusCode: Uint8Array.from([0x90]), + data: Uint8Array.from([]), + }); + + expect(CommandUtils.isSuccessResponse(response)).toBe(false); + }); + }); +}); diff --git a/packages/core/src/api/command/utils/CommandUtils.ts b/packages/core/src/api/command/utils/CommandUtils.ts new file mode 100644 index 000000000..a4a1bd5d2 --- /dev/null +++ b/packages/core/src/api/command/utils/CommandUtils.ts @@ -0,0 +1,11 @@ +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; + +export class CommandUtils { + static isSuccessResponse({ statusCode }: ApduResponse) { + if (statusCode.length !== 2) { + return false; + } + + return statusCode[0] === 0x90 && statusCode[1] === 0x00; + } +} diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index b43a473b4..4fb4d109e 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -1,14 +1,11 @@ import { v4 as uuidv4 } from "uuid"; import { Command } from "@api/command/Command"; +import { DeviceModelId } from "@api/types"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; export type SessionId = string; -export type ExecuteCommandFn = ( - command: Command, -) => (params?: Params) => Promise; - export type SessionConstructorArgs = { connectedDevice: InternalConnectedDevice; id?: SessionId; @@ -34,12 +31,12 @@ export class Session { return this._connectedDevice; } - sendApdu(apdu: Uint8Array) { - return this._connectedDevice.sendApdu(apdu); + sendApdu(rawApdu: Uint8Array) { + return this._connectedDevice.sendApdu(rawApdu); } getCommand(command: Command) { - return async (params?: Params): Promise => { + return async (deviceModel: DeviceModelId, params?: Params): Promise => { const apdu = command.getApdu(params); const response = await this.sendApdu(apdu.getRawApdu()); @@ -47,7 +44,7 @@ export class Session { Left: (err) => { throw err; }, - Right: (r) => command.parseResponse(r), + Right: (r) => command.parseResponse(r, deviceModel), }); }; } From b37b77b6bbf14a612208c467cbb451f6e1645388 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 23 Apr 2024 11:37:25 +0200 Subject: [PATCH 188/253] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20(re?= =?UTF-8?q?pository):=20Finish=20proto=20setup=20on=20repository?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../setup-toolchain-composite/action.yml | 10 +- .github/workflows/pull_request.yml | 6 +- .prototools | 3 + package.json | 1 - pnpm-lock.yaml | 10841 +++++++++------- 5 files changed, 6062 insertions(+), 4799 deletions(-) create mode 100644 .prototools diff --git a/.github/actions/setup-toolchain-composite/action.yml b/.github/actions/setup-toolchain-composite/action.yml index c1fc106a5..66a25ab60 100644 --- a/.github/actions/setup-toolchain-composite/action.yml +++ b/.github/actions/setup-toolchain-composite/action.yml @@ -4,13 +4,11 @@ description: "Composite job to setup the CI tools for Device SDK" runs: using: "composite" steps: - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 + - uses: moonrepo/setup-toolchain@v0 - - uses: pnpm/action-setup@v3 - name: Install pnpm + - name: Install toolchain + shell: bash + run: proto use - name: Get pnpm store directory shell: bash diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 3c17ebefc..7d01a6681 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -13,7 +13,7 @@ concurrency: jobs: auto-assign: name: Auto assign - runs-on: [ubuntu-latest] + runs-on: ubuntu-latest steps: - uses: toshimaru/auto-author-assign@v2.1.0 @@ -37,7 +37,7 @@ jobs: health-check: name: Run health check needs: [danger] - runs-on: [device-sdk-4xlarge-linux] + runs-on: device-sdk-4xlarge-linux steps: - uses: actions/checkout@v4 @@ -49,7 +49,7 @@ jobs: unit-tests: name: Run unit tests needs: [danger] - runs-on: [device-sdk-4xlarge-linux] + runs-on: device-sdk-4xlarge-linux steps: - uses: actions/checkout@v4 diff --git a/.prototools b/.prototools new file mode 100644 index 000000000..989891d97 --- /dev/null +++ b/.prototools @@ -0,0 +1,3 @@ +node = "20.12.2" +npm = "10.5.2" +pnpm = "9.0.5" diff --git a/package.json b/package.json index a36e8abdb..2c64cfcd0 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ "typescript": "^5.4.4", "zx": "^8.0.1" }, - "packageManager": "pnpm@8.15.6", "engines": { "node": ">=18" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eca4e7a59..275383a2b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -277,32 +277,4861 @@ importers: packages: - /@aashutoshrathi/word-wrap@1.2.6: + '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - dev: true - /@ampproject/remapping@2.3.0: + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.24.2': + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.23.5': + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.4': + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + engines: {node: '>=6.9.0'} + + '@babel/eslint-parser@7.24.1': + resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 + + '@babel/generator@7.24.4': + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.22.5': + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.23.6': + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-environment-visitor@7.22.20': + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.23.0': + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.22.5': + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.22.15': + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.23.3': + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.22.5': + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-simple-access@7.22.5': + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.22.6': + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.1': + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.20': + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.23.5': + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.24.4': + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.2': + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.24.4': + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.23.3': + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.23.3': + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.24.4': + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.24.0': + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.1': + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.0': + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@changesets/apply-release-plan@7.0.0': + resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} + + '@changesets/assemble-release-plan@6.0.0': + resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} + + '@changesets/changelog-git@0.2.0': + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + + '@changesets/changelog-github@0.5.0': + resolution: {integrity: sha512-zoeq2LJJVcPJcIotHRJEEA2qCqX0AQIeFE+L21L8sRLPVqDhSXY8ZWAt2sohtBpFZkBwu+LUwMSKRr2lMy3LJA==} + + '@changesets/cli@2.27.1': + resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} + hasBin: true + + '@changesets/config@3.0.0': + resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.0.0': + resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} + + '@changesets/get-github-info@0.6.0': + resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} + + '@changesets/get-release-plan@4.0.0': + resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.0': + resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + + '@changesets/logger@0.1.0': + resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + + '@changesets/parse@0.4.0': + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + + '@changesets/pre@2.0.0': + resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + + '@changesets/read@0.6.0': + resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.0.0': + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + + '@changesets/write@0.3.0': + resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@emotion/babel-plugin@11.11.0': + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + + '@emotion/cache@11.11.0': + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + + '@emotion/hash@0.9.1': + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + + '@emotion/is-prop-valid@1.2.1': + resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} + + '@emotion/memoize@0.8.1': + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + + '@emotion/react@11.11.3': + resolution: {integrity: sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.1.3': + resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} + + '@emotion/sheet@1.2.2': + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} + + '@emotion/stylis@0.8.5': + resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} + + '@emotion/unitless@0.7.5': + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + + '@emotion/unitless@0.8.1': + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + + '@emotion/use-insertion-effect-with-fallbacks@1.0.1': + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.2.1': + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + + '@emotion/weak-memoize@0.3.1': + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.0': + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/eslintrc@3.0.2': + resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@9.0.0': + resolution: {integrity: sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@0.3.1': + resolution: {integrity: sha512-ensKY7Ub59u16qsVIFEo2hwTCqZ/r9oZZFh51ivcLGHfUwTn8l1Xzng8RJUe91H/UP8PeqeBronAGx0qmzwk2g==} + + '@floating-ui/core@1.5.3': + resolution: {integrity: sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==} + + '@floating-ui/dom@0.1.10': + resolution: {integrity: sha512-4kAVoogvQm2N0XE0G6APQJuCNuErjOfPW8Ux7DFxh8+AfugWflwVJ5LDlHOwrwut7z/30NUvdtHzQ3zSip4EzQ==} + + '@floating-ui/dom@1.5.4': + resolution: {integrity: sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==} + + '@floating-ui/react-dom@0.4.3': + resolution: {integrity: sha512-ZL88ryd9p6sFh9jIC/+05JZoNsogcq6U09cygQjiy757QtQqxIVLQwFag+BAWWYqpNEMO0S60fkqmh8KIAV4oA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.1': + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + + '@gitbeaker/core@35.8.1': + resolution: {integrity: sha512-KBrDykVKSmU9Q9Gly8KeHOgdc0lZSa435srECxuO0FGqqBcUQ82hPqUc13YFkkdOI9T1JRA3qSFajg8ds0mZKA==} + engines: {node: '>=14.2.0'} + + '@gitbeaker/node@35.8.1': + resolution: {integrity: sha512-g6rX853y61qNhzq9cWtxIEoe2KDeFBtXAeWMGWJnc3nz3WRump2pIICvJqw/yobLZqmTNt+ea6w3/n92Mnbn3g==} + engines: {node: '>=14.2.0'} + deprecated: Please use its successor @gitbeaker/rest + + '@gitbeaker/requester-utils@35.8.1': + resolution: {integrity: sha512-MFzdH+Z6eJaCZA5ruWsyvm6SXRyrQHjYVR6aY8POFraIy7ceIHOprWCs1R+0ydDZ8KtBnd8OTHjlJ0sLtSFJCg==} + engines: {node: '>=14.2.0'} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/config-array@0.12.3': + resolution: {integrity: sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@ledgerhq/crypto-icons-ui@1.1.0': + resolution: {integrity: sha512-llccdOI5ec+2pD+eKWd7vvOQTE9LYfTdoqieX3qQ6hmNS4V/Bt3fu2mE7fJNy9JvHY9ajRXAK3c8Q2146rZiSg==} + peerDependencies: + '@types/react': '*' + react: '*' + styled-components: '*' + styled-system: '*' + peerDependenciesMeta: + '@types/react': + optional: true + + '@ledgerhq/icons-ui@0.6.3': + resolution: {integrity: sha512-CcYjNhSESHZPx39f9cnqWNvw6AGXxaGPmVWYfOgdcAtR9iWPw+XDiJ2czTa+taBY1Q1b4lyiKMy3mOGdKAj+7w==} + peerDependencies: + '@types/react': '*' + react: '*' + styled-components: '*' + styled-system: '*' + peerDependenciesMeta: + '@types/react': + optional: true + + '@ledgerhq/react-ui@0.14.16': + resolution: {integrity: sha512-JuQasWXkGdfM1/Gk0eNKUt065vdH3lfN4c5qzC3v6XgWzFl7E+gSD8jhOq9r0GPJBxFkxVD0lGgGUWqdJF8lPg==} + peerDependencies: + '@types/react': '*' + react: '>=17.0.2' + react-dom: '>=17.0.2' + styled-components: ^5.3.3 + peerDependenciesMeta: + '@types/react': + optional: true + + '@ledgerhq/ui-shared@0.2.1': + resolution: {integrity: sha512-mPvo78REWxhYTmkFI96ryCOAyZTV42f+l55AnuoeJ2tGn5nN7bmkOUIzZ4MJOx5VvGlWcvtY/+2dA0yEelCs9w==} + + '@ljharb/through@2.3.13': + resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} + engines: {node: '>= 0.4'} + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@microsoft/tsdoc-config@0.16.2': + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + + '@microsoft/tsdoc@0.14.2': + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + + '@next/env@14.1.4': + resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} + + '@next/eslint-plugin-next@14.1.4': + resolution: {integrity: sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==} + + '@next/swc-darwin-arm64@14.1.4': + resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@14.1.4': + resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@14.1.4': + resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@14.1.4': + resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@14.1.4': + resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@14.1.4': + resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@14.1.4': + resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-ia32-msvc@14.1.4': + resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@next/swc-win32-x64-msvc@14.1.4': + resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@octokit/auth-token@2.5.0': + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + + '@octokit/core@3.6.0': + resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + + '@octokit/endpoint@6.0.12': + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + + '@octokit/graphql@4.8.0': + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + + '@octokit/openapi-types@12.11.0': + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + + '@octokit/plugin-paginate-rest@2.21.3': + resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} + peerDependencies: + '@octokit/core': '>=2' + + '@octokit/plugin-request-log@1.0.4': + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/plugin-rest-endpoint-methods@5.16.2': + resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/request-error@2.1.0': + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + + '@octokit/request@5.6.3': + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + + '@octokit/rest@18.12.0': + resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} + + '@octokit/types@6.41.0': + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.2.2': + resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} + engines: {node: '>=12'} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@rollup/plugin-commonjs@24.0.0': + resolution: {integrity: sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.68.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rushstack/eslint-patch@1.10.1': + resolution: {integrity: sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==} + + '@sentry-internal/feedback@7.109.0': + resolution: {integrity: sha512-EL7N++poxvJP9rYvh6vSu24tsKkOveNCcCj4IM7+irWPjsuD2GLYYlhp/A/Mtt9l7iqO4plvtiQU5HGk7smcTQ==} + engines: {node: '>=12'} + + '@sentry-internal/replay-canvas@7.109.0': + resolution: {integrity: sha512-Lh/K60kmloR6lkPUcQP0iamw7B/MdEUEx/ImAx4tUSMrLj+IoUEcq/ECgnnVyQkJq59+8nPEKrVLt7x6PUPEjw==} + engines: {node: '>=12'} + + '@sentry-internal/tracing@7.109.0': + resolution: {integrity: sha512-PzK/joC5tCuh2R/PRh+7dp+uuZl7pTsBIjPhVZHMTtb9+ls65WkdZJ1/uKXPouyz8NOo9Xok7aEvEo9seongyw==} + engines: {node: '>=8'} + + '@sentry/browser@7.109.0': + resolution: {integrity: sha512-yx+OFG+Ab9qUDDgV9ZDv8M9O9Mqr0fjKta/LMlWALYLjzkMvxsPlRPFj7oMBlHqOTVLDeg7lFYmsA8wyWQ8Z8g==} + engines: {node: '>=8'} + + '@sentry/cli@1.77.3': + resolution: {integrity: sha512-c3eDqcDRmy4TFz2bFU5Y6QatlpoBPPa8cxBooaS4aMQpnIdLYPF1xhyyiW0LQlDUNc3rRjNF7oN5qKoaRoMTQQ==} + engines: {node: '>= 8'} + hasBin: true + + '@sentry/core@7.109.0': + resolution: {integrity: sha512-xwD4U0IlvvlE/x/g/W1I8b4Cfb16SsCMmiEuBf6XxvAa3OfWBxKoqLifb3GyrbxMC4LbIIZCN/SvLlnGJPgszA==} + engines: {node: '>=8'} + + '@sentry/hub@6.19.7': + resolution: {integrity: sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==} + engines: {node: '>=6'} + + '@sentry/integrations@7.109.0': + resolution: {integrity: sha512-8GwPFlUu4rB1Dx3e9tc3gCMmzC5Bd5lzThhg3tMBmzCCEp7UeA4u7eUuKJ5g49vjdznPDRG2p3PcRsApFZNPSg==} + engines: {node: '>=8'} + + '@sentry/minimal@6.19.7': + resolution: {integrity: sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==} + engines: {node: '>=6'} + + '@sentry/nextjs@7.109.0': + resolution: {integrity: sha512-AT0jhMDj7N57z8+XfgEyTJBogpU64z4mQpfOsSF5uuequzo3IlVVoJcu88jdqUkaVFxBJp3aF2T4nz65OHLoeA==} + engines: {node: '>=8'} + peerDependencies: + next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 || ^14.0 + react: 16.x || 17.x || 18.x + webpack: '>= 4.0.0' + peerDependenciesMeta: + webpack: + optional: true + + '@sentry/node@7.109.0': + resolution: {integrity: sha512-tqMNAES4X/iBl1eZRCmc29p//0id01FBLEiesNo5nk6ECl6/SaGMFAEwu1gsn90h/Bjgr04slwFOS4cR45V2PQ==} + engines: {node: '>=8'} + + '@sentry/react@7.109.0': + resolution: {integrity: sha512-KqXoDh6LVhNO+FLdM5LiTGpuorFvjoBPQ4nPGIVbjeMY/KZIau3kFxR142EvCApxmD69yvS5EhMnEqlNdaQPGw==} + engines: {node: '>=8'} + peerDependencies: + react: 15.x || 16.x || 17.x || 18.x + + '@sentry/replay@7.109.0': + resolution: {integrity: sha512-hCDjbTNO7ErW/XsaBXlyHFsUhneyBUdTec1Swf98TFEfVqNsTs6q338aUcaR8dGRLbLrJ9YU9D1qKq++v5h2CA==} + engines: {node: '>=12'} + + '@sentry/types@6.19.7': + resolution: {integrity: sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==} + engines: {node: '>=6'} + + '@sentry/types@7.109.0': + resolution: {integrity: sha512-egCBnDv3YpVFoNzRLdP0soVrxVLCQ+rovREKJ1sw3rA2/MFH9WJ+DZZexsX89yeAFzy1IFsCp7/dEqudusml6g==} + engines: {node: '>=8'} + + '@sentry/utils@6.19.7': + resolution: {integrity: sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==} + engines: {node: '>=6'} + + '@sentry/utils@7.109.0': + resolution: {integrity: sha512-3RjxMOLMBwZ5VSiH84+o/3NY2An4Zldjz0EbfEQNRY9yffRiCPJSQiCJID8EoylCFOh/PAhPimBhqbtWJxX6iw==} + engines: {node: '>=8'} + + '@sentry/vercel-edge@7.109.0': + resolution: {integrity: sha512-0I+pLZPkD0vSlSLwBx9XAs17WXHimGhHIMki/YH5Y007i1iykkMItoDx//Y3PPjZiJu+deO7l4wKO2J1lJW6jg==} + engines: {node: '>=8'} + + '@sentry/webpack-plugin@1.21.0': + resolution: {integrity: sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==} + engines: {node: '>= 8'} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@sinonjs/commons@3.0.0': + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@styled-system/background@5.1.2': + resolution: {integrity: sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==} + + '@styled-system/border@5.1.5': + resolution: {integrity: sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==} + + '@styled-system/color@5.1.2': + resolution: {integrity: sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==} + + '@styled-system/core@5.1.2': + resolution: {integrity: sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==} + + '@styled-system/css@5.1.5': + resolution: {integrity: sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==} + + '@styled-system/flexbox@5.1.2': + resolution: {integrity: sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==} + + '@styled-system/grid@5.1.2': + resolution: {integrity: sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==} + + '@styled-system/layout@5.1.2': + resolution: {integrity: sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==} + + '@styled-system/position@5.1.2': + resolution: {integrity: sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==} + + '@styled-system/shadow@5.1.2': + resolution: {integrity: sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==} + + '@styled-system/space@5.1.2': + resolution: {integrity: sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==} + + '@styled-system/typography@5.1.2': + resolution: {integrity: sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==} + + '@styled-system/variant@5.1.5': + resolution: {integrity: sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==} + + '@swc/helpers@0.5.2': + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@tippyjs/react@4.2.6': + resolution: {integrity: sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@tsconfig/node10@1.0.9': + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tsconfig/recommended@1.0.6': + resolution: {integrity: sha512-0IKu9GHYF1NGTJiYgfWwqnOQSlnE9V9R7YohHNNf0/fj/SyOZWzdd06JFr0fLpg1Mqw0kGbYg8w5xdkSqLKM9g==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.4': + resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/eslint@8.56.7': + resolution: {integrity: sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/fs-extra@11.0.4': + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/hoist-non-react-statics@3.3.5': + resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.12': + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@17.0.45': + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + + '@types/node@20.12.7': + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + '@types/react-dom@18.2.24': + resolution: {integrity: sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==} + + '@types/react-transition-group@4.4.10': + resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} + + '@types/react@18.2.75': + resolution: {integrity: sha512-+DNnF7yc5y0bHkBTiLKqXFe+L4B3nvOphiMY3tuA5X10esmjqk7smyBZzbGTy2vsiy/Bnzj8yFIBL8xhRacoOg==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/styled-components@5.1.34': + resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} + + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + + '@types/w3c-web-hid@1.0.6': + resolution: {integrity: sha512-IWyssXmRDo6K7s31dxf+U+x/XUWuVsl9qUIYbJmpUHPcTv/COfBCKw/F0smI45+gPV34brjyP30BFcIsHgYWLA==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.32': + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + + '@typescript-eslint/eslint-plugin@7.6.0': + resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.6.0': + resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/scope-manager@7.5.0': + resolution: {integrity: sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/scope-manager@7.6.0': + resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/type-utils@7.6.0': + resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/types@7.5.0': + resolution: {integrity: sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/types@7.6.0': + resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@7.5.0': + resolution: {integrity: sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@7.6.0': + resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@7.5.0': + resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/utils@7.6.0': + resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/visitor-keys@7.5.0': + resolution: {integrity: sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/visitor-keys@7.6.0': + resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vercel/style-guide@6.0.0': + resolution: {integrity: sha512-tu0wFINGz91EPwaT5VjSqUwbvCY9pvLach7SPG4XyfJKPU9Vku2TFa6+AyzJ4oroGbo9fK+TQhIFHrnFl0nCdg==} + engines: {node: '>=18.18'} + peerDependencies: + '@next/eslint-plugin-next': '>=12.3.0 <15.0.0-0' + eslint: '>=8.48.0 <9' + prettier: '>=3.0.0 <4' + typescript: '>=4.8.0 <6' + peerDependenciesMeta: + '@next/eslint-plugin-next': + optional: true + eslint: + optional: true + prettier: + optional: true + typescript: + optional: true + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.1: + resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} + engines: {node: '>=0.4.0'} + + acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@6.2.0: + resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} + engines: {node: '>=14.16'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + + array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + async-retry@1.2.3: + resolution: {integrity: sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atomically@2.0.2: + resolution: {integrity: sha512-Xfmb4q5QV7uqTlVdMSTtO5eF4DCHfNOdaPyKlbFShkzeNP+3lj3yjjcbdjSmEY4+pDBKJ9g26aP+ImTe88UHoQ==} + + autoprefixer@10.4.19: + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + + axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + babel-plugin-styled-components@2.1.4: + resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} + peerDependencies: + styled-components: '>= 2' + + babel-preset-current-node-syntax@1.0.1: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + basic-ftp@5.0.4: + resolution: {integrity: sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==} + engines: {node: '>=10.0.0'} + + before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + boxen@7.1.1: + resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} + engines: {node: '>=14.16'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + breakword@1.0.6: + resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + + browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@3.0.0: + resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + + camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + + caniuse-lite@1.0.30001607: + resolution: {integrity: sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==} + + caniuse-lite@1.0.30001608: + resolution: {integrity: sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==} + + chalk@2.3.0: + resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} + engines: {node: '>=4'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + change-case@3.1.0: + resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chart.js@3.9.1: + resolution: {integrity: sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==} + + chartjs-adapter-moment@1.0.1: + resolution: {integrity: sha512-Uz+nTX/GxocuqXpGylxK19YG4R3OSVf8326D+HwSTsNw1LgzyIGRo+Qujwro1wy6X+soNSnfj5t2vZ+r6EaDmA==} + peerDependencies: + chart.js: '>=3.0.0' + moment: ^2.10.2 + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + ci-info@4.0.0: + resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + engines: {node: '>=8'} + + cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} + engines: {node: ^14.13.0 || >=16.0.0} + hasBin: true + + conf@12.0.0: + resolution: {integrity: sha512-fIWyWUXrJ45cHCIQX+Ck1hrZDIf/9DR0P0Zewn3uNht28hbt5OfGUq8rRWsxi96pZWPyBEd0eY9ama01JTaknA==} + engines: {node: '>=18'} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + configstore@6.0.0: + resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} + engines: {node: '>=12'} + + constant-case@2.0.0: + resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-js-compat@3.36.1: + resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + + core-js@3.36.0: + resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + + css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + + css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + csv-generate@3.4.3: + resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + + csv-parse@4.16.3: + resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + + csv-stringify@5.6.5: + resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + + csv@5.5.3: + resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} + engines: {node: '>= 0.1.90'} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + danger@11.3.1: + resolution: {integrity: sha512-+slkGnbf0czY7g4LSuYpYkKJgFrb9YIXFJvV5JAuLLF39CXLlUw0iebgeL3ASK1t6RDb8xe+Rk2F5ilh2Hdv2w==} + engines: {node: '>=14.13.1'} + hasBin: true + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + dataloader@1.4.0: + resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + + date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + + debounce-fn@5.1.2: + resolution: {integrity: sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A==} + engines: {node: '>=12'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + degit@2.8.4: + resolution: {integrity: sha512-vqYuzmSA5I50J882jd+AbAhQtgK6bdKUJIex1JNfEUPENCgYsxugzKVZlFyMwV4i06MmnV47/Iqi5Io86zf3Ng==} + engines: {node: '>=8.0.0'} + hasBin: true + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dot-case@2.1.1: + resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} + + dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + + dot-prop@8.0.2: + resolution: {integrity: sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==} + engines: {node: '>=16'} + + dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + + dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.4.729: + resolution: {integrity: sha512-bx7+5Saea/qu14kmPTDHQxkp2UnziG3iajUQu3BxFvCOnpAJdDbMV4rSl+EqFDkkpNNVUFlR1kDfpL59xfy1HA==} + + embla-carousel-react@8.0.0-rc17: + resolution: {integrity: sha512-x4aFprwFB+PQO9EsHHZsrDxARb0uYNBYn9mr5oDFdBdPez4M8G1r5yidWbUcT9pNUc8AQXC9sGzlfauBfBxVOw==} + peerDependencies: + react: ^16.8.0 || ^17.0.1 || ^18.0.0 + + embla-carousel-reactive-utils@8.0.0-rc17: + resolution: {integrity: sha512-eluEOK/u5HdjYaTLC4bUG3iTCnyX7RsYix3il0aH4ZECOKa5fS+pVK2vrM17Mgw6C5Hyjcr3r3lfJtGerVzVsQ==} + peerDependencies: + embla-carousel: 8.0.0-rc17 + + embla-carousel@8.0.0-rc17: + resolution: {integrity: sha512-evF49b88VOitvqFtlvhvKVSu96Y8A+QSFdhok87Bfm8R7OYuk95FT+o8+M1GQLi/EhGDUlT193HTVAR0Wt2neQ==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} + engines: {node: '>=10.13.0'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.0.18: + resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-next@14.1.4: + resolution: {integrity: sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-config-turbo@1.13.2: + resolution: {integrity: sha512-TzvsMwNJx/P4JYw79iFqbyQApnyT050gW7dBxnNeNVl3pVMnT2rwaFo9Q3Hc49Tp5NANxEwYN9RStF50P/IwGA==} + peerDependencies: + eslint: '>6.6.0' + + eslint-import-resolver-alias@1.1.2: + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.6.1: + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + + eslint-module-utils@2.8.1: + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-eslint-comments@3.2.0: + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + + eslint-plugin-import@2.29.1: + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jest@27.9.0: + resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + + eslint-plugin-jsx-a11y@6.8.0: + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-plugin-playwright@1.5.4: + resolution: {integrity: sha512-J38Wy3Vc2f9y73J+KRmgXgbYI8TZ3zbz6qBbTj3PhpFndUS572jZ7kqQ3rJ9si5BaMHT7lmZzraO+3UjwIDV4Q==} + engines: {node: '>=16.6.0'} + peerDependencies: + eslint: '>=8.40.0' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + + eslint-plugin-react-hooks@4.6.0: + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react@7.34.1: + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-plugin-simple-import-sort@12.0.0: + resolution: {integrity: sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==} + peerDependencies: + eslint: '>=5.0.0' + + eslint-plugin-testing-library@6.2.0: + resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + + eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + + eslint-plugin-turbo@1.13.2: + resolution: {integrity: sha512-QNaihF0hTRjfOBd1SLHrftm8V3pOU35CNS/C0/Z6qY1xxdL1PSv4IctEIldSMX7/A1jOPYwMPO7wYwPXgjgp/g==} + peerDependencies: + eslint: '>6.6.0' + + eslint-plugin-unicorn@51.0.1: + resolution: {integrity: sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.56.0' + + eslint-plugin-vitest@0.3.26: + resolution: {integrity: sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg==} + engines: {node: ^18.0.0 || >= 20.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': '*' + eslint: '>=8.0.0' + vitest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + vitest: + optional: true + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-scope@8.0.1: + resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + eslint@9.0.0: + resolution: {integrity: sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + + espree@10.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-patch@3.1.1: + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + figures@5.0.0: + resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} + engines: {node: '>=14'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + front-matter@4.0.2: + resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} + + fs-exists-sync@0.1.0: + resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==} + engines: {node: '>=0.10.0'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + fuse.js@7.0.0: + resolution: {integrity: sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==} + engines: {node: '>=10'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stdin@6.0.0: + resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} + engines: {node: '>=4'} + + get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + + get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} + + git-config-path@1.0.1: + resolution: {integrity: sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==} + engines: {node: '>=0.10.0'} + + git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + + gitmoji-cli@9.2.0: + resolution: {integrity: sha512-U/uKNO+Z4tcFdP5Ip2FBihsGgTvyX8RJVx4twgnv6JB+MKcvqjIE2RiJvxE2uu7dq4wafTzGDpHL3KDiJV1hxQ==} + engines: {node: '>=18'} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + + global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@2.0.0: + resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} + engines: {node: '>=0.10.0'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + header-case@1.0.1: + resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-proxy-agent@7.0.1: + resolution: {integrity: sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==} + engines: {node: '>= 14'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.3: + resolution: {integrity: sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==} + engines: {node: '>= 14'} + + human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + hygen@6.2.11: + resolution: {integrity: sha512-t6/zLI2XozP5gvV74nnl8LZSbwpVNFUkUs/O9DwuOdiiBbws5k4AQNVwKZ9FGzcKjdJ5EBBYkVzlcUHkLyY0FQ==} + hasBin: true + + hyperlinker@1.0.0: + resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} + engines: {node: '>=4'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-walk@4.0.1: + resolution: {integrity: sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==} + engines: {node: '>=10'} + + ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + + import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflection@1.13.4: + resolution: {integrity: sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==} + engines: {'0': node >= 0.4.0} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + + inquirer-autocomplete-prompt@3.0.1: + resolution: {integrity: sha512-DQBXwX2fVQPVUzu4v4lGgtNgyjcX2+rTyphb2MeSOQh3xUayKAfHAF4y0KgsMi06m6ZiR3xIOdzMZMfQgX2m9w==} + engines: {node: '>=16'} + peerDependencies: + inquirer: ^9.1.0 + + inquirer@9.2.17: + resolution: {integrity: sha512-Vr3Ia2ud5sGnioURkE69endl4SkeJcMzTF6SosKcX5GALJfId7C+JvO5ZZb6y1LOXnEofCPbwzoQ1q0e8Gaduw==} + engines: {node: '>=18'} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + inversify-logger-middleware@3.1.0: + resolution: {integrity: sha512-jKwwuQ3cDwCasgSdgUyF3DTlIvcfAVqcs3ViMXrKj5L7AqVP5hd2dnrHr3v8XZf984t6fsj+1Wic43A5WDtkEA==} + + inversify@6.0.2: + resolution: {integrity: sha512-i9m8j/7YIv4mDuYXUAcrpKPSaju/CIly9AHK5jvCBeoiM/2KEsuCQTTP+rzSWWpLYWRukdXFSl6ZTk2/uumbiA==} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-in-ci@0.1.0: + resolution: {integrity: sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==} + engines: {node: '>=18'} + hasBin: true + + is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-lower-case@1.1.3: + resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} + + is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-npm@6.0.0: + resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.0.0: + resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} + engines: {node: '>=18'} + + is-upper-case@1.1.2: + resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} + + is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema-typed@8.0.1: + resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + latest-version@7.0.0: + resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} + engines: {node: '>=14.16'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + li@1.3.0: + resolution: {integrity: sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw==} + + lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + + localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.find@4.6.0: + resolution: {integrity: sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isobject@3.0.2: + resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.keys@4.2.0: + resolution: {integrity: sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ==} + + lodash.mapvalues@4.6.0: + resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lower-case-first@1.0.2: + resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} + + lower-case@1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + + lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + magic-string@0.27.0: + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + memfs-or-file-map-to-github-branch@1.2.1: + resolution: {integrity: sha512-I/hQzJ2a/pCGR8fkSQ9l5Yx+FQ4e7X6blNHyWBm2ojeFLT3GVzGkTj7xnyWpdclrr7Nq4dmx3xrvu70m3ypzAQ==} + + memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + + meow@6.1.1: + resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + engines: {node: '>=8'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + + mixme@0.5.10: + resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} + engines: {node: '>= 8.0.0'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mylas@2.1.13: + resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==} + engines: {node: '>=12.0.0'} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + next@14.1.4: + resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + + no-case@2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + + node-cleanup@2.1.2: + resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + normalize-url@8.0.0: + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} + + object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + ora@8.0.1: + resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} + engines: {node: '>=18'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + override-require@1.1.1: + resolution: {integrity: sha512-eoJ9YWxFcXbrn2U8FKT6RV+/Kj7fiGAB1VvHzbYKt8xM5ZuKZgCGvnHzDxmreEjcBH28ejg5MiOH4iyY1mQnkg==} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + pac-proxy-agent@7.0.1: + resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + package-json@8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} + + param-case@2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-diff@0.7.1: + resolution: {integrity: sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg==} + + parse-git-config@2.0.3: + resolution: {integrity: sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A==} + engines: {node: '>=6'} + + parse-github-url@1.0.2: + resolution: {integrity: sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==} + engines: {node: '>=0.10.0'} + hasBin: true + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-link-header@2.0.0: + resolution: {integrity: sha512-xjU87V0VyHZybn2RrCX5TIFGxTVZE6zqqZWMPlIKiSKuWh/X5WZdt+w1Ki1nXB+8L/KtL+nZ4iq+sfI6MrhhMw==} + + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + + pascal-case@2.0.1: + resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} + + path-case@2.1.1: + resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pinpoint@1.1.0: + resolution: {integrity: sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg==} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + plimit-lit@1.6.1: + resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==} + engines: {node: '>=12'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + + preferred-pm@3.1.2: + resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} + engines: {node: '>=10'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-packagejson@2.4.14: + resolution: {integrity: sha512-sli+gV5tW7uxvzDZQscaBtSfbyAW2ToL6n/HGt51PipwX9vI7M54vefG0mKSfklVkT29TNGO6Mo6g8c6Z79gmw==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prettyjson@1.2.5: + resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==} + hasBin: true + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} + + pure-rand@6.0.4: + resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + + purify-ts@2.0.3: + resolution: {integrity: sha512-RiPOlX4L+eggnbEdwGV34t7iRSPK5d37nKPZXSu8G5mTUhxbEjPpThRFuEV4GL/T6zEJQ+ZeiuNoBk61VJvszg==} + + qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + + query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + + queue-lit@1.5.2: + resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==} + engines: {node: '>=12'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-chartjs-2@3.3.0: + resolution: {integrity: sha512-4Mt0SR2aiUbWi/4762odRBYSnbNKSs4HWc0o3IW43py5bMfmfpeZU95w6mbvtuLZH/M3GsPJMU8DvDc+5U9blQ==} + peerDependencies: + chart.js: ^3.5.0 + react: ^16.8.0 || ^17.0.0 + + react-dom@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + react-select@5.8.0: + resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + react-spring@8.0.27: + resolution: {integrity: sha512-nDpWBe3ZVezukNRandTeLSPcwwTMjNVu1IDq9qA/AMiUqHuRN4BeSWvKr3eIxxg1vtiYiOLy4FqdfCP5IoP77g==} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react-window@1.8.10: + resolution: {integrity: sha512-Y0Cx+dnU6NLa5/EvoHukUD0BklJ8qITCtVEPY1C/nL8wwoZ0b5aEw8Ff1dOVHw7fCzMt55XfJDd8S8W8LCaUCg==} + engines: {node: '>8.0.0'} + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + + react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readline-sync@1.4.10: + resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} + engines: {node: '>= 0.8.0'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + registry-auth-token@5.0.2: + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + + resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + rimraf@5.0.5: + resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} + engines: {node: '>=14'} + hasBin: true + + rollup@2.78.0: + resolution: {integrity: sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg==} + engines: {node: '>=10.0.0'} + hasBin: true + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + + semver-diff@4.0.0: + resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} + engines: {node: '>=12'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + + sentence-case@2.1.1: + resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + smartwrap@2.0.2: + resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} + engines: {node: '>=6'} + hasBin: true + + snake-case@2.1.0: + resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} + + socks-proxy-agent@8.0.2: + resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} + engines: {node: '>= 14'} + + socks@2.7.3: + resolution: {integrity: sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + deprecated: please use 2.7.4 or 2.8.1 to fix package-lock issue + + sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + + sort-package-json@2.10.0: + resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} + hasBin: true + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} + + spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + + split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + stream-transform@2.1.3: + resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.0.0: + resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} + engines: {node: '>=18'} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + + styled-components@5.3.11: + resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} + engines: {node: '>=10'} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' + react-is: '>= 16.8.0' + + styled-jsx@5.1.1: + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + styled-system@5.1.5: + resolution: {integrity: sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + supports-color@4.5.0: + resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} + engines: {node: '>=4'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-hyperlinks@1.0.1: + resolution: {integrity: sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==} + engines: {node: '>=4'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swap-case@1.1.2: + resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} + + synckit@0.9.0: + resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} + engines: {node: ^14.18.0 || >=16.0.0} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + tippy.js@6.3.7: + resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + + title-case@2.1.1: + resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-jest@29.1.2: + resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} + engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsc-alias@1.8.8: + resolution: {integrity: sha512-OYUOd2wl0H858NvABWr/BoSKNERw3N9GTi3rHPK8Iv4O1UyUXIrTTOAZNHsjlVpXFOhpJBVARI1s+rzwLivN3Q==} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + tty-table@4.2.3: + resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} + engines: {node: '>=8.0.0'} + hasBin: true + + turbo-darwin-64@1.13.2: + resolution: {integrity: sha512-CCSuD8CfmtncpohCuIgq7eAzUas0IwSbHfI8/Q3vKObTdXyN8vAo01gwqXjDGpzG9bTEVedD0GmLbD23dR0MLA==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@1.13.2: + resolution: {integrity: sha512-0HySm06/D2N91rJJ89FbiI/AodmY8B3WDSFTVEpu2+8spUw7hOJ8okWOT0e5iGlyayUP9gr31eOeL3VFZkpfCw==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@1.13.2: + resolution: {integrity: sha512-7HnibgbqZrjn4lcfIouzlPu8ZHSBtURG4c7Bedu7WJUDeZo+RE1crlrQm8wuwO54S0siYqUqo7GNHxu4IXbioQ==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@1.13.2: + resolution: {integrity: sha512-sUq4dbpk6SNKg/Hkwn256Vj2AEYSQdG96repio894h5/LEfauIK2QYiC/xxAeW3WBMc6BngmvNyURIg7ltrePg==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@1.13.2: + resolution: {integrity: sha512-DqzhcrciWq3dpzllJR2VVIyOhSlXYCo4mNEWl98DJ3FZ08PEzcI3ceudlH6F0t/nIcfSItK1bDP39cs7YoZHEA==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@1.13.2: + resolution: {integrity: sha512-WnPMrwfCXxK69CdDfS1/j2DlzcKxSmycgDAqV0XCYpK/812KB0KlvsVAt5PjEbZGXkY88pCJ1BLZHAjF5FcbqA==} + cpu: [arm64] + os: [win32] + + turbo@1.13.2: + resolution: {integrity: sha512-rX/d9f4MgRT3yK6cERPAkfavIxbpBZowDQpgvkYwGMGDQ0Nvw1nc0NVjruE76GrzXQqoxR1UpnmEP54vBARFHQ==} + hasBin: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + typescript@5.4.4: + resolution: {integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==} + engines: {node: '>=14.17'} + hasBin: true + + uint8array-extras@0.3.0: + resolution: {integrity: sha512-erJsJwQ0tKdwuqI0359U8ijkFmfiTcq25JvvzRVc1VP+2son1NJRXhxcAKJmAW3ajM8JSGAfsAXye8g4s+znxA==} + engines: {node: '>=18'} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + + universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + update-browserslist-db@1.0.13: + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-notifier@7.0.0: + resolution: {integrity: sha512-Hv25Bh+eAbOLlsjJreVPOs4vd51rrtCrmhyOJtbpAojro34jS4KQaEp4/EvlHJX7jSO42VvEFpkastVyXyIsdQ==} + engines: {node: '>=18'} + + upper-case-first@1.1.2: + resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} + + upper-case@1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-isomorphic-layout-effect@1.1.2: + resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + engines: {node: '>=10.12.0'} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validator@13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + when-exit@2.1.2: + resolution: {integrity: sha512-u9J+toaf3CCxCAzM/484qNAxQE75rFdVgiFEEV8Xps2gzYhf0tx73s1WXDQhkwV17E3MxRMz40m7Ekd2/121Lg==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + + which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + xcase@2.0.1: + resolution: {integrity: sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==} + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zx@8.0.1: + resolution: {integrity: sha512-Y+ITW1GQjADk7qgrbhnukMgoNsJmlyx53cUQ6/6NXU+BMBdCbTc6flTOHUctmzKvPjTmdwaddzJY/dbLie9sQg==} + engines: {node: '>= 16.0.0'} + hasBin: true + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} - engines: {node: '>=6.9.0'} + '@babel/code-frame@7.24.2': dependencies: '@babel/highlight': 7.24.2 picocolors: 1.0.0 - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} + '@babel/compat-data@7.23.5': {} - /@babel/core@7.24.4: - resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} - engines: {node: '>=6.9.0'} + '@babel/core@7.24.4': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.2 @@ -322,39 +5151,26 @@ packages: transitivePeerDependencies: - supports-color - /@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@9.0.0): - resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 + '@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@9.0.0)': dependencies: '@babel/core': 7.24.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 9.0.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - dev: true - /@babel/generator@7.24.4: - resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} - engines: {node: '>=6.9.0'} + '@babel/generator@7.24.4': dependencies: '@babel/types': 7.24.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.22.5': dependencies: '@babel/types': 7.24.0 - dev: false - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.23.6': dependencies: '@babel/compat-data': 7.23.5 '@babel/helper-validator-option': 7.23.5 @@ -362,34 +5178,22 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} + '@babel/helper-environment-visitor@7.22.20': {} - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.23.0': dependencies: '@babel/template': 7.24.0 '@babel/types': 7.24.0 - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.22.5': dependencies: '@babel/types': 7.24.0 - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.22.15': dependencies: '@babel/types': 7.24.0 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 @@ -398,37 +5202,23 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.22.5': {} - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.22.5': dependencies: '@babel/types': 7.24.0 - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.22.6': dependencies: '@babel/types': 7.24.0 - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.24.1': {} - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': {} - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.23.5': {} - /@babel/helpers@7.24.4: - resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} - engines: {node: '>=6.9.0'} + '@babel/helpers@7.24.4': dependencies: '@babel/template': 7.24.0 '@babel/traverse': 7.24.1(supports-color@5.5.0) @@ -436,167 +5226,98 @@ packages: transitivePeerDependencies: - supports-color - /@babel/highlight@7.24.2: - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} - engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.2': dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - /@babel/parser@7.24.4: - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/parser@7.24.4': dependencies: '@babel/types': 7.24.0 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.4): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.4): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/runtime@7.24.4: - resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} - engines: {node: '>=6.9.0'} + '@babel/runtime@7.24.4': dependencies: regenerator-runtime: 0.14.1 - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} - engines: {node: '>=6.9.0'} + '@babel/template@7.24.0': dependencies: '@babel/code-frame': 7.24.2 '@babel/parser': 7.24.4 '@babel/types': 7.24.0 - /@babel/traverse@7.24.1(supports-color@5.5.0): - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} - engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.1(supports-color@5.5.0)': dependencies: '@babel/code-frame': 7.24.2 '@babel/generator': 7.24.4 @@ -611,20 +5332,15 @@ packages: transitivePeerDependencies: - supports-color - /@babel/types@7.24.0: - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} - engines: {node: '>=6.9.0'} + '@babel/types@7.24.0': dependencies: '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true + '@bcoe/v8-coverage@0.2.3': {} - /@changesets/apply-release-plan@7.0.0: - resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} + '@changesets/apply-release-plan@7.0.0': dependencies: '@babel/runtime': 7.24.4 '@changesets/config': 3.0.0 @@ -639,10 +5355,8 @@ packages: prettier: 2.8.8 resolve-from: 5.0.0 semver: 7.6.0 - dev: true - /@changesets/assemble-release-plan@6.0.0: - resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} + '@changesets/assemble-release-plan@6.0.0': dependencies: '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 @@ -650,27 +5364,20 @@ packages: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 semver: 7.6.0 - dev: true - /@changesets/changelog-git@0.2.0: - resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + '@changesets/changelog-git@0.2.0': dependencies: '@changesets/types': 6.0.0 - dev: true - /@changesets/changelog-github@0.5.0: - resolution: {integrity: sha512-zoeq2LJJVcPJcIotHRJEEA2qCqX0AQIeFE+L21L8sRLPVqDhSXY8ZWAt2sohtBpFZkBwu+LUwMSKRr2lMy3LJA==} + '@changesets/changelog-github@0.5.0': dependencies: '@changesets/get-github-info': 0.6.0 '@changesets/types': 6.0.0 dotenv: 8.6.0 transitivePeerDependencies: - encoding - dev: true - /@changesets/cli@2.27.1: - resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} - hasBin: true + '@changesets/cli@2.27.1': dependencies: '@babel/runtime': 7.24.4 '@changesets/apply-release-plan': 7.0.0 @@ -704,10 +5411,8 @@ packages: spawndamnit: 2.0.0 term-size: 2.2.1 tty-table: 4.2.3 - dev: true - /@changesets/config@3.0.0: - resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} + '@changesets/config@3.0.0': dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.0.0 @@ -716,35 +5421,27 @@ packages: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.5 - dev: true - /@changesets/errors@0.2.0: - resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + '@changesets/errors@0.2.0': dependencies: extendable-error: 0.1.7 - dev: true - /@changesets/get-dependents-graph@2.0.0: - resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} + '@changesets/get-dependents-graph@2.0.0': dependencies: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 chalk: 2.4.2 fs-extra: 7.0.1 semver: 7.6.0 - dev: true - /@changesets/get-github-info@0.6.0: - resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} + '@changesets/get-github-info@0.6.0': dependencies: dataloader: 1.4.0 node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: true - /@changesets/get-release-plan@4.0.0: - resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} + '@changesets/get-release-plan@4.0.0': dependencies: '@babel/runtime': 7.24.4 '@changesets/assemble-release-plan': 6.0.0 @@ -753,14 +5450,10 @@ packages: '@changesets/read': 0.6.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - dev: true - /@changesets/get-version-range-type@0.4.0: - resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - dev: true + '@changesets/get-version-range-type@0.4.0': {} - /@changesets/git@3.0.0: - resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + '@changesets/git@3.0.0': dependencies: '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 @@ -769,33 +5462,25 @@ packages: is-subdir: 1.2.0 micromatch: 4.0.5 spawndamnit: 2.0.0 - dev: true - /@changesets/logger@0.1.0: - resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + '@changesets/logger@0.1.0': dependencies: chalk: 2.4.2 - dev: true - /@changesets/parse@0.4.0: - resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + '@changesets/parse@0.4.0': dependencies: '@changesets/types': 6.0.0 js-yaml: 3.14.1 - dev: true - /@changesets/pre@2.0.0: - resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + '@changesets/pre@2.0.0': dependencies: '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - dev: true - /@changesets/read@0.6.0: - resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + '@changesets/read@0.6.0': dependencies: '@babel/runtime': 7.24.4 '@changesets/git': 3.0.0 @@ -805,35 +5490,24 @@ packages: chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 - dev: true - /@changesets/types@4.1.0: - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - dev: true + '@changesets/types@4.1.0': {} - /@changesets/types@6.0.0: - resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - dev: true + '@changesets/types@6.0.0': {} - /@changesets/write@0.3.0: - resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} + '@changesets/write@0.3.0': dependencies: '@babel/runtime': 7.24.4 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.8 - dev: true - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@emotion/babel-plugin@11.11.0: - resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + '@emotion/babel-plugin@11.11.0': dependencies: '@babel/helper-module-imports': 7.22.15 '@babel/runtime': 7.24.4 @@ -846,40 +5520,24 @@ packages: find-root: 1.1.0 source-map: 0.5.7 stylis: 4.2.0 - dev: false - /@emotion/cache@11.11.0: - resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + '@emotion/cache@11.11.0': dependencies: '@emotion/memoize': 0.8.1 '@emotion/sheet': 1.2.2 '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 stylis: 4.2.0 - dev: false - /@emotion/hash@0.9.1: - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - dev: false + '@emotion/hash@0.9.1': {} - /@emotion/is-prop-valid@1.2.1: - resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} + '@emotion/is-prop-valid@1.2.1': dependencies: '@emotion/memoize': 0.8.1 - dev: false - /@emotion/memoize@0.8.1: - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - dev: false + '@emotion/memoize@0.8.1': {} - /@emotion/react@11.11.3(@types/react@18.2.75)(react@18.2.0): - resolution: {integrity: sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true + '@emotion/react@11.11.3(@types/react@18.2.75)(react@18.2.0)': dependencies: '@babel/runtime': 7.24.4 '@emotion/babel-plugin': 11.11.0 @@ -891,78 +5549,44 @@ packages: '@types/react': 18.2.75 hoist-non-react-statics: 3.3.2 react: 18.2.0 - dev: false - /@emotion/serialize@1.1.3: - resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} + '@emotion/serialize@1.1.3': dependencies: '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/unitless': 0.8.1 '@emotion/utils': 1.2.1 csstype: 3.1.3 - dev: false - /@emotion/sheet@1.2.2: - resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - dev: false + '@emotion/sheet@1.2.2': {} - /@emotion/stylis@0.8.5: - resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} - dev: false + '@emotion/stylis@0.8.5': {} - /@emotion/unitless@0.7.5: - resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} - dev: false + '@emotion/unitless@0.7.5': {} - /@emotion/unitless@0.8.1: - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - dev: false + '@emotion/unitless@0.8.1': {} - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): - resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} - peerDependencies: - react: '>=16.8.0' + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0)': dependencies: react: 18.2.0 - dev: false - /@emotion/utils@1.2.1: - resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} - dev: false + '@emotion/utils@1.2.1': {} - /@emotion/weak-memoize@0.3.1: - resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - dev: false + '@emotion/weak-memoize@0.3.1': {} - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': dependencies: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@9.0.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.4.0(eslint@9.0.0)': dependencies: eslint: 9.0.0 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@eslint-community/regexpp@4.10.0': {} - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@5.5.0) @@ -975,11 +5599,8 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/eslintrc@3.0.2: - resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.0.2': dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@5.5.0) @@ -992,46 +5613,27 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/js@8.57.0': {} - /@eslint/js@9.0.0: - resolution: {integrity: sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: true + '@eslint/js@9.0.0': {} - /@floating-ui/core@0.3.1: - resolution: {integrity: sha512-ensKY7Ub59u16qsVIFEo2hwTCqZ/r9oZZFh51ivcLGHfUwTn8l1Xzng8RJUe91H/UP8PeqeBronAGx0qmzwk2g==} - dev: false + '@floating-ui/core@0.3.1': {} - /@floating-ui/core@1.5.3: - resolution: {integrity: sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==} + '@floating-ui/core@1.5.3': dependencies: '@floating-ui/utils': 0.2.1 - dev: false - /@floating-ui/dom@0.1.10: - resolution: {integrity: sha512-4kAVoogvQm2N0XE0G6APQJuCNuErjOfPW8Ux7DFxh8+AfugWflwVJ5LDlHOwrwut7z/30NUvdtHzQ3zSip4EzQ==} + '@floating-ui/dom@0.1.10': dependencies: '@floating-ui/core': 0.3.1 - dev: false - /@floating-ui/dom@1.5.4: - resolution: {integrity: sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==} + '@floating-ui/dom@1.5.4': dependencies: '@floating-ui/core': 1.5.3 '@floating-ui/utils': 0.2.1 - dev: false - /@floating-ui/react-dom@0.4.3(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ZL88ryd9p6sFh9jIC/+05JZoNsogcq6U09cygQjiy757QtQqxIVLQwFag+BAWWYqpNEMO0S60fkqmh8KIAV4oA==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + '@floating-ui/react-dom@0.4.3(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0)': dependencies: '@floating-ui/dom': 0.1.10 react: 18.2.0 @@ -1039,15 +5641,10 @@ packages: use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.75)(react@18.2.0) transitivePeerDependencies: - '@types/react' - dev: false - /@floating-ui/utils@0.2.1: - resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - dev: false + '@floating-ui/utils@0.2.1': {} - /@gitbeaker/core@35.8.1: - resolution: {integrity: sha512-KBrDykVKSmU9Q9Gly8KeHOgdc0lZSa435srECxuO0FGqqBcUQ82hPqUc13YFkkdOI9T1JRA3qSFajg8ds0mZKA==} - engines: {node: '>=14.2.0'} + '@gitbeaker/core@35.8.1': dependencies: '@gitbeaker/requester-utils': 35.8.1 form-data: 4.0.0 @@ -1055,91 +5652,61 @@ packages: mime: 3.0.0 query-string: 7.1.3 xcase: 2.0.1 - dev: true - /@gitbeaker/node@35.8.1: - resolution: {integrity: sha512-g6rX853y61qNhzq9cWtxIEoe2KDeFBtXAeWMGWJnc3nz3WRump2pIICvJqw/yobLZqmTNt+ea6w3/n92Mnbn3g==} - engines: {node: '>=14.2.0'} - deprecated: Please use its successor @gitbeaker/rest + '@gitbeaker/node@35.8.1': dependencies: '@gitbeaker/core': 35.8.1 '@gitbeaker/requester-utils': 35.8.1 delay: 5.0.0 got: 11.8.6 xcase: 2.0.1 - dev: true - /@gitbeaker/requester-utils@35.8.1: - resolution: {integrity: sha512-MFzdH+Z6eJaCZA5ruWsyvm6SXRyrQHjYVR6aY8POFraIy7ceIHOprWCs1R+0ydDZ8KtBnd8OTHjlJ0sLtSFJCg==} - engines: {node: '>=14.2.0'} + '@gitbeaker/requester-utils@35.8.1': dependencies: form-data: 4.0.0 qs: 6.11.2 xcase: 2.0.1 - dev: true - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/config-array@0.12.3: - resolution: {integrity: sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==} - engines: {node: '>=10.10.0'} + '@humanwhocodes/config-array@0.12.3': dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - dev: true + '@humanwhocodes/object-schema@2.0.3': {} - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 + string-width-cjs: string-width@4.2.3 strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 + strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true + wrap-ansi-cjs: wrap-ansi@7.0.0 - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 - dev: true - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true + '@istanbuljs/schema@0.1.3': {} - /@jest/console@29.7.0: - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 '@types/node': 20.12.7 @@ -1147,16 +5714,8 @@ packages: jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - dev: true - /@jest/core@29.7.0: - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + '@jest/core@29.7.0': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -1190,38 +5749,26 @@ packages: - babel-plugin-macros - supports-color - ts-node - dev: true - /@jest/environment@29.7.0: - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/node': 20.12.7 jest-mock: 29.7.0 - dev: true - /@jest/expect-utils@29.7.0: - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect-utils@29.7.0': dependencies: jest-get-type: 29.6.3 - dev: true - /@jest/expect@29.7.0: - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect@29.7.0': dependencies: expect: 29.7.0 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/fake-timers@29.7.0: - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 @@ -1229,11 +5776,8 @@ packages: jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 - dev: true - /@jest/globals@29.7.0: - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/globals@29.7.0': dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -1241,16 +5785,8 @@ packages: jest-mock: 29.7.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/reporters@29.7.0: - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + '@jest/reporters@29.7.0': dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 29.7.0 @@ -1278,47 +5814,32 @@ packages: v8-to-istanbul: 9.2.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 - dev: true - /@jest/source-map@29.6.3: - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/source-map@29.6.3': dependencies: '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 - dev: true - /@jest/test-result@29.7.0: - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-result@29.7.0': dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 - dev: true - /@jest/test-sequencer@29.7.0: - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-sequencer@29.7.0': dependencies: '@jest/test-result': 29.7.0 graceful-fs: 4.2.11 jest-haste-map: 29.7.0 slash: 3.0.0 - dev: true - /@jest/transform@29.7.0: - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/transform@29.7.0': dependencies: '@babel/core': 7.24.4 '@jest/types': 29.6.3 @@ -1337,11 +5858,8 @@ packages: write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color - dev: true - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 @@ -1349,84 +5867,44 @@ packages: '@types/node': 20.12.7 '@types/yargs': 17.0.32 chalk: 4.1.2 - dev: true - /@jridgewell/gen-mapping@0.3.5: - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.2': {} - /@jridgewell/set-array@1.2.1: - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} + '@jridgewell/set-array@1.2.1': {} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.4.15': {} - /@jridgewell/trace-mapping@0.3.25: - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@ledgerhq/crypto-icons-ui@1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): - resolution: {integrity: sha512-llccdOI5ec+2pD+eKWd7vvOQTE9LYfTdoqieX3qQ6hmNS4V/Bt3fu2mE7fJNy9JvHY9ajRXAK3c8Q2146rZiSg==} - peerDependencies: - '@types/react': '*' - react: '*' - styled-components: '*' - styled-system: '*' - peerDependenciesMeta: - '@types/react': - optional: true + '@ledgerhq/crypto-icons-ui@1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5)': dependencies: '@types/react': 18.2.75 react: 18.2.0 styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 - dev: false - /@ledgerhq/icons-ui@0.6.3(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5): - resolution: {integrity: sha512-CcYjNhSESHZPx39f9cnqWNvw6AGXxaGPmVWYfOgdcAtR9iWPw+XDiJ2czTa+taBY1Q1b4lyiKMy3mOGdKAj+7w==} - peerDependencies: - '@types/react': '*' - react: '*' - styled-components: '*' - styled-system: '*' - peerDependenciesMeta: - '@types/react': - optional: true + '@ledgerhq/icons-ui@0.6.3(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5)': dependencies: '@types/react': 18.2.75 react: 18.2.0 styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 - dev: false - /@ledgerhq/react-ui@0.14.16(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11): - resolution: {integrity: sha512-JuQasWXkGdfM1/Gk0eNKUt065vdH3lfN4c5qzC3v6XgWzFl7E+gSD8jhOq9r0GPJBxFkxVD0lGgGUWqdJF8lPg==} - peerDependencies: - '@types/react': '*' - react: '>=17.0.2' - react-dom: '>=17.0.2' - styled-components: ^5.3.3 - peerDependenciesMeta: - '@types/react': - optional: true + '@ledgerhq/react-ui@0.14.16(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11)': dependencies: '@floating-ui/react-dom': 0.4.3(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0) '@ledgerhq/crypto-icons-ui': 1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) @@ -1449,30 +5927,21 @@ packages: react-window: 1.8.10(react-dom@18.2.0)(react@18.2.0) styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 - dev: false - /@ledgerhq/ui-shared@0.2.1: - resolution: {integrity: sha512-mPvo78REWxhYTmkFI96ryCOAyZTV42f+l55AnuoeJ2tGn5nN7bmkOUIzZ4MJOx5VvGlWcvtY/+2dA0yEelCs9w==} - dev: false + '@ledgerhq/ui-shared@0.2.1': {} - /@ljharb/through@2.3.13: - resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} - engines: {node: '>= 0.4'} + '@ljharb/through@2.3.13': dependencies: call-bind: 1.0.7 - dev: true - /@manypkg/find-root@1.1.0: - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.24.4 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 - dev: true - /@manypkg/get-packages@1.1.3: - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@manypkg/get-packages@1.1.3': dependencies: '@babel/runtime': 7.24.4 '@changesets/types': 4.1.0 @@ -1480,147 +5949,70 @@ packages: fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - dev: true - /@microsoft/tsdoc-config@0.16.2: - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + '@microsoft/tsdoc-config@0.16.2': dependencies: '@microsoft/tsdoc': 0.14.2 ajv: 6.12.6 jju: 1.4.0 resolve: 1.19.0 - dev: true - /@microsoft/tsdoc@0.14.2: - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} - dev: true + '@microsoft/tsdoc@0.14.2': {} - /@next/env@14.1.4: - resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} - dev: false + '@next/env@14.1.4': {} - /@next/eslint-plugin-next@14.1.4: - resolution: {integrity: sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==} + '@next/eslint-plugin-next@14.1.4': dependencies: glob: 10.3.10 - dev: true - /@next/swc-darwin-arm64@14.1.4: - resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false + '@next/swc-darwin-arm64@14.1.4': optional: true - /@next/swc-darwin-x64@14.1.4: - resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false + '@next/swc-darwin-x64@14.1.4': optional: true - /@next/swc-linux-arm64-gnu@14.1.4: - resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false + '@next/swc-linux-arm64-gnu@14.1.4': optional: true - /@next/swc-linux-arm64-musl@14.1.4: - resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false + '@next/swc-linux-arm64-musl@14.1.4': optional: true - /@next/swc-linux-x64-gnu@14.1.4: - resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false + '@next/swc-linux-x64-gnu@14.1.4': optional: true - /@next/swc-linux-x64-musl@14.1.4: - resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false + '@next/swc-linux-x64-musl@14.1.4': optional: true - /@next/swc-win32-arm64-msvc@14.1.4: - resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false + '@next/swc-win32-arm64-msvc@14.1.4': optional: true - /@next/swc-win32-ia32-msvc@14.1.4: - resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false + '@next/swc-win32-ia32-msvc@14.1.4': optional: true - /@next/swc-win32-x64-msvc@14.1.4: - resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false + '@next/swc-win32-x64-msvc@14.1.4': optional: true - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 - dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: true - /@octokit/auth-token@2.5.0: - resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + '@octokit/auth-token@2.5.0': dependencies: '@octokit/types': 6.41.0 - dev: true - /@octokit/core@3.6.0: - resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + '@octokit/core@3.6.0': dependencies: '@octokit/auth-token': 2.5.0 '@octokit/graphql': 4.8.0 @@ -1631,67 +6023,45 @@ packages: universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding - dev: true - /@octokit/endpoint@6.0.12: - resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + '@octokit/endpoint@6.0.12': dependencies: '@octokit/types': 6.41.0 is-plain-object: 5.0.0 universal-user-agent: 6.0.1 - dev: true - /@octokit/graphql@4.8.0: - resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + '@octokit/graphql@4.8.0': dependencies: '@octokit/request': 5.6.3 '@octokit/types': 6.41.0 universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding - dev: true - /@octokit/openapi-types@12.11.0: - resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} - dev: true + '@octokit/openapi-types@12.11.0': {} - /@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0): - resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} - peerDependencies: - '@octokit/core': '>=2' + '@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0)': dependencies: '@octokit/core': 3.6.0 '@octokit/types': 6.41.0 - dev: true - /@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0): - resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} - peerDependencies: - '@octokit/core': '>=3' + '@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0)': dependencies: '@octokit/core': 3.6.0 - dev: true - /@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0): - resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} - peerDependencies: - '@octokit/core': '>=3' + '@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0)': dependencies: '@octokit/core': 3.6.0 '@octokit/types': 6.41.0 deprecation: 2.3.1 - dev: true - /@octokit/request-error@2.1.0: - resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + '@octokit/request-error@2.1.0': dependencies: '@octokit/types': 6.41.0 deprecation: 2.3.1 once: 1.4.0 - dev: true - /@octokit/request@5.6.3: - resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + '@octokit/request@5.6.3': dependencies: '@octokit/endpoint': 6.0.12 '@octokit/request-error': 2.1.0 @@ -1701,10 +6071,8 @@ packages: universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding - dev: true - /@octokit/rest@18.12.0: - resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} + '@octokit/rest@18.12.0': dependencies: '@octokit/core': 3.6.0 '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) @@ -1712,59 +6080,31 @@ packages: '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) transitivePeerDependencies: - encoding - dev: true - /@octokit/types@6.41.0: - resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + '@octokit/types@6.41.0': dependencies: '@octokit/openapi-types': 12.11.0 - dev: true - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true + '@pkgjs/parseargs@0.11.0': optional: true - /@pkgr/core@0.1.1: - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dev: true + '@pkgr/core@0.1.1': {} - /@pnpm/config.env-replace@1.1.0: - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - dev: true + '@pnpm/config.env-replace@1.1.0': {} - /@pnpm/network.ca-file@1.0.2: - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} + '@pnpm/network.ca-file@1.0.2': dependencies: graceful-fs: 4.2.10 - dev: true - /@pnpm/npm-conf@2.2.2: - resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} - engines: {node: '>=12'} + '@pnpm/npm-conf@2.2.2': dependencies: '@pnpm/config.env-replace': 1.1.0 '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - dev: true - /@popperjs/core@2.11.8: - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - dev: false + '@popperjs/core@2.11.8': {} - /@rollup/plugin-commonjs@24.0.0(rollup@2.78.0): - resolution: {integrity: sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.68.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rollup/plugin-commonjs@24.0.0(rollup@2.78.0)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@2.78.0) commondir: 1.0.1 @@ -1773,58 +6113,36 @@ packages: is-reference: 1.2.1 magic-string: 0.27.0 rollup: 2.78.0 - dev: false - /@rollup/pluginutils@5.1.0(rollup@2.78.0): - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rollup/pluginutils@5.1.0(rollup@2.78.0)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 rollup: 2.78.0 - dev: false - /@rushstack/eslint-patch@1.10.1: - resolution: {integrity: sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==} - dev: true + '@rushstack/eslint-patch@1.10.1': {} - /@sentry-internal/feedback@7.109.0: - resolution: {integrity: sha512-EL7N++poxvJP9rYvh6vSu24tsKkOveNCcCj4IM7+irWPjsuD2GLYYlhp/A/Mtt9l7iqO4plvtiQU5HGk7smcTQ==} - engines: {node: '>=12'} + '@sentry-internal/feedback@7.109.0': dependencies: '@sentry/core': 7.109.0 '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 - dev: false - /@sentry-internal/replay-canvas@7.109.0: - resolution: {integrity: sha512-Lh/K60kmloR6lkPUcQP0iamw7B/MdEUEx/ImAx4tUSMrLj+IoUEcq/ECgnnVyQkJq59+8nPEKrVLt7x6PUPEjw==} - engines: {node: '>=12'} + '@sentry-internal/replay-canvas@7.109.0': dependencies: '@sentry/core': 7.109.0 '@sentry/replay': 7.109.0 '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 - dev: false - /@sentry-internal/tracing@7.109.0: - resolution: {integrity: sha512-PzK/joC5tCuh2R/PRh+7dp+uuZl7pTsBIjPhVZHMTtb9+ls65WkdZJ1/uKXPouyz8NOo9Xok7aEvEo9seongyw==} - engines: {node: '>=8'} + '@sentry-internal/tracing@7.109.0': dependencies: '@sentry/core': 7.109.0 '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 - dev: false - /@sentry/browser@7.109.0: - resolution: {integrity: sha512-yx+OFG+Ab9qUDDgV9ZDv8M9O9Mqr0fjKta/LMlWALYLjzkMvxsPlRPFj7oMBlHqOTVLDeg7lFYmsA8wyWQ8Z8g==} - engines: {node: '>=8'} + '@sentry/browser@7.109.0': dependencies: '@sentry-internal/feedback': 7.109.0 '@sentry-internal/replay-canvas': 7.109.0 @@ -1833,13 +6151,8 @@ packages: '@sentry/replay': 7.109.0 '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 - dev: false - /@sentry/cli@1.77.3: - resolution: {integrity: sha512-c3eDqcDRmy4TFz2bFU5Y6QatlpoBPPa8cxBooaS4aMQpnIdLYPF1xhyyiW0LQlDUNc3rRjNF7oN5qKoaRoMTQQ==} - engines: {node: '>= 8'} - hasBin: true - requiresBuild: true + '@sentry/cli@1.77.3': dependencies: https-proxy-agent: 5.0.1 mkdirp: 0.5.6 @@ -1850,54 +6163,32 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: false - /@sentry/core@7.109.0: - resolution: {integrity: sha512-xwD4U0IlvvlE/x/g/W1I8b4Cfb16SsCMmiEuBf6XxvAa3OfWBxKoqLifb3GyrbxMC4LbIIZCN/SvLlnGJPgszA==} - engines: {node: '>=8'} + '@sentry/core@7.109.0': dependencies: '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 - dev: false - /@sentry/hub@6.19.7: - resolution: {integrity: sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==} - engines: {node: '>=6'} + '@sentry/hub@6.19.7': dependencies: '@sentry/types': 6.19.7 '@sentry/utils': 6.19.7 tslib: 1.14.1 - dev: false - /@sentry/integrations@7.109.0: - resolution: {integrity: sha512-8GwPFlUu4rB1Dx3e9tc3gCMmzC5Bd5lzThhg3tMBmzCCEp7UeA4u7eUuKJ5g49vjdznPDRG2p3PcRsApFZNPSg==} - engines: {node: '>=8'} + '@sentry/integrations@7.109.0': dependencies: '@sentry/core': 7.109.0 '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 localforage: 1.10.0 - dev: false - /@sentry/minimal@6.19.7: - resolution: {integrity: sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==} - engines: {node: '>=6'} + '@sentry/minimal@6.19.7': dependencies: '@sentry/hub': 6.19.7 '@sentry/types': 6.19.7 tslib: 1.14.1 - dev: false - /@sentry/nextjs@7.109.0(next@14.1.4)(react@18.2.0): - resolution: {integrity: sha512-AT0jhMDj7N57z8+XfgEyTJBogpU64z4mQpfOsSF5uuequzo3IlVVoJcu88jdqUkaVFxBJp3aF2T4nz65OHLoeA==} - engines: {node: '>=8'} - peerDependencies: - next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 || ^14.0 - react: 16.x || 17.x || 18.x - webpack: '>= 4.0.0' - peerDependenciesMeta: - webpack: - optional: true + '@sentry/nextjs@7.109.0(next@14.1.4)(react@18.2.0)': dependencies: '@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0) '@sentry/core': 7.109.0 @@ -1917,23 +6208,15 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: false - /@sentry/node@7.109.0: - resolution: {integrity: sha512-tqMNAES4X/iBl1eZRCmc29p//0id01FBLEiesNo5nk6ECl6/SaGMFAEwu1gsn90h/Bjgr04slwFOS4cR45V2PQ==} - engines: {node: '>=8'} + '@sentry/node@7.109.0': dependencies: '@sentry-internal/tracing': 7.109.0 '@sentry/core': 7.109.0 '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 - dev: false - /@sentry/react@7.109.0(react@18.2.0): - resolution: {integrity: sha512-KqXoDh6LVhNO+FLdM5LiTGpuorFvjoBPQ4nPGIVbjeMY/KZIau3kFxR142EvCApxmD69yvS5EhMnEqlNdaQPGw==} - engines: {node: '>=8'} - peerDependencies: - react: 15.x || 16.x || 17.x || 18.x + '@sentry/react@7.109.0(react@18.2.0)': dependencies: '@sentry/browser': 7.109.0 '@sentry/core': 7.109.0 @@ -1941,442 +6224,273 @@ packages: '@sentry/utils': 7.109.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 - dev: false - /@sentry/replay@7.109.0: - resolution: {integrity: sha512-hCDjbTNO7ErW/XsaBXlyHFsUhneyBUdTec1Swf98TFEfVqNsTs6q338aUcaR8dGRLbLrJ9YU9D1qKq++v5h2CA==} - engines: {node: '>=12'} + '@sentry/replay@7.109.0': dependencies: '@sentry-internal/tracing': 7.109.0 '@sentry/core': 7.109.0 '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 - dev: false - /@sentry/types@6.19.7: - resolution: {integrity: sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==} - engines: {node: '>=6'} - dev: false + '@sentry/types@6.19.7': {} - /@sentry/types@7.109.0: - resolution: {integrity: sha512-egCBnDv3YpVFoNzRLdP0soVrxVLCQ+rovREKJ1sw3rA2/MFH9WJ+DZZexsX89yeAFzy1IFsCp7/dEqudusml6g==} - engines: {node: '>=8'} - dev: false + '@sentry/types@7.109.0': {} - /@sentry/utils@6.19.7: - resolution: {integrity: sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==} - engines: {node: '>=6'} + '@sentry/utils@6.19.7': dependencies: '@sentry/types': 6.19.7 tslib: 1.14.1 - dev: false - /@sentry/utils@7.109.0: - resolution: {integrity: sha512-3RjxMOLMBwZ5VSiH84+o/3NY2An4Zldjz0EbfEQNRY9yffRiCPJSQiCJID8EoylCFOh/PAhPimBhqbtWJxX6iw==} - engines: {node: '>=8'} + '@sentry/utils@7.109.0': dependencies: '@sentry/types': 7.109.0 - dev: false - /@sentry/vercel-edge@7.109.0: - resolution: {integrity: sha512-0I+pLZPkD0vSlSLwBx9XAs17WXHimGhHIMki/YH5Y007i1iykkMItoDx//Y3PPjZiJu+deO7l4wKO2J1lJW6jg==} - engines: {node: '>=8'} + '@sentry/vercel-edge@7.109.0': dependencies: '@sentry-internal/tracing': 7.109.0 '@sentry/core': 7.109.0 '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 - dev: false - /@sentry/webpack-plugin@1.21.0: - resolution: {integrity: sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==} - engines: {node: '>= 8'} + '@sentry/webpack-plugin@1.21.0': dependencies: '@sentry/cli': 1.77.3 webpack-sources: 3.2.3 transitivePeerDependencies: - encoding - supports-color - dev: false - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true + '@sinclair/typebox@0.27.8': {} - /@sindresorhus/is@4.6.0: - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - dev: true + '@sindresorhus/is@4.6.0': {} - /@sindresorhus/is@5.6.0: - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} - dev: true + '@sindresorhus/is@5.6.0': {} - /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + '@sinonjs/commons@3.0.0': dependencies: type-detect: 4.0.8 - dev: true - /@sinonjs/fake-timers@10.3.0: - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@sinonjs/fake-timers@10.3.0': dependencies: '@sinonjs/commons': 3.0.0 - dev: true - /@styled-system/background@5.1.2: - resolution: {integrity: sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==} + '@styled-system/background@5.1.2': dependencies: '@styled-system/core': 5.1.2 - dev: false - /@styled-system/border@5.1.5: - resolution: {integrity: sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==} + '@styled-system/border@5.1.5': dependencies: '@styled-system/core': 5.1.2 - dev: false - /@styled-system/color@5.1.2: - resolution: {integrity: sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==} + '@styled-system/color@5.1.2': dependencies: '@styled-system/core': 5.1.2 - dev: false - /@styled-system/core@5.1.2: - resolution: {integrity: sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==} + '@styled-system/core@5.1.2': dependencies: object-assign: 4.1.1 - dev: false - /@styled-system/css@5.1.5: - resolution: {integrity: sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==} - dev: false + '@styled-system/css@5.1.5': {} - /@styled-system/flexbox@5.1.2: - resolution: {integrity: sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==} + '@styled-system/flexbox@5.1.2': dependencies: '@styled-system/core': 5.1.2 - dev: false - /@styled-system/grid@5.1.2: - resolution: {integrity: sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==} + '@styled-system/grid@5.1.2': dependencies: '@styled-system/core': 5.1.2 - dev: false - /@styled-system/layout@5.1.2: - resolution: {integrity: sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==} + '@styled-system/layout@5.1.2': dependencies: '@styled-system/core': 5.1.2 - dev: false - /@styled-system/position@5.1.2: - resolution: {integrity: sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==} + '@styled-system/position@5.1.2': dependencies: '@styled-system/core': 5.1.2 - dev: false - /@styled-system/shadow@5.1.2: - resolution: {integrity: sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==} + '@styled-system/shadow@5.1.2': dependencies: '@styled-system/core': 5.1.2 - dev: false - /@styled-system/space@5.1.2: - resolution: {integrity: sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==} + '@styled-system/space@5.1.2': dependencies: '@styled-system/core': 5.1.2 - dev: false - /@styled-system/typography@5.1.2: - resolution: {integrity: sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==} + '@styled-system/typography@5.1.2': dependencies: '@styled-system/core': 5.1.2 - dev: false - /@styled-system/variant@5.1.5: - resolution: {integrity: sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==} + '@styled-system/variant@5.1.5': dependencies: '@styled-system/core': 5.1.2 '@styled-system/css': 5.1.5 - dev: false - /@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + '@swc/helpers@0.5.2': dependencies: tslib: 2.6.2 - dev: false - /@szmarczak/http-timer@4.0.6: - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} + '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 - dev: true - /@szmarczak/http-timer@5.0.1: - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 - dev: true - /@tippyjs/react@4.2.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' + '@tippyjs/react@4.2.6(react-dom@18.2.0)(react@18.2.0)': dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tippy.js: 6.3.7 - dev: false - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true + '@tootallnate/once@2.0.0': {} - /@tootallnate/quickjs-emscripten@0.23.0: - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - dev: true + '@tootallnate/quickjs-emscripten@0.23.0': {} - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true + '@tsconfig/node10@1.0.9': {} - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true + '@tsconfig/node12@1.0.11': {} - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true + '@tsconfig/node14@1.0.3': {} - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true + '@tsconfig/node16@1.0.4': {} - /@tsconfig/recommended@1.0.6: - resolution: {integrity: sha512-0IKu9GHYF1NGTJiYgfWwqnOQSlnE9V9R7YohHNNf0/fj/SyOZWzdd06JFr0fLpg1Mqw0kGbYg8w5xdkSqLKM9g==} - dev: true + '@tsconfig/recommended@1.0.6': {} - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.24.4 '@babel/types': 7.24.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.4 - dev: true - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@types/babel__generator@7.6.8': dependencies: '@babel/types': 7.24.0 - dev: true - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.24.4 '@babel/types': 7.24.0 - dev: true - /@types/babel__traverse@7.20.4: - resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} + '@types/babel__traverse@7.20.4': dependencies: '@babel/types': 7.24.0 - dev: true - /@types/cacheable-request@6.0.3: - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 '@types/node': 20.12.7 '@types/responselike': 1.0.3 - dev: true - /@types/eslint@8.56.7: - resolution: {integrity: sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==} + '@types/eslint@8.56.7': dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 - dev: true - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.5': {} - /@types/fs-extra@11.0.4: - resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} - requiresBuild: true + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 '@types/node': 20.12.7 - dev: true optional: true - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 20.12.7 - dev: true - /@types/hoist-non-react-statics@3.3.5: - resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} + '@types/hoist-non-react-statics@3.3.5': dependencies: '@types/react': 18.2.75 hoist-non-react-statics: 3.3.2 - dev: true - /@types/http-cache-semantics@4.0.4: - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - dev: true + '@types/http-cache-semantics@4.0.4': {} - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: true + '@types/istanbul-lib-coverage@2.0.6': {} - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + '@types/istanbul-lib-report@3.0.3': dependencies: '@types/istanbul-lib-coverage': 2.0.6 - dev: true - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/istanbul-reports@3.0.4': dependencies: '@types/istanbul-lib-report': 3.0.3 - dev: true - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + '@types/jest@29.5.12': dependencies: expect: 29.7.0 pretty-format: 29.7.0 - dev: true - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/json-schema@7.0.15': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/jsonfile@6.1.4: - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - requiresBuild: true + '@types/jsonfile@6.1.4': dependencies: '@types/node': 20.12.7 - dev: true optional: true - /@types/keyv@3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/keyv@3.1.4': dependencies: '@types/node': 20.12.7 - dev: true - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: true + '@types/minimist@1.2.5': {} - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: true + '@types/node@12.20.55': {} - /@types/node@17.0.45: - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - dev: true + '@types/node@17.0.45': {} - /@types/node@20.12.7: - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + '@types/node@20.12.7': dependencies: undici-types: 5.26.5 - dev: true - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true + '@types/normalize-package-data@2.4.4': {} - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: false + '@types/parse-json@4.0.2': {} - /@types/prop-types@15.7.12: - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + '@types/prop-types@15.7.12': {} - /@types/react-dom@18.2.24: - resolution: {integrity: sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==} + '@types/react-dom@18.2.24': dependencies: '@types/react': 18.2.75 - dev: true - /@types/react-transition-group@4.4.10: - resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} + '@types/react-transition-group@4.4.10': dependencies: '@types/react': 18.2.75 - dev: false - /@types/react@18.2.75: - resolution: {integrity: sha512-+DNnF7yc5y0bHkBTiLKqXFe+L4B3nvOphiMY3tuA5X10esmjqk7smyBZzbGTy2vsiy/Bnzj8yFIBL8xhRacoOg==} + '@types/react@18.2.75': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 - /@types/responselike@1.0.3: - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/responselike@1.0.3': dependencies: '@types/node': 20.12.7 - dev: true - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true + '@types/semver@7.5.8': {} - /@types/stack-utils@2.0.3: - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - dev: true + '@types/stack-utils@2.0.3': {} - /@types/styled-components@5.1.34: - resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} + '@types/styled-components@5.1.34': dependencies: '@types/hoist-non-react-statics': 3.3.5 '@types/react': 18.2.75 csstype: 3.1.3 - dev: true - /@types/uuid@9.0.8: - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - dev: true + '@types/uuid@9.0.8': {} - /@types/w3c-web-hid@1.0.6: - resolution: {integrity: sha512-IWyssXmRDo6K7s31dxf+U+x/XUWuVsl9qUIYbJmpUHPcTv/COfBCKw/F0smI45+gPV34brjyP30BFcIsHgYWLA==} - dev: true + '@types/w3c-web-hid@1.0.6': {} - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true + '@types/yargs-parser@21.0.3': {} - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + '@types/yargs@17.0.32': dependencies: '@types/yargs-parser': 21.0.3 - dev: true - /@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4): - resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) @@ -2394,17 +6508,8 @@ packages: typescript: 5.4.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 @@ -2415,17 +6520,8 @@ packages: typescript: 5.4.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4): - resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4)': dependencies: '@typescript-eslint/scope-manager': 7.6.0 '@typescript-eslint/types': 7.6.0 @@ -2436,49 +6532,28 @@ packages: typescript: 5.4.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - dev: true - /@typescript-eslint/scope-manager@7.5.0: - resolution: {integrity: sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@7.5.0': dependencies: '@typescript-eslint/types': 7.5.0 '@typescript-eslint/visitor-keys': 7.5.0 - dev: true - /@typescript-eslint/scope-manager@7.6.0: - resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@7.6.0': dependencies: '@typescript-eslint/types': 7.6.0 '@typescript-eslint/visitor-keys': 7.6.0 - dev: true - /@typescript-eslint/type-utils@7.6.0(eslint@9.0.0)(typescript@5.4.4): - resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@7.6.0(eslint@9.0.0)(typescript@5.4.4)': dependencies: '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) '@typescript-eslint/utils': 7.6.0(eslint@9.0.0)(typescript@5.4.4) @@ -2488,36 +6563,16 @@ packages: typescript: 5.4.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@typescript-eslint/types@5.62.0': {} - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@6.21.0': {} - /@typescript-eslint/types@7.5.0: - resolution: {integrity: sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==} - engines: {node: ^18.18.0 || >=20.0.0} - dev: true + '@typescript-eslint/types@7.5.0': {} - /@typescript-eslint/types@7.6.0: - resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} - engines: {node: ^18.18.0 || >=20.0.0} - dev: true + '@typescript-eslint/types@7.6.0': {} - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.4): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.4)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -2529,16 +6584,8 @@ packages: typescript: 5.4.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.4): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.4)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 @@ -2551,16 +6598,8 @@ packages: typescript: 5.4.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.4): - resolution: {integrity: sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.4)': dependencies: '@typescript-eslint/types': 7.5.0 '@typescript-eslint/visitor-keys': 7.5.0 @@ -2573,16 +6612,8 @@ packages: typescript: 5.4.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.4): - resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.4)': dependencies: '@typescript-eslint/types': 7.6.0 '@typescript-eslint/visitor-keys': 7.6.0 @@ -2595,13 +6626,8 @@ packages: typescript: 5.4.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@5.62.0(eslint@9.0.0)(typescript@5.4.4): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@5.62.0(eslint@9.0.0)(typescript@5.4.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) '@types/json-schema': 7.0.15 @@ -2615,13 +6641,8 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/utils@7.5.0(eslint@9.0.0)(typescript@5.4.4): - resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 + '@typescript-eslint/utils@7.5.0(eslint@9.0.0)(typescript@5.4.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) '@types/json-schema': 7.0.15 @@ -2634,13 +6655,8 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/utils@7.6.0(eslint@9.0.0)(typescript@5.4.4): - resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 + '@typescript-eslint/utils@7.6.0(eslint@9.0.0)(typescript@5.4.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) '@types/json-schema': 7.0.15 @@ -2653,61 +6669,30 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys@7.5.0: - resolution: {integrity: sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@7.5.0': dependencies: '@typescript-eslint/types': 7.5.0 eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys@7.6.0: - resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@7.6.0': dependencies: '@typescript-eslint/types': 7.6.0 eslint-visitor-keys: 3.4.3 - dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + '@ungap/structured-clone@1.2.0': {} - /@vercel/style-guide@6.0.0(eslint@9.0.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4): - resolution: {integrity: sha512-tu0wFINGz91EPwaT5VjSqUwbvCY9pvLach7SPG4XyfJKPU9Vku2TFa6+AyzJ4oroGbo9fK+TQhIFHrnFl0nCdg==} - engines: {node: '>=18.18'} - peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <15.0.0-0' - eslint: '>=8.48.0 <9' - prettier: '>=3.0.0 <4' - typescript: '>=4.8.0 <6' - peerDependenciesMeta: - '@next/eslint-plugin-next': - optional: true - eslint: - optional: true - prettier: - optional: true - typescript: - optional: true + '@vercel/style-guide@6.0.0(eslint@9.0.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4)': dependencies: '@babel/core': 7.24.4 '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@9.0.0) @@ -2738,194 +6723,112 @@ packages: - jest - supports-color - vitest - dev: true - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.11.2): dependencies: acorn: 8.11.2 - dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.11.3): dependencies: acorn: 8.11.3 - dev: true - /acorn-walk@8.3.1: - resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} - engines: {node: '>=0.4.0'} - dev: true + acorn-walk@8.3.1: {} - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.11.2: {} - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.11.3: {} - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + agent-base@6.0.2: dependencies: debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} + agent-base@7.1.0: dependencies: debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true + ajv-formats@2.1.1(ajv@8.12.0): dependencies: ajv: 8.12.0 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true - /ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-align@3.0.1: dependencies: string-width: 4.2.3 - dev: true - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.3: {} - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-escapes@6.2.0: - resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} - engines: {node: '>=14.16'} + ansi-escapes@6.2.0: dependencies: type-fest: 3.13.1 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.0.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true + ansi-styles@5.2.0: {} - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true + arg@4.1.3: {} - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.0: dependencies: dequal: 2.0.3 - dev: true - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.7: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 get-intrinsic: 1.2.4 is-string: 1.0.7 - dev: true - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -2933,16 +6836,10 @@ packages: es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + array.prototype.findlast@1.2.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -2950,11 +6847,8 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -2962,50 +6856,37 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + array.prototype.toreversed@1.1.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + array.prototype.tosorted@1.1.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - dev: true - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 @@ -3015,51 +6896,29 @@ packages: get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - dev: true - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + arrify@1.0.1: {} - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true + ast-types-flow@0.0.8: {} - /ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} + ast-types@0.13.4: dependencies: tslib: 2.6.2 - dev: true - /async-retry@1.2.3: - resolution: {integrity: sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==} + async-retry@1.2.3: dependencies: retry: 0.12.0 - dev: true - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: true + async@3.2.5: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true + asynckit@0.4.0: {} - /atomically@2.0.2: - resolution: {integrity: sha512-Xfmb4q5QV7uqTlVdMSTtO5eF4DCHfNOdaPyKlbFShkzeNP+3lj3yjjcbdjSmEY4+pDBKJ9g26aP+ImTe88UHoQ==} + atomically@2.0.2: dependencies: stubborn-fs: 1.2.5 when-exit: 2.1.2 - dev: true - /autoprefixer@10.4.19(postcss@8.4.38): - resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + autoprefixer@10.4.19(postcss@8.4.38): dependencies: browserslist: 4.23.0 caniuse-lite: 1.0.30001607 @@ -3068,31 +6927,18 @@ packages: picocolors: 1.0.0 postcss: 8.4.38 postcss-value-parser: 4.2.0 - dev: true - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 - dev: true - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - dev: true + axe-core@4.7.0: {} - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + axobject-query@3.2.1: dependencies: dequal: 2.0.3 - dev: true - /babel-jest@29.7.0(@babel/core@7.24.4): - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 + babel-jest@29.7.0(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 '@jest/transform': 29.7.0 @@ -3104,11 +6950,8 @@ packages: slash: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + babel-plugin-istanbul@6.1.1: dependencies: '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 @@ -3117,31 +6960,21 @@ packages: test-exclude: 6.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.24.0 '@babel/types': 7.24.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.4 - dev: true - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} + babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.24.4 cosmiconfig: 7.1.0 resolve: 1.22.8 - dev: false - /babel-plugin-styled-components@2.1.4(@babel/core@7.24.4)(styled-components@5.3.11): - resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} - peerDependencies: - styled-components: '>= 2' + babel-plugin-styled-components@2.1.4(@babel/core@7.24.4)(styled-components@5.3.11): dependencies: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.15 @@ -3151,12 +6984,8 @@ packages: styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) transitivePeerDependencies: - '@babel/core' - dev: false - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) @@ -3171,58 +7000,34 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - dev: true - /babel-preset-jest@29.6.3(@babel/core@7.24.4): - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-jest@29.6.3(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) - dev: true - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /basic-ftp@5.0.4: - resolution: {integrity: sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==} - engines: {node: '>=10.0.0'} - dev: true + basic-ftp@5.0.4: {} - /before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - dev: true + before-after-hook@2.2.3: {} - /better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 - dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.2.0: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /boxen@7.1.1: - resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} - engines: {node: '>=14.16'} + boxen@7.1.1: dependencies: ansi-align: 3.0.1 camelcase: 7.0.1 @@ -3232,96 +7037,59 @@ packages: type-fest: 2.19.0 widest-line: 4.0.1 wrap-ansi: 8.1.0 - dev: true - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /breakword@1.0.6: - resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + breakword@1.0.6: dependencies: wcwidth: 1.0.1 - dev: true - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.23.0: dependencies: caniuse-lite: 1.0.30001607 electron-to-chromium: 1.4.729 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) - /bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} + bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 - dev: true - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bser@2.1.1: dependencies: node-int64: 0.4.0 - dev: true - /buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - dev: true + buffer-equal-constant-time@1.0.1: {} - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true + builtin-modules@3.3.0: {} - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + busboy@1.6.0: dependencies: streamsearch: 1.1.0 - dev: false - /cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - dev: true + cacheable-lookup@5.0.4: {} - /cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - dev: true + cacheable-lookup@7.0.0: {} - /cacheable-request@10.2.14: - resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} - engines: {node: '>=14.16'} + cacheable-request@10.2.14: dependencies: '@types/http-cache-semantics': 4.0.4 get-stream: 6.0.1 @@ -3330,11 +7098,8 @@ packages: mimic-response: 4.0.0 normalize-url: 8.0.0 responselike: 3.0.0 - dev: true - /cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} + cacheable-request@7.0.4: dependencies: clone-response: 1.0.3 get-stream: 5.2.0 @@ -3343,105 +7108,65 @@ packages: lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 - dev: true - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + callsites@3.1.0: {} - /camel-case@3.0.0: - resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + camel-case@3.0.0: dependencies: no-case: 2.3.2 upper-case: 1.1.3 - dev: true - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} + camelcase-keys@6.2.2: dependencies: camelcase: 5.3.1 map-obj: 4.3.0 quick-lru: 4.0.1 - dev: true - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + camelcase@5.3.1: {} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + camelcase@6.3.0: {} - /camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - dev: true + camelcase@7.0.1: {} - /camelize@1.0.1: - resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - dev: false + camelize@1.0.1: {} - /caniuse-lite@1.0.30001607: - resolution: {integrity: sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==} + caniuse-lite@1.0.30001607: {} - /caniuse-lite@1.0.30001608: - resolution: {integrity: sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==} - dev: false + caniuse-lite@1.0.30001608: {} - /chalk@2.3.0: - resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} - engines: {node: '>=4'} + chalk@2.3.0: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 4.5.0 - dev: false - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} + chalk@3.0.0: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: false - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.3.0: {} - /change-case@3.1.0: - resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} + change-case@3.1.0: dependencies: camel-case: 3.0.0 constant-case: 2.0.0 @@ -3461,34 +7186,19 @@ packages: title-case: 2.1.1 upper-case: 1.1.3 upper-case-first: 1.1.2 - dev: true - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true + char-regex@1.0.2: {} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /chart.js@3.9.1: - resolution: {integrity: sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==} - dev: false + chart.js@3.9.1: {} - /chartjs-adapter-moment@1.0.1(chart.js@3.9.1)(moment@2.30.1): - resolution: {integrity: sha512-Uz+nTX/GxocuqXpGylxK19YG4R3OSVf8326D+HwSTsNw1LgzyIGRo+Qujwro1wy6X+soNSnfj5t2vZ+r6EaDmA==} - peerDependencies: - chart.js: '>=3.0.0' - moment: ^2.10.2 + chartjs-adapter-moment@1.0.1(chart.js@3.9.1)(moment@2.30.1): dependencies: chart.js: 3.9.1 moment: 2.30.1 - dev: false - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.5.3: dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -3499,164 +7209,92 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true + ci-info@3.9.0: {} - /ci-info@4.0.0: - resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} - engines: {node: '>=8'} - dev: true + ci-info@4.0.0: {} - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: true + cjs-module-lexer@1.2.3: {} - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - dev: true + cli-boxes@3.0.0: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 - dev: true - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.2: {} - /cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - dev: true + cli-width@4.1.0: {} - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false + client-only@0.0.1: {} - /cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@6.0.0: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clone-response@1.0.3: dependencies: mimic-response: 1.0.1 - dev: true - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true + co@4.6.0: {} - /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - dev: true + collect-v8-coverage@1.0.2: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-string@1.9.1: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - dev: false - /color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + color@4.2.3: dependencies: color-convert: 2.0.1 color-string: 1.9.1 - dev: false - /colors@1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - dev: true + colors@1.4.0: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: true - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true + commander@2.20.3: {} - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - dev: true + commander@9.5.0: {} - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: false + commondir@1.0.1: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /concurrently@8.2.2: - resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} - engines: {node: ^14.13.0 || >=16.0.0} - hasBin: true + concurrently@8.2.2: dependencies: chalk: 4.1.2 date-fns: 2.30.0 @@ -3667,11 +7305,8 @@ packages: supports-color: 8.1.1 tree-kill: 1.2.2 yargs: 17.7.2 - dev: true - /conf@12.0.0: - resolution: {integrity: sha512-fIWyWUXrJ45cHCIQX+Ck1hrZDIf/9DR0P0Zewn3uNht28hbt5OfGUq8rRWsxi96pZWPyBEd0eY9ama01JTaknA==} - engines: {node: '>=18'} + conf@12.0.0: dependencies: ajv: 8.12.0 ajv-formats: 2.1.1(ajv@8.12.0) @@ -3682,66 +7317,44 @@ packages: json-schema-typed: 8.0.1 semver: 7.6.0 uint8array-extras: 0.3.0 - dev: true - /config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + config-chain@1.1.13: dependencies: ini: 1.3.8 proto-list: 1.2.4 - dev: true - /configstore@6.0.0: - resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} - engines: {node: '>=12'} + configstore@6.0.0: dependencies: dot-prop: 6.0.1 graceful-fs: 4.2.11 unique-string: 3.0.0 write-file-atomic: 3.0.3 xdg-basedir: 5.1.0 - dev: true - /constant-case@2.0.0: - resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} + constant-case@2.0.0: dependencies: snake-case: 2.1.0 upper-case: 1.1.3 - dev: true - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false + convert-source-map@1.9.0: {} - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + convert-source-map@2.0.0: {} - /core-js-compat@3.36.1: - resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + core-js-compat@3.36.1: dependencies: browserslist: 4.23.0 - dev: true - /core-js@3.36.0: - resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==} - requiresBuild: true - dev: true + core-js@3.36.0: {} - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - dev: false - /create-jest@29.7.0(@types/node@20.12.7): - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true + create-jest@29.7.0(@types/node@20.12.7): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 @@ -3755,82 +7368,51 @@ packages: - babel-plugin-macros - supports-color - ts-node - dev: true - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + create-require@1.1.1: {} - /cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.3.1 - dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /crypto-random-string@4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} + crypto-random-string@4.0.0: dependencies: type-fest: 1.4.0 - dev: true - /css-color-keywords@1.0.0: - resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} - engines: {node: '>=4'} - dev: false + css-color-keywords@1.0.0: {} - /css-to-react-native@3.2.0: - resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + css-to-react-native@3.2.0: dependencies: camelize: 1.0.1 css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 - dev: false - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.1.3: {} - /csv-generate@3.4.3: - resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - dev: true + csv-generate@3.4.3: {} - /csv-parse@4.16.3: - resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - dev: true + csv-parse@4.16.3: {} - /csv-stringify@5.6.5: - resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - dev: true + csv-stringify@5.6.5: {} - /csv@5.5.3: - resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} - engines: {node: '>= 0.1.90'} + csv@5.5.3: dependencies: csv-generate: 3.4.3 csv-parse: 4.16.3 csv-stringify: 5.6.5 stream-transform: 2.1.3 - dev: true - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true + damerau-levenshtein@1.0.8: {} - /danger@11.3.1: - resolution: {integrity: sha512-+slkGnbf0czY7g4LSuYpYkKJgFrb9YIXFJvV5JAuLLF39CXLlUw0iebgeL3ASK1t6RDb8xe+Rk2F5ilh2Hdv2w==} - engines: {node: '>=14.13.1'} - hasBin: true + danger@11.3.1: dependencies: '@gitbeaker/core': 35.8.1 '@gitbeaker/node': 35.8.1 @@ -3873,380 +7455,201 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - dev: true + data-uri-to-buffer@4.0.1: {} - /data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - dev: true + data-uri-to-buffer@6.0.2: {} - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} + data-view-byte-length@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.0: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /dataloader@1.4.0: - resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - dev: true + dataloader@1.4.0: {} - /date-fns@2.30.0: - resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} - engines: {node: '>=0.11'} + date-fns@2.30.0: dependencies: '@babel/runtime': 7.24.4 - dev: true - /debounce-fn@5.1.2: - resolution: {integrity: sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A==} - engines: {node: '>=12'} + debounce-fn@5.1.2: dependencies: mimic-fn: 4.0.0 - dev: true - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: ms: 2.1.3 - dev: true - /debug@4.3.4(supports-color@5.5.0): - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4(supports-color@5.5.0): dependencies: ms: 2.1.2 supports-color: 5.5.0 - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 map-obj: 1.0.1 - dev: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + decamelize@1.2.0: {} - /decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - dev: true + decode-uri-component@0.2.2: {} - /decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - dev: true - /dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - dev: true + dedent@1.5.1: {} - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true + deep-extend@0.6.0: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@4.3.1: {} - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - dev: true + defer-to-connect@2.0.1: {} - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} + degenerator@5.0.1: dependencies: ast-types: 0.13.4 escodegen: 2.1.0 esprima: 4.0.1 - dev: true - /degit@2.8.4: - resolution: {integrity: sha512-vqYuzmSA5I50J882jd+AbAhQtgK6bdKUJIex1JNfEUPENCgYsxugzKVZlFyMwV4i06MmnV47/Iqi5Io86zf3Ng==} - engines: {node: '>=8.0.0'} - hasBin: true - dev: true + degit@2.8.4: {} - /delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - dev: true + delay@5.0.0: {} - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true + delayed-stream@1.0.0: {} - /deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dev: true + deprecation@2.3.1: {} - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: true + dequal@2.0.3: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-indent@6.1.0: {} - /detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - dev: true + detect-indent@7.0.1: {} - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true + detect-newline@3.1.0: {} - /detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + detect-newline@4.0.1: {} - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + diff-sequences@29.6.3: {} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true + diff@4.0.2: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.24.4 csstype: 3.1.3 - dev: false - /dot-case@2.1.1: - resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} + dot-case@2.1.1: dependencies: no-case: 2.3.2 - dev: true - /dot-prop@6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} + dot-prop@6.0.1: dependencies: is-obj: 2.0.0 - dev: true - /dot-prop@8.0.2: - resolution: {integrity: sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==} - engines: {node: '>=16'} + dot-prop@8.0.2: dependencies: type-fest: 3.13.1 - dev: true - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - dev: true + dotenv@16.0.3: {} - /dotenv@8.6.0: - resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} - engines: {node: '>=10'} - dev: true + dotenv@8.6.0: {} - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 - dev: true - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} - engines: {node: '>=0.10.0'} - hasBin: true + ejs@3.1.9: dependencies: jake: 10.8.7 - dev: true - /electron-to-chromium@1.4.729: - resolution: {integrity: sha512-bx7+5Saea/qu14kmPTDHQxkp2UnziG3iajUQu3BxFvCOnpAJdDbMV4rSl+EqFDkkpNNVUFlR1kDfpL59xfy1HA==} + electron-to-chromium@1.4.729: {} - /embla-carousel-react@8.0.0-rc17(react@18.2.0): - resolution: {integrity: sha512-x4aFprwFB+PQO9EsHHZsrDxARb0uYNBYn9mr5oDFdBdPez4M8G1r5yidWbUcT9pNUc8AQXC9sGzlfauBfBxVOw==} - peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 + embla-carousel-react@8.0.0-rc17(react@18.2.0): dependencies: embla-carousel: 8.0.0-rc17 embla-carousel-reactive-utils: 8.0.0-rc17(embla-carousel@8.0.0-rc17) react: 18.2.0 - dev: false - /embla-carousel-reactive-utils@8.0.0-rc17(embla-carousel@8.0.0-rc17): - resolution: {integrity: sha512-eluEOK/u5HdjYaTLC4bUG3iTCnyX7RsYix3il0aH4ZECOKa5fS+pVK2vrM17Mgw6C5Hyjcr3r3lfJtGerVzVsQ==} - peerDependencies: - embla-carousel: 8.0.0-rc17 + embla-carousel-reactive-utils@8.0.0-rc17(embla-carousel@8.0.0-rc17): dependencies: embla-carousel: 8.0.0-rc17 - dev: false - /embla-carousel@8.0.0-rc17: - resolution: {integrity: sha512-evF49b88VOitvqFtlvhvKVSu96Y8A+QSFdhok87Bfm8R7OYuk95FT+o8+M1GQLi/EhGDUlT193HTVAR0Wt2neQ==} - dev: false + embla-carousel@8.0.0-rc17: {} - /emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - dev: true + emittery@0.13.1: {} - /emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - dev: true + emoji-regex@10.3.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - dev: true - /enhanced-resolve@5.16.0: - resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.16.0: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - dev: true - /env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + env-paths@3.0.0: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} + es-abstract@1.23.3: dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 @@ -4294,23 +7697,14 @@ packages: typed-array-length: 1.0.6 unbox-primitive: 1.0.2 which-typed-array: 1.1.15 - dev: true - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 - dev: true - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} - engines: {node: '>= 0.4'} + es-iterator-helpers@1.0.18: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -4326,86 +7720,48 @@ packages: internal-slot: 1.0.7 iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - dev: true - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 - dev: true - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.2 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} + escalade@3.1.2: {} - /escape-goat@4.0.0: - resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} - engines: {node: '>=12'} - dev: true + escape-goat@4.0.0: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + escape-string-regexp@1.0.5: {} - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true + escape-string-regexp@2.0.0: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + escape-string-regexp@4.0.0: {} - /escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - dev: true + escape-string-regexp@5.0.0: {} - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true + escodegen@2.1.0: dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 - dev: true - /eslint-config-next@14.1.4(eslint@9.0.0)(typescript@5.4.4): - resolution: {integrity: sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true + eslint-config-next@14.1.4(eslint@9.0.0)(typescript@5.4.4): dependencies: '@next/eslint-plugin-next': 14.1.4 '@rushstack/eslint-patch': 1.10.1 @@ -4421,51 +7777,29 @@ packages: transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-config-prettier@9.1.0(eslint@9.0.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@9.1.0(eslint@9.0.0): dependencies: eslint: 9.0.0 - dev: true - /eslint-config-turbo@1.13.2(eslint@9.0.0): - resolution: {integrity: sha512-TzvsMwNJx/P4JYw79iFqbyQApnyT050gW7dBxnNeNVl3pVMnT2rwaFo9Q3Hc49Tp5NANxEwYN9RStF50P/IwGA==} - peerDependencies: - eslint: '>6.6.0' + eslint-config-turbo@1.13.2(eslint@9.0.0): dependencies: eslint: 9.0.0 eslint-plugin-turbo: 1.13.2(eslint@9.0.0) - dev: true - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): dependencies: eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) - dev: true - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0): dependencies: debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.16.0 @@ -4481,14 +7815,8 @@ packages: - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0): dependencies: debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.16.0 @@ -4504,28 +7832,8 @@ packages: - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): dependencies: '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) debug: 3.2.7 @@ -4534,28 +7842,8 @@ packages: eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0) transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): dependencies: '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) debug: 3.2.7 @@ -4564,28 +7852,14 @@ packages: eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0) transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@9.0.0): - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' + eslint-plugin-eslint-comments@3.2.0(eslint@9.0.0): dependencies: escape-string-regexp: 1.0.5 eslint: 9.0.0 ignore: 5.3.0 - dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): dependencies: '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) array-includes: 3.1.8 @@ -4610,17 +7884,8 @@ packages: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): dependencies: '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) array-includes: 3.1.8 @@ -4645,20 +7910,8 @@ packages: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(jest@29.7.0)(typescript@5.4.4): - resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(jest@29.7.0)(typescript@5.4.4): dependencies: '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4) '@typescript-eslint/utils': 5.62.0(eslint@9.0.0)(typescript@5.4.4) @@ -4667,13 +7920,8 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@9.0.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-jsx-a11y@6.8.0(eslint@9.0.0): dependencies: '@babel/runtime': 7.24.4 aria-query: 5.3.0 @@ -4692,37 +7940,18 @@ packages: minimatch: 3.1.2 object.entries: 1.1.8 object.fromentries: 2.0.8 - dev: true - /eslint-plugin-playwright@1.5.4(eslint-plugin-jest@27.9.0)(eslint@9.0.0): - resolution: {integrity: sha512-J38Wy3Vc2f9y73J+KRmgXgbYI8TZ3zbz6qBbTj3PhpFndUS572jZ7kqQ3rJ9si5BaMHT7lmZzraO+3UjwIDV4Q==} - engines: {node: '>=16.6.0'} - peerDependencies: - eslint: '>=8.40.0' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true + eslint-plugin-playwright@1.5.4(eslint-plugin-jest@27.9.0)(eslint@9.0.0): dependencies: eslint: 9.0.0 eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(jest@29.7.0)(typescript@5.4.4) globals: 13.24.0 - dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@9.0.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react-hooks@4.6.0(eslint@9.0.0): dependencies: eslint: 9.0.0 - dev: true - /eslint-plugin-react@7.34.1(eslint@9.0.0): - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-react@7.34.1(eslint@9.0.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -4743,50 +7972,30 @@ packages: resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.11 - dev: true - /eslint-plugin-simple-import-sort@12.0.0(eslint@9.0.0): - resolution: {integrity: sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==} - peerDependencies: - eslint: '>=5.0.0' + eslint-plugin-simple-import-sort@12.0.0(eslint@9.0.0): dependencies: eslint: 9.0.0 - dev: true - /eslint-plugin-testing-library@6.2.0(eslint@9.0.0)(typescript@5.4.4): - resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 + eslint-plugin-testing-library@6.2.0(eslint@9.0.0)(typescript@5.4.4): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@9.0.0)(typescript@5.4.4) eslint: 9.0.0 transitivePeerDependencies: - supports-color - typescript - dev: true - /eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + eslint-plugin-tsdoc@0.2.17: dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - dev: true - /eslint-plugin-turbo@1.13.2(eslint@9.0.0): - resolution: {integrity: sha512-QNaihF0hTRjfOBd1SLHrftm8V3pOU35CNS/C0/Z6qY1xxdL1PSv4IctEIldSMX7/A1jOPYwMPO7wYwPXgjgp/g==} - peerDependencies: - eslint: '>6.6.0' + eslint-plugin-turbo@1.13.2(eslint@9.0.0): dependencies: dotenv: 16.0.3 eslint: 9.0.0 - dev: true - /eslint-plugin-unicorn@51.0.1(eslint@9.0.0): - resolution: {integrity: sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.56.0' + eslint-plugin-unicorn@51.0.1(eslint@9.0.0): dependencies: '@babel/helper-validator-identifier': 7.22.20 '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) @@ -4807,20 +8016,8 @@ packages: strip-indent: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(typescript@5.4.4): - resolution: {integrity: sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg==} - engines: {node: ^18.0.0 || >= 20.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': '*' - eslint: '>=8.0.0' - vitest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - vitest: - optional: true + eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(typescript@5.4.4): dependencies: '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4) '@typescript-eslint/utils': 7.5.0(eslint@9.0.0)(typescript@5.4.4) @@ -4828,51 +8025,29 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-scope@8.0.1: - resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-scope@8.0.1: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true + eslint-visitor-keys@2.1.0: {} - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: true + eslint-visitor-keys@4.0.0: {} - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.57.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@eslint-community/regexpp': 4.10.0 @@ -4914,12 +8089,8 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /eslint@9.0.0: - resolution: {integrity: sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true + eslint@9.0.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) '@eslint-community/regexpp': 4.10.0 @@ -4957,68 +8128,38 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@10.0.1: - resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@10.0.1: dependencies: acorn: 8.11.3 acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 4.0.0 - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.11.2 acorn-jsx: 5.3.2(acorn@8.11.2) eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.5.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: false + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + estree-walker@2.0.2: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + esutils@2.0.3: {} + + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -5029,11 +8170,8 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} + execa@8.0.1: dependencies: cross-spawn: 7.0.3 get-stream: 8.0.1 @@ -5044,390 +8182,231 @@ packages: onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 - dev: true - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true + exit@0.1.2: {} - /expand-tilde@2.0.2: - resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} - engines: {node: '>=0.10.0'} + expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 - dev: true - /expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + expect@29.7.0: dependencies: '@jest/expect-utils': 29.7.0 jest-get-type: 29.6.3 jest-matcher-utils: 29.7.0 jest-message-util: 29.7.0 jest-util: 29.7.0 - dev: true - /extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} + extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 - dev: true - /extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - dev: true + extendable-error@0.1.7: {} - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true - /fast-json-patch@3.1.1: - resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} - dev: true + fast-json-patch@3.1.1: {} - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.15.0: dependencies: reusify: 1.0.4 - dev: true - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 - dev: true - /fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 - dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /figures@5.0.0: - resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} - engines: {node: '>=14'} + figures@5.0.0: dependencies: escape-string-regexp: 5.0.0 is-unicode-supported: 1.3.0 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - dev: true - /file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 - dev: true - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + filelist@1.0.4: dependencies: minimatch: 5.1.6 - dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /filter-obj@1.1.0: - resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} - engines: {node: '>=0.10.0'} - dev: true + filter-obj@1.1.0: {} - /find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: false + find-root@1.1.0: {} - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + find-yarn-workspace-root2@1.2.16: dependencies: micromatch: 4.0.5 pkg-dir: 4.2.0 - dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: dependencies: flatted: 3.2.9 keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} + flat-cache@4.0.1: dependencies: flatted: 3.3.1 keyv: 4.5.4 - dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true + flatted@3.2.9: {} - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true + flatted@3.3.1: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true - /form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} - dev: true + form-data-encoder@2.1.4: {} - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true - /formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 - dev: true - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true + fraction.js@4.3.7: {} - /front-matter@4.0.2: - resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} + front-matter@4.0.2: dependencies: js-yaml: 3.14.1 - dev: true - /fs-exists-sync@0.1.0: - resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==} - engines: {node: '>=0.10.0'} - dev: true + fs-exists-sync@0.1.0: {} - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /fuse.js@7.0.0: - resolution: {integrity: sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==} - engines: {node: '>=10'} - dev: true + fuse.js@7.0.0: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} - engines: {node: '>=18'} - dev: true + get-east-asian-width@1.2.0: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - dev: true - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true + get-package-type@0.1.0: {} - /get-stdin@6.0.0: - resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} - engines: {node: '>=4'} - dev: true + get-stdin@6.0.0: {} - /get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - dev: true + get-stdin@9.0.0: {} - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + get-stream@5.2.0: dependencies: pump: 3.0.0 - dev: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true + get-stream@8.0.1: {} - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - dev: true - /get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + get-tsconfig@4.7.3: dependencies: resolve-pkg-maps: 1.0.0 - dev: true - /get-uri@6.0.3: - resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} - engines: {node: '>= 14'} + get-uri@6.0.3: dependencies: basic-ftp: 5.0.4 data-uri-to-buffer: 6.0.2 @@ -5435,25 +8414,16 @@ packages: fs-extra: 11.2.0 transitivePeerDependencies: - supports-color - dev: true - /git-config-path@1.0.1: - resolution: {integrity: sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==} - engines: {node: '>=0.10.0'} + git-config-path@1.0.1: dependencies: extend-shallow: 2.0.1 fs-exists-sync: 0.1.0 homedir-polyfill: 1.0.3 - dev: true - /git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - dev: true + git-hooks-list@3.1.0: {} - /gitmoji-cli@9.2.0: - resolution: {integrity: sha512-U/uKNO+Z4tcFdP5Ip2FBihsGgTvyX8RJVx4twgnv6JB+MKcvqjIE2RiJvxE2uu7dq4wafTzGDpHL3KDiJV1hxQ==} - engines: {node: '>=18'} - hasBin: true + gitmoji-cli@9.2.0: dependencies: chalk: 5.3.0 conf: 12.0.0 @@ -5470,36 +8440,24 @@ packages: validator: 13.11.0 transitivePeerDependencies: - supports-color - dev: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.3.10: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.3 minipass: 7.0.4 path-scurry: 1.10.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -5507,52 +8465,32 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} + glob@8.1.0: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 minimatch: 5.1.6 once: 1.4.0 - dev: false - /global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} + global-dirs@3.0.1: dependencies: ini: 2.0.0 - dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + globals@11.12.0: {} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - /globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - dev: true + globals@14.0.0: {} - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.3: dependencies: define-properties: 1.2.1 - dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -5560,28 +8498,20 @@ packages: ignore: 5.3.0 merge2: 1.4.1 slash: 3.0.0 - dev: true - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@13.2.2: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 ignore: 5.3.1 merge2: 1.4.1 slash: 4.0.0 - dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 - dev: true - /got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} + got@11.8.6: dependencies: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 @@ -5594,11 +8524,8 @@ packages: lowercase-keys: 2.0.0 p-cancelable: 2.1.1 responselike: 2.0.1 - dev: true - /got@12.6.1: - resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} - engines: {node: '>=14.16'} + got@12.6.1: dependencies: '@sindresorhus/is': 5.6.0 '@szmarczak/http-timer': 5.0.1 @@ -5611,177 +8538,106 @@ packages: lowercase-keys: 3.0.0 p-cancelable: 3.0.0 responselike: 3.0.0 - dev: true - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true + graceful-fs@4.2.10: {} - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graceful-fs@4.2.11: {} - /grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: true + grapheme-splitter@1.0.4: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true + hard-rejection@2.1.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@2.0.0: - resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} - engines: {node: '>=0.10.0'} + has-flag@2.0.0: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - dev: true - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - /header-case@1.0.1: - resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} + header-case@1.0.1: dependencies: no-case: 2.3.2 upper-case: 1.1.3 - dev: true - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 - /homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} + homedir-polyfill@1.0.3: dependencies: parse-passwd: 1.0.0 - dev: true - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hosted-git-info@2.8.9: {} - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + html-escaper@2.0.2: {} - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true + http-cache-semantics@4.1.1: {} - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true - /http-proxy-agent@7.0.1: - resolution: {integrity: sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==} - engines: {node: '>= 14'} + http-proxy-agent@7.0.1: dependencies: agent-base: 7.1.0 debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true - /http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} + http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - dev: true - /http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} + http2-wrapper@2.2.1: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - dev: true - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color - /https-proxy-agent@7.0.3: - resolution: {integrity: sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==} - engines: {node: '>= 14'} + https-proxy-agent@7.0.3: dependencies: agent-base: 7.1.0 debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true - /human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - dev: true + human-id@1.0.2: {} - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true + human-signals@5.0.0: {} - /hygen@6.2.11: - resolution: {integrity: sha512-t6/zLI2XozP5gvV74nnl8LZSbwpVNFUkUs/O9DwuOdiiBbws5k4AQNVwKZ9FGzcKjdJ5EBBYkVzlcUHkLyY0FQ==} - hasBin: true + hygen@6.2.11: dependencies: '@types/node': 17.0.45 chalk: 4.1.2 @@ -5799,104 +8655,55 @@ packages: yargs-parser: 21.1.1 transitivePeerDependencies: - supports-color - dev: true - /hyperlinker@1.0.0: - resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} - engines: {node: '>=4'} - dev: true + hyperlinker@1.0.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore-walk@4.0.1: - resolution: {integrity: sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==} - engines: {node: '>=10'} + ignore-walk@4.0.1: dependencies: minimatch: 3.1.2 - dev: true - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.0: {} - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.1: {} - /immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - dev: false + immediate@3.0.6: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - /import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - dev: true + import-lazy@4.0.0: {} - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true + import-local@3.1.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /inflection@1.13.4: - resolution: {integrity: sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==} - engines: {'0': node >= 0.4.0} - dev: true + inflection@1.13.4: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inherits@2.0.4: {} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true + ini@1.3.8: {} - /ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - dev: true + ini@2.0.0: {} - /inquirer-autocomplete-prompt@3.0.1(inquirer@9.2.17): - resolution: {integrity: sha512-DQBXwX2fVQPVUzu4v4lGgtNgyjcX2+rTyphb2MeSOQh3xUayKAfHAF4y0KgsMi06m6ZiR3xIOdzMZMfQgX2m9w==} - engines: {node: '>=16'} - peerDependencies: - inquirer: ^9.1.0 + inquirer-autocomplete-prompt@3.0.1(inquirer@9.2.17): dependencies: ansi-escapes: 6.2.0 figures: 5.0.0 @@ -5904,11 +8711,8 @@ packages: picocolors: 1.0.0 run-async: 2.4.1 rxjs: 7.8.1 - dev: true - /inquirer@9.2.17: - resolution: {integrity: sha512-Vr3Ia2ud5sGnioURkE69endl4SkeJcMzTF6SosKcX5GALJfId7C+JvO5ZZb6y1LOXnEofCPbwzoQ1q0e8Gaduw==} - engines: {node: '>=18'} + inquirer@9.2.17: dependencies: '@ljharb/through': 2.3.13 ansi-escapes: 4.3.2 @@ -5925,355 +8729,192 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: true - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.4 - dev: true - /inversify-logger-middleware@3.1.0: - resolution: {integrity: sha512-jKwwuQ3cDwCasgSdgUyF3DTlIvcfAVqcs3ViMXrKj5L7AqVP5hd2dnrHr3v8XZf984t6fsj+1Wic43A5WDtkEA==} + inversify-logger-middleware@3.1.0: dependencies: chalk: 2.3.0 - dev: false - /inversify@6.0.2: - resolution: {integrity: sha512-i9m8j/7YIv4mDuYXUAcrpKPSaju/CIly9AHK5jvCBeoiM/2KEsuCQTTP+rzSWWpLYWRukdXFSl6ZTk2/uumbiA==} - dev: false + inversify@6.0.2: {} - /ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} + ip-address@9.0.5: dependencies: jsbn: 1.1.0 sprintf-js: 1.1.3 - dev: true - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.2.1: {} - /is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: false + is-arrayish@0.3.2: {} - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} + is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.2.0 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + is-builtin-module@3.2.1: dependencies: builtin-modules: 3.3.0 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.13.1: dependencies: hasown: 2.0.2 - - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} + + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - dev: true + is-extendable@0.1.1: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true + is-generator-fn@2.1.0: {} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-in-ci@0.1.0: - resolution: {integrity: sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==} - engines: {node: '>=18'} - hasBin: true - dev: true + is-in-ci@0.1.0: {} - /is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} + is-installed-globally@0.4.0: dependencies: global-dirs: 3.0.1 is-path-inside: 3.0.3 - dev: true - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-interactive@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} - engines: {node: '>=12'} - dev: true + is-interactive@2.0.0: {} - /is-lower-case@1.1.3: - resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} + is-lower-case@1.1.3: dependencies: lower-case: 1.1.4 - dev: true - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true + is-map@2.0.2: {} - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.3: {} - /is-npm@6.0.0: - resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-npm@6.0.0: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: true + is-obj@2.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-obj@1.1.0: {} - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: true + is-plain-obj@4.1.0: {} - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-object@5.0.0: {} - /is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.5 - dev: false - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true + is-set@2.0.2: {} - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 - dev: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-stream@3.0.0: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.15 - dev: true - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true + is-typedarray@1.0.0: {} - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - dev: true + is-unicode-supported@1.3.0: {} - /is-unicode-supported@2.0.0: - resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} - engines: {node: '>=18'} - dev: true + is-unicode-supported@2.0.0: {} - /is-upper-case@1.1.2: - resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} + is-upper-case@1.1.2: dependencies: upper-case: 1.1.3 - dev: true - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true + is-weakmap@2.0.1: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + is-weakset@2.0.2: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + is-windows@1.0.2: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@2.0.0: {} - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true + istanbul-lib-coverage@3.2.2: {} - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.24.4 '@babel/parser': 7.24.4 @@ -6282,11 +8923,8 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-instrument@6.0.1: - resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} - engines: {node: '>=10'} + istanbul-lib-instrument@6.0.1: dependencies: '@babel/core': 7.24.4 '@babel/parser': 7.24.4 @@ -6295,78 +8933,54 @@ packages: semver: 7.6.0 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 - dev: true - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + istanbul-lib-source-maps@4.0.1: dependencies: debug: 4.3.4(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} + istanbul-reports@3.1.6: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - dev: true - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.4 set-function-name: 2.0.1 - dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + jackspeak@2.3.6: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true + jake@10.8.7: dependencies: async: 3.2.5 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 - dev: true - /jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 jest-util: 29.7.0 p-limit: 3.1.0 - dev: true - /jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-circus@29.7.0: dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -6391,17 +9005,8 @@ packages: transitivePeerDependencies: - babel-plugin-macros - supports-color - dev: true - /jest-cli@29.7.0(@types/node@20.12.7): - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest-cli@29.7.0(@types/node@20.12.7): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 @@ -6419,19 +9024,8 @@ packages: - babel-plugin-macros - supports-color - ts-node - dev: true - /jest-config@29.7.0(@types/node@20.12.7): - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true + jest-config@29.7.0(@types/node@20.12.7): dependencies: '@babel/core': 7.24.4 '@jest/test-sequencer': 29.7.0 @@ -6459,39 +9053,27 @@ packages: transitivePeerDependencies: - babel-plugin-macros - supports-color - dev: true - /jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-diff@29.7.0: dependencies: chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 - dev: true - /jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-docblock@29.7.0: dependencies: detect-newline: 3.1.0 - dev: true - /jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-each@29.7.0: dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 jest-get-type: 29.6.3 jest-util: 29.7.0 pretty-format: 29.7.0 - dev: true - /jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-environment-node@29.7.0: dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -6499,16 +9081,10 @@ packages: '@types/node': 20.12.7 jest-mock: 29.7.0 jest-util: 29.7.0 - dev: true - /jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-get-type@29.6.3: {} - /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-haste-map@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 @@ -6523,29 +9099,20 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 - dev: true - /jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-leak-detector@29.7.0: dependencies: jest-get-type: 29.6.3 pretty-format: 29.7.0 - dev: true - /jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-matcher-utils@29.7.0: dependencies: chalk: 4.1.2 jest-diff: 29.7.0 jest-get-type: 29.6.3 pretty-format: 29.7.0 - dev: true - /jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@29.7.0: dependencies: '@babel/code-frame': 7.24.2 '@jest/types': 29.6.3 @@ -6556,47 +9123,27 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 - dev: true - /jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/node': 20.12.7 jest-util: 29.7.0 - dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): dependencies: jest-resolve: 29.7.0 - dev: true - /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-regex-util@29.6.3: {} - /jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve-dependencies@29.7.0: dependencies: jest-regex-util: 29.6.3 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color - dev: true - /jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve@29.7.0: dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 @@ -6607,11 +9154,8 @@ packages: resolve: 1.22.8 resolve.exports: 2.0.2 slash: 3.0.0 - dev: true - /jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runner@29.7.0: dependencies: '@jest/console': 29.7.0 '@jest/environment': 29.7.0 @@ -6636,11 +9180,8 @@ packages: source-map-support: 0.5.13 transitivePeerDependencies: - supports-color - dev: true - /jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runtime@29.7.0: dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -6666,11 +9207,8 @@ packages: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - dev: true - /jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-snapshot@29.7.0: dependencies: '@babel/core': 7.24.4 '@babel/generator': 7.24.4 @@ -6694,11 +9232,8 @@ packages: semver: 7.6.0 transitivePeerDependencies: - supports-color - dev: true - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/node': 20.12.7 @@ -6706,11 +9241,8 @@ packages: ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - dev: true - /jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-validate@29.7.0: dependencies: '@jest/types': 29.6.3 camelcase: 6.3.0 @@ -6718,11 +9250,8 @@ packages: jest-get-type: 29.6.3 leven: 3.1.0 pretty-format: 29.7.0 - dev: true - /jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-watcher@29.7.0: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 @@ -6732,27 +9261,15 @@ packages: emittery: 0.13.1 jest-util: 29.7.0 string-length: 4.0.2 - dev: true - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@29.7.0: dependencies: '@types/node': 20.12.7 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jest@29.7.0(@types/node@20.12.7): - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest@29.7.0(@types/node@20.12.7): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 @@ -6763,107 +9280,59 @@ packages: - babel-plugin-macros - supports-color - ts-node - dev: true - /jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - dev: true + jju@1.4.0: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@4.0.0: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - dev: true + jsbn@1.1.0: {} - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true + jsesc@0.5.0: {} - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true + jsesc@2.5.2: {} - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true + jsesc@3.0.2: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@1.0.0: {} - /json-schema-typed@8.0.1: - resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} - dev: true + json-schema-typed@8.0.1: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + json5@2.2.3: {} - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - dev: true + jsonpointer@5.0.1: {} - /jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} + jsonwebtoken@9.0.2: dependencies: jws: 3.2.2 lodash.includes: 4.3.0 @@ -6875,315 +9344,181 @@ packages: lodash.once: 4.1.1 ms: 2.1.3 semver: 7.6.0 - dev: true - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.7 array.prototype.flat: 1.3.2 object.assign: 4.1.5 object.values: 1.1.7 - dev: true - /jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + jwa@1.4.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - dev: true - /jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@3.2.2: dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 - dev: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + kind-of@6.0.3: {} - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true + kleur@3.0.3: {} - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - dev: true + kleur@4.1.5: {} - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true + language-subtag-registry@0.3.22: {} - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + language-tags@1.0.9: dependencies: language-subtag-registry: 0.3.22 - dev: true - /latest-version@7.0.0: - resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} - engines: {node: '>=14.16'} + latest-version@7.0.0: dependencies: package-json: 8.1.1 - dev: true - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true + leven@3.1.0: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /li@1.3.0: - resolution: {integrity: sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw==} - dev: true + li@1.3.0: {} - /lie@3.1.1: - resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + lie@3.1.1: dependencies: immediate: 3.0.6 - dev: false - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lines-and-columns@1.2.4: {} - /load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} + load-yaml-file@0.2.0: dependencies: graceful-fs: 4.2.11 js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: true - /localforage@1.10.0: - resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + localforage@1.10.0: dependencies: lie: 3.1.1 - dev: false - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash.find@4.6.0: - resolution: {integrity: sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==} - dev: true + lodash.find@4.6.0: {} - /lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - dev: true + lodash.includes@4.3.0: {} - /lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - dev: true + lodash.isboolean@3.0.3: {} - /lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - dev: true + lodash.isinteger@4.0.4: {} - /lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - dev: true + lodash.isnumber@3.0.3: {} - /lodash.isobject@3.0.2: - resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==} - dev: true + lodash.isobject@3.0.2: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true + lodash.isplainobject@4.0.6: {} - /lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - dev: true + lodash.isstring@4.0.1: {} - /lodash.keys@4.2.0: - resolution: {integrity: sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ==} - dev: true + lodash.keys@4.2.0: {} - /lodash.mapvalues@4.6.0: - resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==} - dev: true + lodash.mapvalues@4.6.0: {} - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true + lodash.memoize@4.1.2: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - dev: true + lodash.once@4.1.1: {} - /lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true + lodash.startcase@4.4.0: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /log-symbols@6.0.0: - resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} - engines: {node: '>=18'} + log-symbols@6.0.0: dependencies: chalk: 5.3.0 is-unicode-supported: 1.3.0 - dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - /lower-case-first@1.0.2: - resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} + lower-case-first@1.0.2: dependencies: lower-case: 1.1.4 - dev: true - /lower-case@1.1.4: - resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} - dev: true + lower-case@1.1.4: {} - /lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: true + lowercase-keys@2.0.0: {} - /lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + lowercase-keys@3.0.0: {} - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - dev: true + lru-cache@10.2.0: {} - /lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + lru-cache@4.1.5: dependencies: pseudomap: 1.0.2 yallist: 2.1.2 - dev: true - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: true + lru-cache@7.18.3: {} - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} + magic-string@0.27.0: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + make-dir@4.0.0: dependencies: semver: 7.6.0 - dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + makeerror@1.0.12: dependencies: tmpl: 1.0.5 - dev: true - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true + map-obj@1.0.1: {} - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + map-obj@4.3.0: {} - /memfs-or-file-map-to-github-branch@1.2.1: - resolution: {integrity: sha512-I/hQzJ2a/pCGR8fkSQ9l5Yx+FQ4e7X6blNHyWBm2ojeFLT3GVzGkTj7xnyWpdclrr7Nq4dmx3xrvu70m3ypzAQ==} + memfs-or-file-map-to-github-branch@1.2.1: dependencies: '@octokit/rest': 18.12.0 transitivePeerDependencies: - encoding - dev: true - /memoize-one@5.2.1: - resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} - dev: false + memoize-one@5.2.1: {} - /memoize-one@6.0.0: - resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} - dev: false + memoize-one@6.0.0: {} - /meow@13.2.0: - resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} - engines: {node: '>=18'} - dev: true + meow@13.2.0: {} - /meow@6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} - engines: {node: '>=8'} + meow@6.1.1: dependencies: '@types/minimist': 1.2.5 camelcase-keys: 6.2.2 @@ -7196,177 +9531,85 @@ packages: trim-newlines: 3.0.1 type-fest: 0.13.1 yargs-parser: 18.1.3 - dev: true - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: true - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - dev: true + mime@3.0.0: {} - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true + mimic-fn@4.0.0: {} - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: true + mimic-response@1.0.1: {} - /mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - dev: true + mimic-response@3.1.0: {} - /mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + mimic-response@4.0.0: {} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + min-indent@1.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.3: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} + minimist-options@4.1.0: dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minimist@1.2.8: {} - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + minipass@7.0.4: {} - /mixme@0.5.10: - resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} - engines: {node: '>= 8.0.0'} - dev: true + mixme@0.5.10: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: false - /moment@2.30.1: - resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - dev: false + moment@2.30.1: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + mute-stream@1.0.0: {} - /mylas@2.1.13: - resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==} - engines: {node: '>=12.0.0'} - dev: true + mylas@2.1.13: {} - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + nanoid@3.3.7: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - dev: true + netmask@2.0.2: {} - /next@14.1.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true + next@14.1.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0): dependencies: '@next/env': 14.1.4 '@swc/helpers': 0.5.2 @@ -7390,193 +9633,115 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - dev: false - /no-case@2.3.2: - resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + no-case@2.3.2: dependencies: lower-case: 1.1.4 - dev: true - /node-cleanup@2.1.2: - resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} - dev: true + node-cleanup@2.1.2: {} - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - dev: true + node-domexception@1.0.0: {} - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - /node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - dev: true - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true + node-int64@0.4.0: {} - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.14: {} - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-range@0.1.2: {} - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: true + normalize-url@6.1.0: {} - /normalize-url@8.0.0: - resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} - engines: {node: '>=14.16'} - dev: true + normalize-url@8.0.0: {} - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@5.1.0: dependencies: path-key: 4.0.0 - dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + object-assign@4.1.1: {} - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true + object-inspect@1.13.1: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} + object.entries@1.1.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + object.groupby@1.0.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 - dev: true - /object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} - engines: {node: '>= 0.4'} + object.hasown@1.1.4: dependencies: define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} + object.values@1.1.7: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 - dev: true - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} + object.values@1.2.0: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 - dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 @@ -7584,11 +9749,8 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -7599,11 +9761,8 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /ora@8.0.1: - resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} - engines: {node: '>=18'} + ora@8.0.1: dependencies: chalk: 5.3.0 cli-cursor: 4.0.0 @@ -7614,79 +9773,42 @@ packages: stdin-discarder: 0.2.2 string-width: 7.0.0 strip-ansi: 7.1.0 - dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + os-tmpdir@1.0.2: {} - /outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - dev: true + outdent@0.5.0: {} - /override-require@1.1.1: - resolution: {integrity: sha512-eoJ9YWxFcXbrn2U8FKT6RV+/Kj7fiGAB1VvHzbYKt8xM5ZuKZgCGvnHzDxmreEjcBH28ejg5MiOH4iyY1mQnkg==} - dev: true + override-require@1.1.1: {} - /p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - dev: true + p-cancelable@2.1.1: {} - /p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - dev: true + p-cancelable@3.0.0: {} - /p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} + p-filter@2.1.0: dependencies: p-map: 2.1.0 - dev: true - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: true + p-map@2.1.0: {} - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /pac-proxy-agent@7.0.1: - resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} - engines: {node: '>= 14'} + pac-proxy-agent@7.0.1: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 @@ -7698,280 +9820,160 @@ packages: socks-proxy-agent: 8.0.2 transitivePeerDependencies: - supports-color - dev: true - /pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} + pac-resolver@7.0.1: dependencies: degenerator: 5.0.1 netmask: 2.0.2 - dev: true - /package-json@8.1.1: - resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} - engines: {node: '>=14.16'} + package-json@8.1.1: dependencies: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 semver: 7.6.0 - dev: true - /param-case@2.1.1: - resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + param-case@2.1.1: dependencies: no-case: 2.3.2 - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - /parse-diff@0.7.1: - resolution: {integrity: sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg==} - dev: true + parse-diff@0.7.1: {} - /parse-git-config@2.0.3: - resolution: {integrity: sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A==} - engines: {node: '>=6'} + parse-git-config@2.0.3: dependencies: expand-tilde: 2.0.2 git-config-path: 1.0.1 ini: 1.3.8 - dev: true - /parse-github-url@1.0.2: - resolution: {integrity: sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==} - engines: {node: '>=0.10.0'} - hasBin: true - dev: true + parse-github-url@1.0.2: {} - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - /parse-link-header@2.0.0: - resolution: {integrity: sha512-xjU87V0VyHZybn2RrCX5TIFGxTVZE6zqqZWMPlIKiSKuWh/X5WZdt+w1Ki1nXB+8L/KtL+nZ4iq+sfI6MrhhMw==} + parse-link-header@2.0.0: dependencies: xtend: 4.0.2 - dev: true - /parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - dev: true + parse-passwd@1.0.0: {} - /pascal-case@2.0.1: - resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} + pascal-case@2.0.1: dependencies: camel-case: 3.0.0 upper-case-first: 1.1.2 - dev: true - /path-case@2.1.1: - resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} + path-case@2.1.1: dependencies: no-case: 2.3.2 - dev: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + path-exists@5.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + path-key@4.0.0: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-parse@1.0.7: {} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.10.1: dependencies: lru-cache: 10.2.0 minipass: 7.0.4 - dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + path-type@4.0.0: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + picomatch@2.3.1: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + pify@4.0.1: {} - /pinpoint@1.1.0: - resolution: {integrity: sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg==} - dev: true + pinpoint@1.1.0: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true + pirates@4.0.6: {} - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - /plimit-lit@1.6.1: - resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==} - engines: {node: '>=12'} + plimit-lit@1.6.1: dependencies: queue-lit: 1.5.2 - dev: true - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true + pluralize@8.0.0: {} - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + possible-typed-array-names@1.0.0: {} - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss-value-parser@4.2.0: {} - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.31: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.2.0 - dev: false - /postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.38: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.2.0 - dev: true - /preferred-pm@3.1.2: - resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} - engines: {node: '>=10'} + preferred-pm@3.1.2: dependencies: find-up: 5.0.0 find-yarn-workspace-root2: 1.2.16 path-exists: 4.0.0 which-pm: 2.0.0 - dev: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier-plugin-packagejson@2.4.14(prettier@3.2.5): - resolution: {integrity: sha512-sli+gV5tW7uxvzDZQscaBtSfbyAW2ToL6n/HGt51PipwX9vI7M54vefG0mKSfklVkT29TNGO6Mo6g8c6Z79gmw==} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true + prettier-plugin-packagejson@2.4.14(prettier@3.2.5): dependencies: prettier: 3.2.5 sort-package-json: 2.10.0 synckit: 0.9.0 - dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prettier@2.8.8: {} - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.2.5: {} - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 - dev: true - - /prettyjson@1.2.5: - resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==} - hasBin: true + + prettyjson@1.2.5: dependencies: colors: 1.4.0 minimist: 1.2.8 - dev: true - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: false + progress@2.0.3: {} - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - dev: true - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - /proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - dev: true + proto-list@1.2.4: {} - /proxy-agent@6.4.0: - resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} - engines: {node: '>= 14'} + proxy-agent@6.4.0: dependencies: agent-base: 7.1.0 debug: 4.3.4(supports-color@5.5.0) @@ -7983,125 +9985,72 @@ packages: socks-proxy-agent: 8.0.2 transitivePeerDependencies: - supports-color - dev: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@1.1.0: {} - /pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: true + pseudomap@1.0.2: {} - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /pupa@3.1.0: - resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} - engines: {node: '>=12.20'} + pupa@3.1.0: dependencies: escape-goat: 4.0.0 - dev: true - /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} - dev: true + pure-rand@6.0.4: {} - /purify-ts@2.0.3: - resolution: {integrity: sha512-RiPOlX4L+eggnbEdwGV34t7iRSPK5d37nKPZXSu8G5mTUhxbEjPpThRFuEV4GL/T6zEJQ+ZeiuNoBk61VJvszg==} + purify-ts@2.0.3: dependencies: '@types/json-schema': 7.0.15 - dev: false - /qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} - engines: {node: '>=0.6'} + qs@6.11.2: dependencies: side-channel: 1.0.4 - dev: true - /query-string@7.1.3: - resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} - engines: {node: '>=6'} + query-string@7.1.3: dependencies: decode-uri-component: 0.2.2 filter-obj: 1.1.0 split-on-first: 1.1.0 strict-uri-encode: 2.0.0 - dev: true - /queue-lit@1.5.2: - resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==} - engines: {node: '>=12'} - dev: true + queue-lit@1.5.2: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true + quick-lru@4.0.1: {} - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: true + quick-lru@5.1.1: {} - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true + rc@1.2.8: dependencies: deep-extend: 0.6.0 ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 - dev: true - /react-chartjs-2@3.3.0(chart.js@3.9.1)(react@18.2.0): - resolution: {integrity: sha512-4Mt0SR2aiUbWi/4762odRBYSnbNKSs4HWc0o3IW43py5bMfmfpeZU95w6mbvtuLZH/M3GsPJMU8DvDc+5U9blQ==} - peerDependencies: - chart.js: ^3.5.0 - react: ^16.8.0 || ^17.0.0 + react-chartjs-2@3.3.0(chart.js@3.9.1)(react@18.2.0): dependencies: chart.js: 3.9.1 react: 18.2.0 - dev: false - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 + react-dom@18.2.0(react@18.2.0): dependencies: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 - dev: false - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@16.13.1: {} - /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: false + react-is@17.0.2: {} - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + react-is@18.2.0: {} - /react-select@5.8.0(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-select@5.8.0(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0): dependencies: '@babel/runtime': 7.24.4 '@emotion/cache': 11.11.0 @@ -8116,25 +10065,15 @@ packages: use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.75)(react@18.2.0) transitivePeerDependencies: - '@types/react' - dev: false - /react-spring@8.0.27(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-nDpWBe3ZVezukNRandTeLSPcwwTMjNVu1IDq9qA/AMiUqHuRN4BeSWvKr3eIxxg1vtiYiOLy4FqdfCP5IoP77g==} - peerDependencies: - react: '>= 16.8.0' - react-dom: '>= 16.8.0' + react-spring@8.0.27(react-dom@18.2.0)(react@18.2.0): dependencies: '@babel/runtime': 7.24.4 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: false - /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' + react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): dependencies: '@babel/runtime': 7.24.4 dom-helpers: 5.2.1 @@ -8142,93 +10081,58 @@ packages: prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: false - /react-window@1.8.10(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Y0Cx+dnU6NLa5/EvoHukUD0BklJ8qITCtVEPY1C/nL8wwoZ0b5aEw8Ff1dOVHw7fCzMt55XfJDd8S8W8LCaUCg==} - engines: {node: '>8.0.0'} - peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-window@1.8.10(react-dom@18.2.0)(react@18.2.0): dependencies: '@babel/runtime': 7.24.4 memoize-one: 5.2.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: false - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} + react@18.2.0: dependencies: loose-envify: 1.4.0 - dev: false - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - dev: true - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 - dev: true - /read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /readline-sync@1.4.10: - resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} - engines: {node: '>= 0.8.0'} - dev: true + readline-sync@1.4.10: {} - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} + redent@3.0.0: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 - dev: true - /reflect-metadata@0.2.2: - resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - dev: false + reflect-metadata@0.2.2: {} - /reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} - engines: {node: '>= 0.4'} + reflect.getprototypeof@1.0.4: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -8236,271 +10140,156 @@ packages: get-intrinsic: 1.2.4 globalthis: 1.0.3 which-builtin-type: 1.1.3 - dev: true - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true + regenerator-runtime@0.13.11: {} - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regenerator-runtime@0.14.1: {} - /regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - dev: true + regexp-tree@0.1.27: {} - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.1 - dev: true - /registry-auth-token@5.0.2: - resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} - engines: {node: '>=14'} + registry-auth-token@5.0.2: dependencies: '@pnpm/npm-conf': 2.2.2 - dev: true - /registry-url@6.0.1: - resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} - engines: {node: '>=12'} + registry-url@6.0.1: dependencies: rc: 1.2.8 - dev: true - /regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true + regjsparser@0.10.0: dependencies: jsesc: 0.5.0 - dev: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-from-string@2.0.2: {} - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true + require-main-filename@2.0.0: {} - /resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - dev: true + resolve-alpn@1.2.1: {} - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + resolve-pkg-maps@1.0.0: {} - /resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - dev: true + resolve.exports@2.0.2: {} - /resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + resolve@1.19.0: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 - dev: true - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true + resolve@2.0.0-next.5: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + responselike@2.0.1: dependencies: lowercase-keys: 2.0.0 - dev: true - /responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} + responselike@3.0.0: dependencies: lowercase-keys: 3.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restore-cursor@4.0.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - dev: true + retry@0.12.0: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /rimraf@5.0.5: - resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} - engines: {node: '>=14'} - hasBin: true + rimraf@5.0.5: dependencies: glob: 10.3.10 - dev: true - /rollup@2.78.0: - resolution: {integrity: sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg==} - engines: {node: '>=10.0.0'} - hasBin: true + rollup@2.78.0: optionalDependencies: fsevents: 2.3.3 - dev: false - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true + run-async@2.4.1: {} - /run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} - dev: true + run-async@3.0.0: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.1: dependencies: tslib: 2.6.2 - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + scheduler@0.23.0: dependencies: loose-envify: 1.4.0 - dev: false - /semver-diff@4.0.0: - resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} - engines: {node: '>=12'} + semver-diff@4.0.0: dependencies: semver: 7.6.0 - dev: true - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + semver@5.7.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + semver@6.3.1: {} - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true + semver@7.6.0: dependencies: lru-cache: 6.0.0 - /sentence-case@2.1.1: - resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} + sentence-case@2.1.1: dependencies: no-case: 2.3.2 upper-case-first: 1.1.2 - dev: true - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true + set-blocking@2.0.0: {} - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -8508,115 +10297,66 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} + set-function-name@2.0.1: dependencies: define-data-property: 1.1.4 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true - /shallowequal@1.1.0: - resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - dev: false + shallowequal@1.1.0: {} - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true + shebang-regex@1.0.0: {} - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true + shell-quote@1.8.1: {} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.4: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 object-inspect: 1.13.1 - dev: true - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + side-channel@1.0.6: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 - dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: {} - /simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 - dev: false - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true + sisteransi@1.0.5: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true + slash@4.0.0: {} - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true + smart-buffer@4.2.0: {} - /smartwrap@2.0.2: - resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} - engines: {node: '>=6'} - hasBin: true + smartwrap@2.0.2: dependencies: array.prototype.flat: 1.3.2 breakword: 1.0.6 @@ -8624,41 +10364,27 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 15.4.1 - dev: true - /snake-case@2.1.0: - resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} + snake-case@2.1.0: dependencies: no-case: 2.3.2 - dev: true - /socks-proxy-agent@8.0.2: - resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} - engines: {node: '>= 14'} + socks-proxy-agent@8.0.2: dependencies: agent-base: 7.1.0 debug: 4.3.4(supports-color@5.5.0) socks: 2.7.3 transitivePeerDependencies: - supports-color - dev: true - /socks@2.7.3: - resolution: {integrity: sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - deprecated: please use 2.7.4 or 2.8.1 to fix package-lock issue + socks@2.7.3: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 - dev: true - /sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - dev: true + sort-object-keys@1.1.3: {} - /sort-package-json@2.10.0: - resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} - hasBin: true + sort-package-json@2.10.0: dependencies: detect-indent: 7.0.1 detect-newline: 4.0.1 @@ -8668,148 +10394,87 @@ packages: is-plain-obj: 4.1.0 semver: 7.6.0 sort-object-keys: 1.1.3 - dev: true - /source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} + source-map-js@1.2.0: {} - /source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: false + source-map@0.5.7: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /spawn-command@0.0.2: - resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} - dev: true + spawn-command@0.0.2: {} - /spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 signal-exit: 3.0.7 - dev: true - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.16 - dev: true - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + spdx-exceptions@2.3.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.16 - dev: true - /spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} - dev: true + spdx-license-ids@3.0.16: {} - /split-on-first@1.1.0: - resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} - engines: {node: '>=6'} - dev: true + split-on-first@1.1.0: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - dev: true + sprintf-js@1.1.3: {} - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - dev: true - /stacktrace-parser@0.1.10: - resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} - engines: {node: '>=6'} + stacktrace-parser@0.1.10: dependencies: type-fest: 0.7.1 - dev: false - /stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} - engines: {node: '>=18'} - dev: true + stdin-discarder@0.2.2: {} - /stream-transform@2.1.3: - resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + stream-transform@2.1.3: dependencies: mixme: 0.5.10 - dev: true - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false + streamsearch@1.1.0: {} - /strict-uri-encode@2.0.0: - resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} - engines: {node: '>=4'} - dev: true + strict-uri-encode@2.0.0: {} - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} + string-length@4.0.2: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 - dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string-width@7.0.0: - resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} - engines: {node: '>=18'} + string-width@7.0.0: dependencies: emoji-regex: 10.3.0 get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 - dev: true - /string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} + string.prototype.matchall@4.0.11: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -8823,103 +10488,57 @@ packages: regexp.prototype.flags: 1.5.2 set-function-name: 2.0.2 side-channel: 1.0.6 - dev: true - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true + strip-bom@4.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true + strip-final-newline@3.0.0: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 - dev: true - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: true + strip-json-comments@2.0.1: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /stubborn-fs@1.2.5: - resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} - dev: true + stubborn-fs@1.2.5: {} - /styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} - engines: {node: '>=10'} - peerDependencies: - react: '>= 16.8.0' - react-dom: '>= 16.8.0' - react-is: '>= 16.8.0' + styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0): dependencies: '@babel/helper-module-imports': 7.22.15 '@babel/traverse': 7.24.1(supports-color@5.5.0) @@ -8936,28 +10555,14 @@ packages: supports-color: 5.5.0 transitivePeerDependencies: - '@babel/core' - dev: false - /styled-jsx@5.1.1(@babel/core@7.24.4)(react@18.2.0): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true + styled-jsx@5.1.1(@babel/core@7.24.4)(react@18.2.0): dependencies: '@babel/core': 7.24.4 client-only: 0.0.1 react: 18.2.0 - dev: false - /styled-system@5.1.5: - resolution: {integrity: sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==} + styled-system@5.1.5: dependencies: '@styled-system/background': 5.1.2 '@styled-system/border': 5.1.5 @@ -8972,165 +10577,86 @@ packages: '@styled-system/typography': 5.1.2 '@styled-system/variant': 5.1.5 object-assign: 4.1.1 - dev: false - /stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - dev: false + stylis@4.2.0: {} - /supports-color@4.5.0: - resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} - engines: {node: '>=4'} + supports-color@4.5.0: dependencies: has-flag: 2.0.0 - dev: false - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-hyperlinks@1.0.1: - resolution: {integrity: sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==} - engines: {node: '>=4'} + supports-hyperlinks@1.0.1: dependencies: has-flag: 2.0.0 supports-color: 5.5.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + supports-preserve-symlinks-flag@1.0.0: {} - /swap-case@1.1.2: - resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} + swap-case@1.1.2: dependencies: lower-case: 1.1.4 upper-case: 1.1.3 - dev: true - /synckit@0.9.0: - resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} - engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.9.0: dependencies: '@pkgr/core': 0.1.1 tslib: 2.6.2 - dev: true - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - dev: true + term-size@2.2.1: {} - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /tippy.js@6.3.7: - resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + tippy.js@6.3.7: dependencies: '@popperjs/core': 2.11.8 - dev: false - /title-case@2.1.1: - resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} + title-case@2.1.1: dependencies: no-case: 2.3.2 upper-case: 1.1.3 - dev: true - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true + tmpl@1.0.5: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@0.0.3: {} - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true + tree-kill@1.2.2: {} - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true + trim-newlines@3.0.1: {} - /ts-api-utils@1.3.0(typescript@5.4.4): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.3.0(typescript@5.4.4): dependencies: typescript: 5.4.4 - dev: true - /ts-jest@29.1.2(@babel/core@7.24.4)(jest@29.7.0)(typescript@5.4.4): - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true + ts-jest@29.1.2(@babel/core@7.24.4)(jest@29.7.0)(typescript@5.4.4): dependencies: '@babel/core': 7.24.4 bs-logger: 0.2.6 @@ -9143,21 +10669,8 @@ packages: semver: 7.6.0 typescript: 5.4.4 yargs-parser: 21.1.1 - dev: true - /ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 @@ -9174,11 +10687,8 @@ packages: typescript: 5.4.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true - /tsc-alias@1.8.8: - resolution: {integrity: sha512-OYUOd2wl0H858NvABWr/BoSKNERw3N9GTi3rHPK8Iv4O1UyUXIrTTOAZNHsjlVpXFOhpJBVARI1s+rzwLivN3Q==} - hasBin: true + tsc-alias@1.8.8: dependencies: chokidar: 3.5.3 commander: 9.5.0 @@ -9186,37 +10696,24 @@ packages: mylas: 2.1.13 normalize-path: 3.0.0 plimit-lit: 1.6.1 - dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@1.14.1: {} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.6.2: {} - /tsutils@3.21.0(typescript@5.4.4): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsutils@3.21.0(typescript@5.4.4): dependencies: tslib: 1.14.1 typescript: 5.4.4 - dev: true - /tty-table@4.2.3: - resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} - engines: {node: '>=8.0.0'} - hasBin: true + tty-table@4.2.3: dependencies: chalk: 4.1.2 csv: 5.5.3 @@ -9225,59 +10722,26 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 17.7.2 - dev: true - /turbo-darwin-64@1.13.2: - resolution: {integrity: sha512-CCSuD8CfmtncpohCuIgq7eAzUas0IwSbHfI8/Q3vKObTdXyN8vAo01gwqXjDGpzG9bTEVedD0GmLbD23dR0MLA==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + turbo-darwin-64@1.13.2: optional: true - /turbo-darwin-arm64@1.13.2: - resolution: {integrity: sha512-0HySm06/D2N91rJJ89FbiI/AodmY8B3WDSFTVEpu2+8spUw7hOJ8okWOT0e5iGlyayUP9gr31eOeL3VFZkpfCw==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + turbo-darwin-arm64@1.13.2: optional: true - /turbo-linux-64@1.13.2: - resolution: {integrity: sha512-7HnibgbqZrjn4lcfIouzlPu8ZHSBtURG4c7Bedu7WJUDeZo+RE1crlrQm8wuwO54S0siYqUqo7GNHxu4IXbioQ==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + turbo-linux-64@1.13.2: optional: true - /turbo-linux-arm64@1.13.2: - resolution: {integrity: sha512-sUq4dbpk6SNKg/Hkwn256Vj2AEYSQdG96repio894h5/LEfauIK2QYiC/xxAeW3WBMc6BngmvNyURIg7ltrePg==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + turbo-linux-arm64@1.13.2: optional: true - /turbo-windows-64@1.13.2: - resolution: {integrity: sha512-DqzhcrciWq3dpzllJR2VVIyOhSlXYCo4mNEWl98DJ3FZ08PEzcI3ceudlH6F0t/nIcfSItK1bDP39cs7YoZHEA==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + turbo-windows-64@1.13.2: optional: true - /turbo-windows-arm64@1.13.2: - resolution: {integrity: sha512-WnPMrwfCXxK69CdDfS1/j2DlzcKxSmycgDAqV0XCYpK/812KB0KlvsVAt5PjEbZGXkY88pCJ1BLZHAjF5FcbqA==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + turbo-windows-arm64@1.13.2: optional: true - /turbo@1.13.2: - resolution: {integrity: sha512-rX/d9f4MgRT3yK6cERPAkfavIxbpBZowDQpgvkYwGMGDQ0Nvw1nc0NVjruE76GrzXQqoxR1UpnmEP54vBARFHQ==} - hasBin: true + turbo@1.13.2: optionalDependencies: turbo-darwin-64: 1.13.2 turbo-darwin-arm64: 1.13.2 @@ -9285,88 +10749,46 @@ packages: turbo-linux-arm64: 1.13.2 turbo-windows-64: 1.13.2 turbo-windows-arm64: 1.13.2 - dev: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + type-detect@4.0.8: {} - /type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - dev: true + type-fest@0.13.1: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + type-fest@0.6.0: {} - /type-fest@0.7.1: - resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} - engines: {node: '>=8'} - dev: false + type-fest@0.7.1: {} - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + type-fest@0.8.1: {} - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: true + type-fest@1.4.0: {} - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: true + type-fest@2.19.0: {} - /type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - dev: true + type-fest@3.13.1: {} - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.1: dependencies: call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.2: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 @@ -9374,11 +10796,8 @@ packages: gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + typed-array-length@1.0.6: dependencies: call-bind: 1.0.7 for-each: 0.3.3 @@ -9386,72 +10805,41 @@ packages: has-proto: 1.0.3 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - dev: true - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typedarray-to-buffer@3.1.5: dependencies: is-typedarray: 1.0.0 - dev: true - /typescript@5.4.4: - resolution: {integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.4.4: {} - /uint8array-extras@0.3.0: - resolution: {integrity: sha512-erJsJwQ0tKdwuqI0359U8ijkFmfiTcq25JvvzRVc1VP+2son1NJRXhxcAKJmAW3ajM8JSGAfsAXye8g4s+znxA==} - engines: {node: '>=18'} - dev: true + uint8array-extras@0.3.0: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@5.26.5: {} - /unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} + unique-string@3.0.0: dependencies: crypto-random-string: 4.0.0 - dev: true - /universal-user-agent@6.0.1: - resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} - dev: true + universal-user-agent@6.0.1: {} - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true + universalify@0.1.2: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@2.0.1: {} - /update-browserslist-db@1.0.13(browserslist@4.23.0): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.0.13(browserslist@4.23.0): dependencies: browserslist: 4.23.0 escalade: 3.1.2 picocolors: 1.0.0 - /update-notifier@7.0.0: - resolution: {integrity: sha512-Hv25Bh+eAbOLlsjJreVPOs4vd51rrtCrmhyOJtbpAojro34jS4KQaEp4/EvlHJX7jSO42VvEFpkastVyXyIsdQ==} - engines: {node: '>=18'} + update-notifier@7.0.0: dependencies: boxen: 7.1.1 chalk: 5.3.0 @@ -9465,119 +10853,71 @@ packages: semver: 7.6.0 semver-diff: 4.0.0 xdg-basedir: 5.1.0 - dev: true - /upper-case-first@1.1.2: - resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} + upper-case-first@1.1.2: dependencies: upper-case: 1.1.3 - dev: true - /upper-case@1.1.3: - resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} - dev: true + upper-case@1.1.3: {} - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.75)(react@18.2.0): - resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true + use-isomorphic-layout-effect@1.1.2(@types/react@18.2.75)(react@18.2.0): dependencies: '@types/react': 18.2.75 react: 18.2.0 - dev: false - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + util-deprecate@1.0.2: {} - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: false + uuid@9.0.1: {} - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + v8-compile-cache-lib@3.0.1: {} - /v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} - engines: {node: '>=10.12.0'} + v8-to-istanbul@9.2.0: dependencies: '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - dev: true - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /validator@13.11.0: - resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} - engines: {node: '>= 0.10'} - dev: true + validator@13.11.0: {} - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + walker@1.0.8: dependencies: makeerror: 1.0.12 - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} - engines: {node: '>= 8'} - dev: true + web-streams-polyfill@3.2.1: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@3.0.1: {} - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: false + webpack-sources@3.2.3: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /when-exit@2.1.2: - resolution: {integrity: sha512-u9J+toaf3CCxCAzM/484qNAxQE75rFdVgiFEEV8Xps2gzYhf0tx73s1WXDQhkwV17E3MxRMz40m7Ekd2/121Lg==} - dev: true + when-exit@2.1.2: {} - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} + which-builtin-type@1.1.3: dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 @@ -9591,162 +10931,99 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.1 which-typed-array: 1.1.15 - dev: true - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + which-collection@1.0.1: dependencies: is-map: 2.0.2 is-set: 2.0.2 is-weakmap: 2.0.1 is-weakset: 2.0.2 - dev: true - /which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: true + which-module@2.0.1: {} - /which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} + which-pm@2.0.0: dependencies: load-yaml-file: 0.2.0 path-exists: 4.0.0 - dev: true - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 - dev: true - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - /widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} + widest-line@4.0.1: dependencies: string-width: 5.1.2 - dev: true - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + wrappy@1.0.2: {} - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + write-file-atomic@3.0.3: dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - dev: true - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: true - /xcase@2.0.1: - resolution: {integrity: sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==} - dev: true + xcase@2.0.1: {} - /xdg-basedir@5.1.0: - resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} - engines: {node: '>=12'} - dev: true + xdg-basedir@5.1.0: {} - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true + xtend@4.0.2: {} - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true + y18n@4.0.3: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: true + yallist@2.1.2: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@4.0.0: {} - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: false + yaml@1.10.2: {} - /yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - dev: true - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} + yargs@15.4.1: dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -9759,11 +11036,8 @@ packages: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - dev: true - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.1.2 @@ -9772,23 +11046,12 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + yn@3.1.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} - /zx@8.0.1: - resolution: {integrity: sha512-Y+ITW1GQjADk7qgrbhnukMgoNsJmlyx53cUQ6/6NXU+BMBdCbTc6flTOHUctmzKvPjTmdwaddzJY/dbLie9sQg==} - engines: {node: '>= 16.0.0'} - hasBin: true + zx@8.0.1: optionalDependencies: '@types/fs-extra': 11.0.4 '@types/node': 20.12.7 - dev: true From cfe1d364075b21289c597a74acf4329e17b3a17d Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 25 Apr 2024 16:03:46 +0200 Subject: [PATCH 189/253] :sparkles: (core): Hid transport disconnection --- .../core/src/internal/usb/model/Errors.ts | 9 ++ .../internal/usb/transport/UsbHidTransport.ts | 5 ++ .../usb/transport/WebUsbHidTransport.test.ts | 87 +++++++++++++++---- .../usb/transport/WebUsbHidTransport.ts | 55 +++++++++++- .../transport/__mocks__/WebUsbHidTransport.ts | 3 + 5 files changed, 141 insertions(+), 18 deletions(-) diff --git a/packages/core/src/internal/usb/model/Errors.ts b/packages/core/src/internal/usb/model/Errors.ts index 15150fc13..8bd947382 100644 --- a/packages/core/src/internal/usb/model/Errors.ts +++ b/packages/core/src/internal/usb/model/Errors.ts @@ -53,3 +53,12 @@ export class SendApduConcurrencyError implements SdkError { this.originalError = err; } } + +export class DisconnectError implements SdkError { + readonly _tag = "DisconnectError"; + originalError?: Error; + + constructor(readonly err?: Error) { + this.originalError = err; + } +} diff --git a/packages/core/src/internal/usb/transport/UsbHidTransport.ts b/packages/core/src/internal/usb/transport/UsbHidTransport.ts index aca83adc2..dc6e95dff 100644 --- a/packages/core/src/internal/usb/transport/UsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/UsbHidTransport.ts @@ -1,6 +1,7 @@ import { Either } from "purify-ts"; import { Observable } from "rxjs"; +import { SdkError } from "@api/Error"; import { DeviceId } from "@internal/device-model/model/DeviceModel"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { ConnectError } from "@internal/usb/model/Errors"; @@ -25,4 +26,8 @@ export interface UsbHidTransport { connect(params: { deviceId: DeviceId; }): Promise>; + + disconnect(params: { + connectedDevice: InternalConnectedDevice; + }): Promise>; } diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index b27822657..62ca8fd3a 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -1,4 +1,4 @@ -import { Left } from "purify-ts"; +import { Left, Right } from "purify-ts"; import { StaticDeviceModelDataSource } from "@internal/device-model/data/StaticDeviceModelDataSource"; import { @@ -14,6 +14,7 @@ import { UsbHidTransportNotSupportedError, } from "@internal/usb/model/Errors"; import { hidDeviceStubBuilder } from "@internal/usb/model/HIDDevice.stub"; +import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; import { usbHidDeviceConnectionFactoryStubBuilder } from "@internal/usb/service/UsbHidDeviceConnectionFactory.stub"; import { WebUsbHidTransport } from "./WebUsbHidTransport"; @@ -42,11 +43,11 @@ describe("WebUsbHidTransport", () => { }); describe("When WebHID API is not supported", () => { - test("isSupported should return false", () => { + it("should not support the transport", () => { expect(transport.isSupported()).toBe(false); }); - test("startDiscovering should emit an error", (done) => { + it("should emit a startDiscovering error", (done) => { transport.startDiscovering().subscribe({ next: () => { done("Should not emit any value"); @@ -78,12 +79,12 @@ describe("WebUsbHidTransport", () => { global.navigator = undefined as unknown as Navigator; }); - it("isSupported should return true", () => { + it("should support the transport", () => { expect(transport.isSupported()).toBe(true); }); describe("startDiscovering", () => { - test("If the user grant us access to a device, we should emit it", (done) => { + it("should emit device if one new grant access", (done) => { mockedRequestDevice.mockResolvedValueOnce([stubDevice]); transport.startDiscovering().subscribe({ @@ -112,7 +113,7 @@ describe("WebUsbHidTransport", () => { // It does not seem possible for a user to select several devices on the browser popup. // But if it was possible, we should emit them - test("If the user grant us access to several devices, we should emit them", (done) => { + it("should emit devices if new grant accesses", (done) => { mockedRequestDevice.mockResolvedValueOnce([ stubDevice, { @@ -164,7 +165,7 @@ describe("WebUsbHidTransport", () => { }); }); - test("If the device is not recognized, we should throw a DeviceNotRecognizedError", (done) => { + it("should throw DeviceNotRecognizedError if the device is not recognized", (done) => { mockedRequestDevice.mockResolvedValueOnce([ { ...stubDevice, @@ -183,7 +184,7 @@ describe("WebUsbHidTransport", () => { }); }); - test("If the request device is in error, we should return it", (done) => { + it("should emit an error if the request device is in error", (done) => { const message = "request device error"; mockedRequestDevice.mockImplementationOnce(() => { throw new Error(message); @@ -204,7 +205,7 @@ describe("WebUsbHidTransport", () => { }); // [ASK] Is this the behavior we want when the user does not select any device ? - test("If the user did not grant us access to a device (clicking on cancel on the browser popup for ex), we should emit an error", (done) => { + it("should emit an error if the user did not grant us access to a device (clicking on cancel on the browser popup for ex)", (done) => { // When the user does not select any device, the `requestDevice` will return an empty array mockedRequestDevice.mockResolvedValueOnce([]); @@ -229,7 +230,7 @@ describe("WebUsbHidTransport", () => { }); describe("stopDiscovering", () => { - test("If the discovery process is halted, we should stop monitoring connections.", () => { + it("should stop monitoring connections if the discovery process is halted", () => { const abortSpy = jest.spyOn(AbortController.prototype, "abort"); transport.stopDiscovering(); @@ -238,10 +239,8 @@ describe("WebUsbHidTransport", () => { }); }); - // [SHOULD] Unit tests connect - // eslint-disable-next-line @typescript-eslint/no-empty-function describe("connect", () => { - test("If no internal device, should throw UnknownDeviceError", async () => { + it("should throw UnknownDeviceError if no internal device", async () => { const device = { deviceId: "fake" }; const connect = await transport.connect(device); @@ -251,7 +250,7 @@ describe("WebUsbHidTransport", () => { ); }); - test("If the device is already opened, should throw OpeningConnectionError", async () => { + it("should throw OpeningConnectionError if the device is already opened", async () => { const device = { deviceId: "fake" }; const connect = await transport.connect(device); @@ -261,7 +260,7 @@ describe("WebUsbHidTransport", () => { ); }); - test("If the device cannot be opened, should throw OpeningConnexionError", (done) => { + it("should throw OpeningConnectionError if the device cannot be opened", (done) => { const message = "cannot be opened"; mockedRequestDevice.mockResolvedValueOnce([ { @@ -292,7 +291,7 @@ describe("WebUsbHidTransport", () => { }); }); - test("If the device is already opened, return it", (done) => { + it("should return the opened device", (done) => { mockedRequestDevice.mockResolvedValueOnce([ { ...stubDevice, @@ -329,7 +328,7 @@ describe("WebUsbHidTransport", () => { }); }); - test("If the device is available, return it", (done) => { + it("should return a device if available", (done) => { mockedRequestDevice.mockResolvedValueOnce([stubDevice]); transport.startDiscovering().subscribe({ @@ -358,5 +357,59 @@ describe("WebUsbHidTransport", () => { }); }); }); + + describe("disconnect", () => { + it("should throw an error if the device is not connected", async () => { + // given + const connectedDevice = connectedDeviceStubBuilder(); + + // when + const disconnect = await transport.disconnect({ + connectedDevice, + }); + + expect(disconnect).toStrictEqual( + Left( + new UnknownDeviceError( + new Error(`Unknown device ${connectedDevice.id}`), + ), + ), + ); + }); + + it("should disconnect if the device is connected", (done) => { + mockedRequestDevice.mockResolvedValueOnce([stubDevice]); + + transport.startDiscovering().subscribe({ + next: (discoveredDevice) => { + transport + .connect({ deviceId: discoveredDevice.id }) + .then((connectedDevice) => { + connectedDevice + .ifRight((device) => { + transport + .disconnect({ connectedDevice: device }) + .then((value) => { + expect(value).toStrictEqual(Right(void 0)); + done(); + }) + .catch((error) => { + done(error); + }); + }) + .ifLeft(() => { + done(connectedDevice); + }); + }) + .catch((error) => { + done(error); + }); + }, + error: (error) => { + done(error); + }, + }); + }); + }); }); }); diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 31924c797..1d38bbb4d 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -1,9 +1,10 @@ import * as Sentry from "@sentry/minimal"; import { inject, injectable } from "inversify"; -import { Either, EitherAsync, Left, Right } from "purify-ts"; +import { Either, EitherAsync, Left, Maybe, Right } from "purify-ts"; import { from, Observable, switchMap } from "rxjs"; import { v4 as uuid } from "uuid"; +import { SdkError } from "@api/Error"; import type { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { deviceModelTypes } from "@internal/device-model/di/deviceModelTypes"; import { DeviceId } from "@internal/device-model/model/DeviceModel"; @@ -15,6 +16,7 @@ import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { ConnectError, DeviceNotRecognizedError, + DisconnectError, NoAccessibleDeviceError, OpeningConnectionError, type PromptDeviceAccessError, @@ -53,6 +55,10 @@ export class WebUsbHidTransport implements UsbHidTransport { this._connectionListenersAbortController = new AbortController(); this._logger = loggerServiceFactory("WebUsbHidTransport"); this._usbHidDeviceConnectionFactory = usbHidDeviceConnectionFactory; + + this.hidApi.map((hidApi) => { + hidApi.ondisconnect = this.handleDeviceDisconnectionEvent; + }); } /** @@ -313,4 +319,51 @@ export class WebUsbHidTransport implements UsbHidTransport { private getHidUsbProductId(productId: number): number { return productId >> 8; } + + async disconnect(params: { + connectedDevice: InternalConnectedDevice; + }): Promise> { + this._logger.debug("disconnect", { data: { connectedDevice: params } }); + const internalDevice = this._internalDevicesById.get( + params.connectedDevice.id, + ); + + if (!internalDevice) { + this._logger.error(`Unknown device ${params.connectedDevice.id}`); + return Left( + new UnknownDeviceError( + new Error(`Unknown device ${params.connectedDevice.id}`), + ), + ); + } + + try { + await internalDevice.hidDevice.close(); + this._internalDevicesById.delete(internalDevice.id); + return Right(void 0); + } catch (error) { + return Left(new DisconnectError(error as Error)); + } + } + + private handleDeviceDisconnectionEvent = (event: Event) => { + this._logger.info("handleDeviceDisconnectionEvent", { data: { event } }); + const hidDevice = (event as HIDConnectionEvent).device; + const maybeInternalDevice = Maybe.fromFalsy( + Array.from(this._internalDevicesById.values()).find( + (iDevice) => iDevice.hidDevice.productId === hidDevice.productId, + ), + ); + + maybeInternalDevice.map(async (internalDevice) => { + try { + await internalDevice.hidDevice.close(); + this._internalDevicesById.delete(internalDevice.id); + } catch (error) { + this._logger.error("Error while closing device from event", { + data: { error }, + }); + } + }); + }; } diff --git a/packages/core/src/internal/usb/transport/__mocks__/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/__mocks__/WebUsbHidTransport.ts index 74b3391de..8e97cf80e 100644 --- a/packages/core/src/internal/usb/transport/__mocks__/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/__mocks__/WebUsbHidTransport.ts @@ -5,6 +5,8 @@ export class WebUsbHidTransport implements UsbHidTransport { connect = jest.fn(); startDiscovering = jest.fn(); stopDiscovering = jest.fn(); + + disconnect = jest.fn(); } export function usbHidTransportMockBuilder( @@ -15,6 +17,7 @@ export function usbHidTransportMockBuilder( startDiscovering: jest.fn(), stopDiscovering: jest.fn(), connect: jest.fn(), + disconnect: jest.fn(), ...props, }; } From 7b3e36277411f45551ab3c360f1ccc9e75ee8f0b Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 25 Apr 2024 16:05:10 +0200 Subject: [PATCH 190/253] :sparkles: (core): Disconnect use case --- packages/core/src/api/DeviceSdk.test.ts | 1 + packages/core/src/api/DeviceSdk.ts | 10 ++ .../internal/device-session/model/Session.ts | 5 + .../internal/discovery/di/discoveryModule.ts | 3 + .../internal/discovery/di/discoveryTypes.ts | 1 + .../discovery/use-case/ConnectUseCase.ts | 2 +- .../use-case/DisconnectUseCase.test.ts | 101 ++++++++++++++++++ .../discovery/use-case/DisconnectUseCase.ts | 64 +++++++++++ 8 files changed, 186 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts create mode 100644 packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts index 76dba1a5c..b0d8b19dd 100644 --- a/packages/core/src/api/DeviceSdk.test.ts +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -85,6 +85,7 @@ describe("DeviceSdk", () => { [sendTypes.SendApduUseCase], [commandTypes.SendCommandUseCase], [usbDiTypes.GetConnectedDeviceUseCase], + [discoveryTypes.DisconnectUseCase], ])("should have %p use case", (diSymbol) => { const uc = sdk.container.get(diSymbol); expect(uc).toBeInstanceOf(StubUseCase); diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index a7c3f521a..935f28c42 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -16,6 +16,10 @@ import { ConnectUseCase, ConnectUseCaseArgs, } from "@internal/discovery/use-case/ConnectUseCase"; +import { + DisconnectUseCase, + DisconnectUseCaseArgs, +} from "@internal/discovery/use-case/DisconnectUseCase"; import type { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; import type { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; import { sendTypes } from "@internal/send/di/sendTypes"; @@ -65,6 +69,12 @@ export class DeviceSdk { .execute(args); } + disconnect(args: DisconnectUseCaseArgs): Promise { + return this.container + .get(discoveryTypes.DisconnectUseCase) + .execute(args); + } + sendApdu(args: SendApduUseCaseArgs): Promise { return this.container .get(sendTypes.SendApduUseCase) diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index 4fb4d109e..195463de7 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -48,4 +48,9 @@ export class Session { }); }; } + + close() { + // @todo: Implement session close + return; + } } diff --git a/packages/core/src/internal/discovery/di/discoveryModule.ts b/packages/core/src/internal/discovery/di/discoveryModule.ts index 096e0cdf8..d2d80bd8b 100644 --- a/packages/core/src/internal/discovery/di/discoveryModule.ts +++ b/packages/core/src/internal/discovery/di/discoveryModule.ts @@ -1,6 +1,7 @@ import { ContainerModule } from "inversify"; import { ConnectUseCase } from "@internal/discovery/use-case/ConnectUseCase"; +import { DisconnectUseCase } from "@internal/discovery/use-case/DisconnectUseCase"; import { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; import { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; import { StubUseCase } from "@root/src/di.stub"; @@ -18,10 +19,12 @@ export const discoveryModuleFactory = ({ bind(discoveryTypes.StartDiscoveringUseCase).to(StartDiscoveringUseCase); bind(discoveryTypes.StopDiscoveringUseCase).to(StopDiscoveringUseCase); bind(discoveryTypes.ConnectUseCase).to(ConnectUseCase); + bind(discoveryTypes.DisconnectUseCase).to(DisconnectUseCase); if (stub) { rebind(discoveryTypes.StartDiscoveringUseCase).to(StubUseCase); rebind(discoveryTypes.StopDiscoveringUseCase).to(StubUseCase); rebind(discoveryTypes.ConnectUseCase).to(StubUseCase); + rebind(discoveryTypes.DisconnectUseCase).to(StubUseCase); } }); diff --git a/packages/core/src/internal/discovery/di/discoveryTypes.ts b/packages/core/src/internal/discovery/di/discoveryTypes.ts index ecea39d90..220c352aa 100644 --- a/packages/core/src/internal/discovery/di/discoveryTypes.ts +++ b/packages/core/src/internal/discovery/di/discoveryTypes.ts @@ -2,4 +2,5 @@ export const discoveryTypes = { StartDiscoveringUseCase: Symbol.for("StartDiscoveringUseCase"), StopDiscoveringUseCase: Symbol.for("StopDiscoveringUseCase"), ConnectUseCase: Symbol.for("ConnectUseCase"), + DisconnectUseCase: Symbol.for("DisconnectUseCase"), }; diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts index de09780de..d8efebb0b 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -35,7 +35,7 @@ export class ConnectUseCase { this._logger = loggerFactory("ConnectUseCase"); } - async execute({ deviceId }: ConnectUseCaseArgs): Promise | never { + async execute({ deviceId }: ConnectUseCaseArgs): Promise { const either = await this._usbHidTransport.connect({ deviceId }); return either.caseOf({ diff --git a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts new file mode 100644 index 000000000..2a251e9f6 --- /dev/null +++ b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts @@ -0,0 +1,101 @@ +import { Left, Right } from "purify-ts"; + +import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; +import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; +import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; +import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { DisconnectError } from "@internal/usb/model/Errors"; +import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; +import { usbHidDeviceConnectionFactoryStubBuilder } from "@internal/usb/service/UsbHidDeviceConnectionFactory.stub"; +import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; + +import { DisconnectUseCase } from "./DisconnectUseCase"; + +let sessionService: DefaultSessionService; +let usbHidTransport: WebUsbHidTransport; +const loggerFactory = jest + .fn() + .mockReturnValue( + new DefaultLoggerPublisherService([], "DisconnectUseCaseTest"), + ); + +const sessionId = "sessionId"; + +describe("DisconnectUseCase", () => { + beforeAll(() => { + usbHidTransport = new WebUsbHidTransport( + {} as DeviceModelDataSource, + loggerFactory, + usbHidDeviceConnectionFactoryStubBuilder(), + ); + sessionService = new DefaultSessionService(loggerFactory); + }); + + it("should disconnect from a device", async () => { + // Given + const connectedDevice = connectedDeviceStubBuilder(); + const session = sessionStubBuilder({ id: sessionId, connectedDevice }); + jest + .spyOn(sessionService, "getSessionById") + .mockImplementation(() => Right(session)); + jest.spyOn(session, "close"); + jest.spyOn(sessionService, "removeSession"); + jest + .spyOn(usbHidTransport, "disconnect") + .mockImplementation(() => Promise.resolve(Right(void 0))); + const disconnectUseCase = new DisconnectUseCase( + usbHidTransport, + sessionService, + loggerFactory, + ); + // When + await disconnectUseCase.execute({ sessionId }); + + // Then + expect(session.close).toHaveBeenCalled(); + expect(sessionService.removeSession).toHaveBeenCalledWith(sessionId); + expect(usbHidTransport.disconnect).toHaveBeenCalledWith({ + connectedDevice, + }); + }); + + it("should throw an error when session not found", async () => { + // Given + const disconnectUseCase = new DisconnectUseCase( + usbHidTransport, + sessionService, + loggerFactory, + ); + // When + try { + await disconnectUseCase.execute({ sessionId }); + } catch (e) { + // Then + expect(e).toStrictEqual(new DeviceSessionNotFound()); + } + }); + + it("should throw an error if usb hid disconnection fails", async () => { + // Given + jest + .spyOn(sessionService, "getSessionById") + .mockImplementation(() => Right(sessionStubBuilder({ id: sessionId }))); + jest + .spyOn(usbHidTransport, "disconnect") + .mockResolvedValue(Promise.resolve(Left(new DisconnectError()))); + const disconnectUseCase = new DisconnectUseCase( + usbHidTransport, + sessionService, + loggerFactory, + ); + + // When + try { + await disconnectUseCase.execute({ sessionId }); + } catch (e) { + // Then + expect(e).toStrictEqual(new DisconnectError()); + } + }); +}); diff --git a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts new file mode 100644 index 000000000..28bab15f3 --- /dev/null +++ b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts @@ -0,0 +1,64 @@ +import { inject, injectable } from "inversify"; + +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; +import type { SessionService } from "@internal/device-session/service/SessionService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; +import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; +import { SessionId } from "@root/src"; + +export type DisconnectUseCaseArgs = { + sessionId: SessionId; +}; + +/** + * Disconnects to a discovered device via USB HID (and later BLE). + */ +@injectable() +export class DisconnectUseCase { + private readonly _usbHidTransport: UsbHidTransport; + private readonly _sessionService: SessionService; + private readonly _logger: LoggerPublisherService; + + constructor( + @inject(usbDiTypes.UsbHidTransport) + usbHidTransport: UsbHidTransport, + @inject(deviceSessionTypes.SessionService) + sessionService: SessionService, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerFactory: (tag: string) => LoggerPublisherService, + ) { + this._sessionService = sessionService; + this._usbHidTransport = usbHidTransport; + this._logger = loggerFactory("DisconnectUseCase"); + } + + async execute({ sessionId }: DisconnectUseCaseArgs): Promise { + const errorOrSession = this._sessionService.getSessionById(sessionId); + + return errorOrSession.caseOf({ + Left: (error) => { + this._logger.error("Device session not found", { + data: { sessionId, error }, + }); + throw error; + }, + Right: async (session) => { + session.close(); + + this._sessionService.removeSession(sessionId); + + await this._usbHidTransport + .disconnect({ + connectedDevice: session.connectedDevice, + }) + .then((errorOrDisconnected) => + errorOrDisconnected.mapLeft((error) => { + throw error; + }), + ); + }, + }); + } +} From 0f48d087da0b6c53333a74766c3483777072bccc Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 25 Apr 2024 16:06:39 +0200 Subject: [PATCH 191/253] :sparkles: (sample): Disconnect device click --- .../src/components/Device/StatusText.tsx | 2 +- apps/sample/src/components/Device/index.tsx | 29 +++++++++++++++---- apps/sample/src/components/Sidebar/index.tsx | 17 +++++++++-- .../src/providers/SessionsProvider/index.tsx | 5 ++-- apps/sample/src/reducers/sessions.ts | 20 ++++++++++--- 5 files changed, 58 insertions(+), 15 deletions(-) diff --git a/apps/sample/src/components/Device/StatusText.tsx b/apps/sample/src/components/Device/StatusText.tsx index e5edd75fb..9dfe482e2 100644 --- a/apps/sample/src/components/Device/StatusText.tsx +++ b/apps/sample/src/components/Device/StatusText.tsx @@ -11,7 +11,7 @@ const getColorFromState = ({ theme: DefaultTheme; }) => { switch (status) { - case DeviceStatus.CONNNECTED: + case DeviceStatus.CONNECTED: return theme.colors.success.c50; case DeviceStatus.AVAILABLE: return theme.colors.primary.c80; diff --git a/apps/sample/src/components/Device/index.tsx b/apps/sample/src/components/Device/index.tsx index 6ec2558fd..9c58b1364 100644 --- a/apps/sample/src/components/Device/index.tsx +++ b/apps/sample/src/components/Device/index.tsx @@ -1,6 +1,6 @@ import React from "react"; import { ConnectionType, DeviceModelId } from "@ledgerhq/device-sdk-core"; -import { Box, Flex, Icons, Text } from "@ledgerhq/react-ui"; +import { Box, DropdownGeneric, Flex, Icons, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; import { StatusText } from "./StatusText"; @@ -18,9 +18,19 @@ const IconContainer = styled(Flex).attrs({ p: 4, mr: 3, borderRadius: 100 })` align-items: center; `; +const ActionRow = styled(Flex).attrs({ py: 4, px: 2 })` + position: relative; + cursor: pointer; + flex-direction: row; + flex: 1; + min-width: 120px; + align-items: center; + justify-content: space-between; +`; + export enum DeviceStatus { AVAILABLE = "Available", - CONNNECTED = "Connected", + CONNECTED = "Connected", BUSY = "Busy", LOCKED = "Locked", NOT_CONNECTED = "Not Connected", @@ -32,6 +42,7 @@ type DeviceProps = { type: ConnectionType; model: DeviceModelId; status?: DeviceStatus; + onDisconnect: () => Promise; }; export const Device: React.FC = ({ @@ -39,6 +50,7 @@ export const Device: React.FC = ({ status = DeviceStatus.AVAILABLE, type, model, + onDisconnect, }) => { return ( @@ -54,9 +66,7 @@ export const Device: React.FC = ({ {status && ( <> - - {status} - + {status} @@ -67,7 +77,14 @@ export const Device: React.FC = ({ - {!status ? : } + + + + Disconnect + + + + ); }; diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx index f8d9edf33..0684b02de 100644 --- a/apps/sample/src/components/Sidebar/index.tsx +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -1,5 +1,5 @@ "use client"; -import React, { useEffect, useState } from "react"; +import React, { useCallback, useEffect, useState } from "react"; import { Box, Flex, Icons, Link, Text } from "@ledgerhq/react-ui"; import { useRouter } from "next/navigation"; import styled, { DefaultTheme } from "styled-components"; @@ -13,7 +13,7 @@ const Root = styled(Flex).attrs({ py: 8, px: 6 })` flex-direction: column; width: 280px; background-color: ${({ theme }: { theme: DefaultTheme }) => - theme.colors.background.main}; + theme.colors.background.drawer}; `; const Subtitle = styled(Text).attrs({ mb: 5 })``; @@ -45,6 +45,7 @@ export const Sidebar: React.FC = () => { const sdk = useSdk(); const { state: { deviceById }, + dispatch, } = useSessionContext(); useEffect(() => { @@ -56,6 +57,17 @@ export const Sidebar: React.FC = () => { setVersion(""); }); }, [sdk]); + const onDeviceDisconnect = useCallback( + async (sessionId: string) => { + try { + await sdk.disconnect({ sessionId }); + dispatch({ type: "remove_session", payload: { sessionId } }); + } catch (e) { + console.error(e); + } + }, + [dispatch, sdk], + ); const router = useRouter(); return ( @@ -82,6 +94,7 @@ export const Sidebar: React.FC = () => { name={device.name} model={device.modelId} type={device.type} + onDisconnect={async () => onDeviceDisconnect(sessionId)} /> ))} diff --git a/apps/sample/src/providers/SessionsProvider/index.tsx b/apps/sample/src/providers/SessionsProvider/index.tsx index e73f6db7e..d39002451 100644 --- a/apps/sample/src/providers/SessionsProvider/index.tsx +++ b/apps/sample/src/providers/SessionsProvider/index.tsx @@ -2,6 +2,7 @@ import { Context, createContext, useContext, useReducer } from "react"; import { AddSessionAction, + RemoveSessionAction, SessionsInitialState, sessionsReducer, SessionsState, @@ -9,13 +10,13 @@ import { type SessionContextType = { state: SessionsState; - dispatch: (value: AddSessionAction) => void; + dispatch: (value: AddSessionAction | RemoveSessionAction) => void; }; const SessionContext: Context = createContext({ state: SessionsInitialState, - dispatch: (_value: AddSessionAction) => null, + dispatch: () => null, }); export const SessionProvider: React.FC = ({ diff --git a/apps/sample/src/reducers/sessions.ts b/apps/sample/src/reducers/sessions.ts index 6ade0ec22..8ff31e365 100644 --- a/apps/sample/src/reducers/sessions.ts +++ b/apps/sample/src/reducers/sessions.ts @@ -11,15 +11,20 @@ export type AddSessionAction = { payload: { sessionId: SessionId; connectedDevice: ConnectedDevice }; }; +export type RemoveSessionAction = { + type: "remove_session"; + payload: { sessionId: SessionId }; +}; + export const SessionsInitialState: SessionsState = { selectedId: null, deviceById: {}, }; -export const sessionsReducer: Reducer = ( - state, - action, -) => { +export const sessionsReducer: Reducer< + SessionsState, + AddSessionAction | RemoveSessionAction +> = (state, action) => { switch (action.type) { case "add_session": return { @@ -30,6 +35,13 @@ export const sessionsReducer: Reducer = ( [action.payload.sessionId]: action.payload.connectedDevice, }, }; + case "remove_session": + delete state.deviceById[action.payload.sessionId]; + + return { + ...state, + selectedId: null, + }; default: return state; } From 3bbe755db6606c42a8fc6d845195acc0df6933be Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 25 Apr 2024 16:16:49 +0200 Subject: [PATCH 192/253] :bookmark: (core): Changeset --- .changeset/spotty-worms-move.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/spotty-worms-move.md diff --git a/.changeset/spotty-worms-move.md b/.changeset/spotty-worms-move.md new file mode 100644 index 000000000..bead99267 --- /dev/null +++ b/.changeset/spotty-worms-move.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": minor +--- + +Handle device disconnection intent (disconnect on click, method call), clear session From b50f80b9453eb9fe8f7fb1b7b213135c21ce7659 Mon Sep 17 00:00:00 2001 From: jz_ Date: Thu, 25 Apr 2024 16:34:47 +0200 Subject: [PATCH 193/253] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20(core):=20Improve?= =?UTF-8?q?=20test=20perf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/src/api/apdu/utils/ApduParser.ts | 72 ++++++++++--------- packages/core/src/api/command/Command.ts | 2 +- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/packages/core/src/api/apdu/utils/ApduParser.ts b/packages/core/src/api/apdu/utils/ApduParser.ts index 525fd4502..5c3666cc9 100644 --- a/packages/core/src/api/apdu/utils/ApduParser.ts +++ b/packages/core/src/api/apdu/utils/ApduParser.ts @@ -23,80 +23,81 @@ export class ApduParser { * @param length: number * @returns {boolean} - Returns false if the length is greater than the response length */ - testMinimalLength = (length: number) => !(length > this._response.length); + testMinimalLength(length: number): boolean { + return length <= this._response.length; + } /** * Extract a single byte from the response * @returns {number | undefined} - Returns the byte extracted from the response */ - extract8BitUint = () => { - if (!this.testLength(1)) return; + extract8BitUint(): number | undefined { + if (this._outOfRange(1)) return; return this._response[this._index++]; - }; + } /** * Extract a 16-bit unsigned integer (Big Endian coding) from the response * @returns {number | undefined} - Returns the 16-bit unsigned integer extracted from the response */ - extract16BitUInt = () => { - if (!this.testLength(2)) return; + extract16BitUInt(): number | undefined { + if (this._outOfRange(2)) return; let msb = this.extract8BitUint(); if (!msb) return; const lsb = this.extract8BitUint(); if (!lsb) return; msb *= 0x100; return msb + lsb; - }; + } /** * Extract a 32-bit unsigned integer (Big Endian coding) from the response * @returns {number | undefined} - Returns the 32-bit unsigned integer extracted from the response */ - extract32BitUInt = () => { - if (!this.testLength(4)) return; + extract32BitUInt(): number | undefined { + if (this._outOfRange(4)) return; let msw = this.extract16BitUInt(); if (!msw) return; const lsw = this.extract16BitUInt(); if (!lsw) return; msw *= 0x10000; return msw + lsw; - }; + } /** * Extract a field of a specified length from the response * @param length: number - The length of the field to extract * @returns {Uint8Array | undefined} - Returns the field extracted from the response */ - extractFieldByLength = (length: number) => { - if (!this.testLength(length)) return; + extractFieldByLength(length: number): Uint8Array | undefined { + if (this._outOfRange(length)) return; if (length == 0) return new Uint8Array(); const field = this._response.slice(this._index, this._index + length); this._index += length; return field; - }; + } /** * Extract a field from the response that is length-value encoded * @returns {Uint8Array | undefined} - Returns the field extracted from the response */ - extractFieldLVEncoded = () => { + extractFieldLVEncoded(): Uint8Array | undefined { // extract Length field const length = this.extract8BitUint(); - if (length == 0) return new Uint8Array(); - if (!length) return; + if (length === undefined) return; + if (length === 0) return new Uint8Array(); const field = this.extractFieldByLength(length); - // if the field is inconsistent then roll back to the initial point if (!field) this._index--; return field; - }; + } /** * Extract a field from the response that is tag-length-value encoded * @returns {TaggedField | undefined} - Returns the field extracted from the response */ - extractFieldTLVEncoded = () => { - if (!this.testLength(2)) return; + extractFieldTLVEncoded(): TaggedField | undefined { + if (this._outOfRange(2)) return; // extract the tag field const tag = this.extract8BitUint(); @@ -108,7 +109,7 @@ export class ApduParser { return; } return { tag, value } as TaggedField; - }; + } /** * Encode a value to a hexadecimal string @@ -116,7 +117,7 @@ export class ApduParser { * @param prefix {boolean} - Whether to add a prefix to the encoded value * @returns {string} - The encoded value as a hexadecimal string */ - encodeToHexaString = (value?: Uint8Array, prefix?: boolean) => { + encodeToHexaString(value?: Uint8Array, prefix?: boolean): string { let result = ""; let index = 0; @@ -130,14 +131,14 @@ export class ApduParser { index++; } return result; - }; + } /** * Encode a value to an ASCII string * @param value {Uint8Array} - The value to encode * @returns {string} - The encoded value as an ASCII string */ - encodeToString = (value?: Uint8Array) => { + encodeToString(value?: Uint8Array): string { let result = ""; let index = 0; @@ -150,40 +151,41 @@ export class ApduParser { } return result; - }; + } /** * Get the current index of the parser * @returns {number} - The current index of the parser */ - getCurrentIndex = () => { + getCurrentIndex(): number { return this._index; - }; + } /** * Reset the index of the parser to 0 */ - resetIndex = () => { + resetIndex() { this._index = 0; - }; + } /** * Get the remaining length of the response * @returns {number} - The remaining length of the response */ - getUnparsedRemainingLength = () => { + getUnparsedRemainingLength(): number { return this._response.length - this._index; - }; + } // =========== // Private API // =========== /** - * Test if the length is greater than the response length + * Check whether the expected length is out of range * @param length: number - * @returns {boolean} - Returns false if the length is greater than the response length + * @returns {boolean} - Returns true if the expected length is out of range */ - private testLength = (length: number) => - !(this._index + length > this._response.length); + private _outOfRange(length: number): boolean { + return this._index + length > this._response.length; + } } diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index 7b4f35586..5cfd1390d 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -4,5 +4,5 @@ import { ApduResponse } from "@internal/device-session/model/ApduResponse"; export interface Command { getApdu(params?: Params): Apdu; - parseResponse(responseApdu: ApduResponse, deviceModelId: DeviceModelId): T; + parseResponse(responseApdu: ApduResponse, deviceModelId?: DeviceModelId): T; } From 3fa6950730af314c1496f1838883befcf8d3802b Mon Sep 17 00:00:00 2001 From: jz_ Date: Thu, 25 Apr 2024 16:35:40 +0200 Subject: [PATCH 194/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Add=20GetAppAndVe?= =?UTF-8?q?rsion=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/src/api/apdu/utils/ApduParser.ts | 4 +- packages/core/src/api/command/Command.ts | 2 +- .../os/GetAppAndVersionCommand.test.ts | 45 ++++++++++++++++ .../api/command/os/GetAppAndVersionCommand.ts | 53 +++++++++++++++++++ 4 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts create mode 100644 packages/core/src/api/command/os/GetAppAndVersionCommand.ts diff --git a/packages/core/src/api/apdu/utils/ApduParser.ts b/packages/core/src/api/apdu/utils/ApduParser.ts index 5c3666cc9..88e24032d 100644 --- a/packages/core/src/api/apdu/utils/ApduParser.ts +++ b/packages/core/src/api/apdu/utils/ApduParser.ts @@ -83,8 +83,8 @@ export class ApduParser { */ extractFieldLVEncoded(): Uint8Array | undefined { // extract Length field - const length = this.extract8BitUint(); - if (length === undefined) return; + const length = this.extract8BitUint() ?? -1; + if (length === -1) return; if (length === 0) return new Uint8Array(); const field = this.extractFieldByLength(length); // if the field is inconsistent then roll back to the initial point diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index 5cfd1390d..7d4f40f02 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -4,5 +4,5 @@ import { ApduResponse } from "@internal/device-session/model/ApduResponse"; export interface Command { getApdu(params?: Params): Apdu; - parseResponse(responseApdu: ApduResponse, deviceModelId?: DeviceModelId): T; + parseResponse(apduResponse: ApduResponse, deviceModelId?: DeviceModelId): T; } diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts new file mode 100644 index 000000000..ef15bb3b0 --- /dev/null +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts @@ -0,0 +1,45 @@ +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { Command } from "../Command"; +import { + GetAppAndVersionResponse, + GetAppAndVersionCommand, +} from "./GetAppAndVersionCommand"; + +const GET_APP_AND_VERSION_APDU = Uint8Array.from([ + 0xb0, 0x01, 0x00, 0x00, 0x00, +]); + +const STAX_RESPONSE_HEX = Uint8Array.from([ + 0x01, 0x05, 0x42, 0x4f, 0x4c, 0x4f, 0x53, 0x09, 0x31, 0x2e, 0x34, 0x2e, 0x30, + 0x2d, 0x72, 0x63, 0x32, 0x90, 0x00, +]); + +describe("GetAppAndVersionCommand", () => { + let command: Command; + + beforeEach(() => { + command = new GetAppAndVersionCommand(); + }); + + describe("getApdu", () => { + it("should return the GetAppAndVersion APDU", () => { + const apdu = command.getApdu(); + expect(apdu.getRawApdu()).toStrictEqual(GET_APP_AND_VERSION_APDU); + }); + }); + + describe("parseResponse", () => { + it("should parse the GetAppAndVersion response", () => { + const STAX_APDU_RESPONSE = new ApduResponse({ + statusCode: STAX_RESPONSE_HEX.slice(-2), + data: STAX_RESPONSE_HEX.slice(0, -2), + }); + const parsed = command.parseResponse(STAX_APDU_RESPONSE); + const expected = { + name: "BOLOS", + version: "1.4.0-rc2", + }; + expect(parsed).toStrictEqual(expected); + }); + }); +}); diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts new file mode 100644 index 000000000..63fcd6a50 --- /dev/null +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts @@ -0,0 +1,53 @@ +import { Apdu } from "@api/apdu/model/Apdu"; +import { ApduBuilder, ApduBuilderArgs } from "@api/apdu/utils/ApduBuilder"; +import { ApduParser } from "@api/apdu/utils/ApduParser"; +import { Command } from "@api/command/Command"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { CommandUtils } from "@api/command/utils/CommandUtils"; + +export type GetAppAndVersionResponse = { + name: string; + version: string; + flags?: number | Uint8Array; +}; + +export class GetAppAndVersionCommand + implements Command +{ + getApdu(): Apdu { + const getAppAndVersionApduArgs: ApduBuilderArgs = { + cla: 0xb0, + ins: 0x01, + p1: 0x00, + p2: 0x00, + } as const; + return new ApduBuilder(getAppAndVersionApduArgs).build(); + } + + parseResponse(apduResponse: ApduResponse): GetAppAndVersionResponse { + const parser = new ApduParser(apduResponse); + // TODO: Check and handle unsuccessful response + if (!CommandUtils.isSuccessResponse(apduResponse)) { + throw new Error( + `Unexpected status word: ${parser.encodeToHexaString( + apduResponse.statusCode, + )}`, + ); + } + + if (parser.extract8BitUint() !== 1) { + // TODO: Make dedicated error object + throw new Error("getAppAndVersion: format not supported"); + } + + const name = parser.encodeToString(parser.extractFieldLVEncoded()); + const version = parser.encodeToString(parser.extractFieldLVEncoded()); + + if (parser.getUnparsedRemainingLength() === 0) { + return { name, version } as GetAppAndVersionResponse; + } + + const flags = parser.extractFieldLVEncoded(); + return { name, version, flags } as GetAppAndVersionResponse; + } +} From d40f3e28b0893d81a916550417a4b7d0bcaa6e12 Mon Sep 17 00:00:00 2001 From: jz_ Date: Fri, 26 Apr 2024 15:39:07 +0200 Subject: [PATCH 195/253] =?UTF-8?q?=E2=9C=85=20(core):=20Add=20unit=20test?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../os/GetAppAndVersionCommand.test.ts | 54 ++++++++++++++++--- .../api/command/os/GetAppAndVersionCommand.ts | 2 +- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts index ef15bb3b0..5226ff555 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts @@ -9,11 +9,20 @@ const GET_APP_AND_VERSION_APDU = Uint8Array.from([ 0xb0, 0x01, 0x00, 0x00, 0x00, ]); -const STAX_RESPONSE_HEX = Uint8Array.from([ +const OS_RESPONSE_HEX = Uint8Array.from([ 0x01, 0x05, 0x42, 0x4f, 0x4c, 0x4f, 0x53, 0x09, 0x31, 0x2e, 0x34, 0x2e, 0x30, 0x2d, 0x72, 0x63, 0x32, 0x90, 0x00, ]); +const APP_RESPONSE_HEX = Uint8Array.from([ + 0x01, 0x07, 0x42, 0x69, 0x74, 0x63, 0x6f, 0x69, 0x6e, 0x0b, 0x32, 0x2e, 0x31, + 0x2e, 0x35, 0x2d, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x01, 0x02, 0x90, 0x00, +]); + +const FAILED_RESPONSE_HEX = Uint8Array.from([0x67, 0x00]); + +const ERROR_RESPONSE_HEX = Uint8Array.from([0x04, 0x90, 0x00]); + describe("GetAppAndVersionCommand", () => { let command: Command; @@ -29,17 +38,50 @@ describe("GetAppAndVersionCommand", () => { }); describe("parseResponse", () => { - it("should parse the GetAppAndVersion response", () => { - const STAX_APDU_RESPONSE = new ApduResponse({ - statusCode: STAX_RESPONSE_HEX.slice(-2), - data: STAX_RESPONSE_HEX.slice(0, -2), + it("should parse the response when launching OS (dashboard)", () => { + const OS_RESPONSE = new ApduResponse({ + statusCode: OS_RESPONSE_HEX.slice(-2), + data: OS_RESPONSE_HEX.slice(0, -2), }); - const parsed = command.parseResponse(STAX_APDU_RESPONSE); + const parsed = command.parseResponse(OS_RESPONSE); const expected = { name: "BOLOS", version: "1.4.0-rc2", }; expect(parsed).toStrictEqual(expected); }); + it("should parse the response when launching App", () => { + const APP_RESPONSE = new ApduResponse({ + statusCode: APP_RESPONSE_HEX.slice(-2), + data: APP_RESPONSE_HEX.slice(0, -2), + }); + const parsed = command.parseResponse(APP_RESPONSE); + const expected = { + name: "Bitcoin", + version: "2.1.5-alpha", + flags: Uint8Array.from([2]), + }; + expect(parsed).toStrictEqual(expected); + }); + it("should throw an error if the command failed", () => { + const FAILED_RESPONSE = new ApduResponse({ + statusCode: FAILED_RESPONSE_HEX.slice(-2), + data: FAILED_RESPONSE_HEX.slice(0, -2), + }); + + expect(() => command.parseResponse(FAILED_RESPONSE)).toThrow( + "Unexpected status word: 6700", + ); + }); + it("should throw an error if the response returned unsupported format", () => { + const ERROR_RESPONSE = new ApduResponse({ + statusCode: ERROR_RESPONSE_HEX.slice(-2), + data: ERROR_RESPONSE_HEX.slice(0, -2), + }); + + expect(() => command.parseResponse(ERROR_RESPONSE)).toThrow( + "getAppAndVersion: format not supported", + ); + }); }); }); diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts index 63fcd6a50..6236b0303 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts @@ -26,7 +26,7 @@ export class GetAppAndVersionCommand parseResponse(apduResponse: ApduResponse): GetAppAndVersionResponse { const parser = new ApduParser(apduResponse); - // TODO: Check and handle unsuccessful response + // [SHOULD] Implement new error treatment logic if (!CommandUtils.isSuccessResponse(apduResponse)) { throw new Error( `Unexpected status word: ${parser.encodeToHexaString( From e515907d04006dc178040c0de5b96d5afc7ab10b Mon Sep 17 00:00:00 2001 From: IoTPlumber Date: Mon, 22 Apr 2024 17:23:21 +0200 Subject: [PATCH 196/253] =?UTF-8?q?=F0=9F=93=9D=20(core):=20Update=20READM?= =?UTF-8?q?E=20and=20add=20CONTRIBUTING?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update the current readme and add contributing.md and initiate the core readme --- CONTRIBUTING.md | 112 +++++++++++++++++++ README.md | 235 ++++++++++++++++++++++++++++++++++------ packages/core/README.md | 16 +++ 3 files changed, 331 insertions(+), 32 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 packages/core/README.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..99ab3e5fc --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,112 @@ +# Contributing + +:+1::tada: First off, thanks for taking the time to contribute! :tada::+1: + +This file will guide you through the local setup and contains the guidelines you will need +to follow to get your code merged. + +## Disclaimer + +While you explore these projects, here are some key points to keep in mind: + +- Follow the git workflow, prefix your branches and do not create unnecessary merge commits. +- Be mindful when creating Pull Requests, clearly specify the purpose of your changes and include tests where applicable. +- Device SDKs are mostly accepting bugfix contributions. Feature contributions are subject to review; they may be declined if they don't align with our roadmap or our long-term objectives. + +## Guidelines + +### Important Steps + +**Before submitting a pull request, please make sure the following is done:** + +1. Fork the repository and create your branch from `develop` (check the git conventions for the naming of the branch). +2. Follow the main installation steps. (https://github.com/LedgerHQ/device-sdk-ts#getting+started) +3. Follow additional installation steps depending on which package you want to contribute to. +4. Make your changes. +5. If you’ve fixed a bug or added code that should be tested, add tests! +6. Add an entry to the changelog (`pnpm changeset`). +7. Make sure that the code passes linter and type checks (`pnpm lint:fix` and `pnpm typecheck`). +8. Make sure that the code passes the prettier checks. +9. Make sure the code passes unit and end to end tests (`pnpm test`). +10. Cleanup your branch - unless it contains merge commits (perform atomic commits, squash tiny commits…). + +### Git Conventions + +We use the following git conventions for the `Device SDK` monorepo. + +#### Branch naming + +Depending on the purpose every git branch should be prefixed. + +- `feat/` Add a new feature to the application or library +- `bugfix/` Fixing an existing bug +- `support/` for any other changes (tests, improvements, CI…) +_For Ledger Employees:_ +- `chore/` Cleaning purpose +- `doc/` Add or modify documentation +- `refacto/` Modify the code organisation + +Then add to the prefix no-issue +_For Ledger Employees:_ Add the Jira ticket number `DSDK-` + +And finally add a small description. + +**Example:** doc/no-issue-update-readme + +#### Changelogs + +We use [**changesets**](https://github.com/changesets/changesets) to handle the versioning of our libraries and apps. A detailed guide is available on the [**wiki**](https://github.com/LedgerHQ/device-sdk-ts/wiki/Changesets). + +#### Commit message + +We use the standard [**Conventional Commits**](https://www.conventionalcommits.org/) specification and enforce it using [**commitlint**](https://commitlint.js.org/). + +The format is similar to gitmoji: + + (): + +- scope is the module/package that is impacted by the update. +- `` should start with an uppercase. + +You should use the `pnpm commit` prompt to ensure that your commit messages are valid, as well as the `pnpm commitlint --from ` command to check that every commit on your current branch are valid. + +#### Rebase & Merge strategies + +The rule of thumb is to **always favour rebasing** as long as your branch does not contain merge commits. + +For instance: + +- bugfix branches that are small and self-contained should always get rebased on top of `develop`. +- feature branches should always get rebased on top of `develop`. + +### Pull Request Conventions + +Follow the next step to fill the PR template + +#### Title + +The description format is similar to gitmoji: + + () [NO-ISSUE]: + +1. scope is the module/package that is impacted by the update (should be the same than the commit ones). + +2. _For Ledger Employees:_ `NO-ISSUE` to be replace by `DSDK-` in case of tracking. + +3. `` should start with an uppercase. + +#### Description + +- Write a full description of what your pull request is about and why it was needed. +- Add some screenshots or videos if relevant. +- Do not forget to fill the checklist + +### Workflow + +- Github actions will trigger depending on which part of the codebase is impacted. +- Your PR must pass the required CI actions. +- Your PR must include a changelog (`pnpm changeset`), except for tools and maintenance operations. + +### Developer Portal + +Ledger provides the tools and resources you need to build on top of our platform. They are accessible in the [Ledger Developer Portal](https://developers.ledger.com/). \ No newline at end of file diff --git a/README.md b/README.md index 1afe2fbc2..9fe0450f3 100644 --- a/README.md +++ b/README.md @@ -41,53 +41,194 @@

    -# About +# Introduction -This monorepo hosts the Device SDK for Web. -Written in Typescript. +The purpose of the Device SDK (DSDK in short) is to provide a library in TypeScript to easily handle Ledger devices: +- Device enumeration, identification and connection management +- Device actions, with full status and error report +- In the future: Firmware and Applications installation/update. -# How does it works +⚠️ + +**The current version of this Device SDK is in alpha stage and is subject to significant changes!!!** + +⚠️ -The Device SDK defines an interface for applications to interact with Ledger wallets. +## How does it works + +The Device SDK features an interface for applications to handle any Ledge device (a.k. hardware wallets). It convert intention into ```mermaid flowchart LR; - application(Application) <--JSON-RPC--> wallet(Wallet); + application(Application) <--API--> DSDK(DeviceSDK) <--USB/BLE--> device(Device); ``` - +The Device SDK is available in 3 different environments (web, Android & iOS). + +This repository is dedicated to **web environment** and is written in TypeScript. + +## Structure +### Repository -# Modules description +The Device SDK is structured as a monorepository whose prupose is to centralise all the TypeScript code related to the SDK in one place. -This project uses [turbo monorepo](https://turbo.build/repo/docs) to build and release different packages on NPM registry and a sample demo app on Vercel. +This project uses [turbo monorepo](https://turbo.build/repo/docs) to build and release different packages on NPM registry and a sample demo application on Vercel. + +### Modules A brief description of this project packages: -| Name | Path | Description | -| -- | -- | -- | -| @ledgerhq/device-sdk-sample | apps/sample | React Next web app used to test & demonstrate the Web Device SDK | -| @ledgerhq/eslint-config-dsdk | packages/config/eslint | internal package which contains eslint shared config. Used by `extends: ["@ledgerhq/dsdk"]` in `.eslintrc`. | -| @ledgerhq/jest-config-dsdk | packages/config/jest | internal package which contains jest shared config. Used by `preset: "@ledgerhq/jest-config-dsdk"` in `jest.config.ts` | -| @ledgerhq/tsconfig-dsdk | packages/config/typescript | internal package which contains typescript shared config. Used by `"extends": "@ledgerhq/tsconfig-dsdk/sdk"` in `tsconfig.json` | -| @ledgerhq/device-sdk-core | packages/core | external package that contains the core of the Web SDK | -| @ledgerhq/device-sdk-signer | packages/signer | external package | -| @ledgerhq/device-sdk-trusted-apps | packages/trusted-apps | external package | -| @ledgerhq/device-sdk-ui | packages/ui | external package | +| Name | Path | Description | +| --------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| @ledgerhq/device-sdk-sample | apps/sample | React Next web app used to test & demonstrate the Web Device SDK | +| @ledgerhq/eslint-config-dsdk | packages/config/eslint | internal package which contains eslint shared config. Used by `extends: ["@ledgerhq/dsdk"]` in `.eslintrc`. | +| @ledgerhq/jest-config-dsdk | packages/config/jest | internal package which contains jest shared config. Used by `preset: "@ledgerhq/jest-config-dsdk"` in `jest.config.ts` | +| @ledgerhq/tsconfig-dsdk | packages/config/typescript | internal package which contains typescript shared config. Used by `"extends": "@ledgerhq/tsconfig-dsdk/sdk"` in `tsconfig.json` | +| @ledgerhq/device-sdk-core | packages/core | external package that contains the core of the Web SDK | +| @ledgerhq/device-sdk-signer | packages/signer | external package that contains device coin application dedicated handlers | +| @ledgerhq/device-sdk-trusted-apps | packages/trusted-apps | external package that contains device trusted application dedicated handlers | +| @ledgerhq/device-sdk-ui | packages/ui | external package | + +# Getting started + +> 💡 **The following steps described only a minimal setup. You will need to perform additional installation steps depending on the package you want to work on, please refer to its nested readme file.** + +## Prerequisites + +### Shell + +Install your favorite shell or use your computer built in one (e.g. bash, zsh or fish ) + +### Git +Please install git. + +## Environment Setup + +### Proto + +**proto** is used as the toolchain manager to install the right version of every tools. + +**⚠️ Important**: Please follow the instructions on the [**proto**](https://moonrepo.dev/docs/proto/install) website to install it. + +### Dependencies management + +**pnpm** is used as the package manager to install all the dependencies. +It is normally provided by **Proto** (see below). + +## Installation + +1- Clone the repository + +```bash +git clone git@github.com:LedgerHQ/device-sdk-ts.git +cd device-sdk-ts +``` + +**Important: All the commands should be run at the root of the monorepo.** + +2- Configure using proto + +```bash +proto use +``` + +3- Install dependencies + +```bash +pnpm i +``` + +Alternatively, if you want to bypass the postinstall scripts which can be long to run. + +```bash +pnpm i --ignore-scripts +``` + +4- Check the shell configuration file + +In you shell configuration file (e.g. .bashrc or .zshrc ) verify the path for `proto` is correctly set. +Update it if needed according to the description below. + +```bash +# proto +export PROTO_HOME="$HOME/.proto" +export PATH="$PROTO_HOME/shims:$PROTO_HOME/bin:$PATH" +``` + +## Unit Test + +**Jest** is used for unit testing purpose. + +Each package is tested using the following command (at the root of the monorepo). + +```bash +pnpm test +``` -# CI +### VSCode user -This project uses Github CI. +For VSCode user, this monorepo is a multi-root workspace. +Please configure JEST extention accordingly. +## Build -# Scripting +Each package is built using the following command (at the root of the monorepo). + +### Core + +Device SDK main module. + +```bash +pnpm core build +``` + +### Signer + +Transaction and message signer module. + +```bash +pnpm signer build +``` + +### Trusted Apps + +Security dedicated application interface module. + +```bash +pnpm trusted-apps build +``` + +### UI + +Reference UI module + +```bash +pnpm ui build +``` + +### Sample application + +Sample application module. + +```bash +pnpm sample build +``` + +# Processes & usage + +## Continuous integration + +This project uses Github CI. Please have a look to the following link for more details: [GitHub](https://docs.github.com/en/actions/automating-builds-and-tests/about-continuous-integration) + +## Scripting In order to avoid task repetition, we can add some scripts the corresponding package's script folder, on in a root script folder if it concerns multiple packages. A script is a `.mjs` file interpreted by [zx](https://github.com/google/zx). -# Templates +## Templates To kickly scaffold part of our code, we use `hygen` to help us kickstart our development process faster. Each project can have it's own `_templates` folder, so **generators** are scoped. @@ -95,20 +236,23 @@ The `_templates` folder contains the basic generators to create new ones. [Hygen documentation](https://www.hygen.io/docs/quick-start/) -## Process for adding a new generator +### Process for adding a new generator The easiest way would be to use `hygen` from the root folder as so: **Options**: - - `new`: creates a generator that take no input during creation (but can still access metadata) - - `with-prompt`: creates a generator that can take some input during creation (with access to metadata) + +- `new`: creates a generator that take no input during creation (but can still access metadata) +- `with-prompt`: creates a generator that can take some input during creation (with access to metadata) + +**Important: All the commands should be run at the root of the monorepo.** ``` pnpm hygen generator with-prompt|new name ``` -This command will create a new generator folder in the root `_templates` with the given `name`. -It's there so that we can modify this new generator. +This command will create a new generator folder in the root `_templates` with the given `name`. +It's there so that we can modify this new generator. When done, move the new generator to it's correct project `_templates` folder (again, so we can keep scope). Finally, we should add a script in the correct `package.json` as a shortcut to trigger the new generator. eg: @@ -126,10 +270,37 @@ pnpm hygen with-prompt - `name` is the name given during the creation of the generator. - `with-prompt` to call the prompted version of the generator (there can be multiple targets, like `new`) +### Available templates + +| workspace | script | description | +| --------- | --------------- | ------------------------------------- | +| 📦 core | `module:create` | scaffolds a new _src/internal_ module | + +## Play with the sample app ? + +To build the required dependencies and start a dev server for the sample app, please execute the following command at the root of the repository. + +```bash +pnpm dev +``` + +# Documentation + +Each project folder has a `README.md` file which contains basic documentation. +It includes background information about the project and how to setup, run and build it. + +Please check the [**wiki**](https://github.com/LedgerHQ/device-sdk-ts/wiki) for additional documentation. + +## Reference API + +Please refer to the core package [**readme**](https://github.com/LedgerHQ/device-sdk-ts/packages/core/README.md). + +# Contributing + +Please check the general guidelines for contributing to Ledger Live projects: [`CONTRIBUTING.md`](https://github.com/LedgerHQ/device-sdk-ts/CONTRIBUTING.md). -## Available templates +Each individual project may include its own specific guidelines, located within its respective folder. -| workspace | script | description | -| - | - | - | -| 📦 core | `module:create` | scaffolds a new _src/internal_ module | +# License +Please check each project `LICENSE` file, most of them are under the `MIT` license. diff --git a/packages/core/README.md b/packages/core/README.md new file mode 100644 index 000000000..89b3387b4 --- /dev/null +++ b/packages/core/README.md @@ -0,0 +1,16 @@ +# Description + +The core package contains the core of the Device SDK. +It provides a simple interface to handle ledger Devices. +It features the SDK's entry points, classes, types, structures and models. + +# Installation + +To install the package please execute the following command at the root of the clone repository: +`npm install @ledgerhq/device-sdk-core` + +# Usage + +# Testing + +# References API From e8d3852d7f9756b441d5110ee7c3b1260a8dedad Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 26 Apr 2024 17:21:04 +0200 Subject: [PATCH 197/253] :bug: (core): Close session on remove --- .../src/internal/device-session/service/DefaultSessionService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.ts index afad1737e..9169dc2c3 100644 --- a/packages/core/src/internal/device-session/service/DefaultSessionService.ts +++ b/packages/core/src/internal/device-session/service/DefaultSessionService.ts @@ -35,6 +35,7 @@ export class DefaultSessionService implements SessionService { removeSession(sessionId: string) { const found = this._sessions.find((s) => s.id === sessionId); if (found) { + found.close(); this._sessions = this._sessions.filter((s) => s.id !== sessionId); this._logger.info("Session removed", { data: { sessionId } }); return this; From 0fc032a9332a81ca25e34404be979dbcfc4086b3 Mon Sep 17 00:00:00 2001 From: jz_ Date: Fri, 26 Apr 2024 15:47:45 +0200 Subject: [PATCH 198/253] =?UTF-8?q?=F0=9F=94=96=20(core):=20Add=20changese?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/shaggy-experts-flash.md | 5 +++++ .../core/src/api/command/os/GetAppAndVersionCommand.test.ts | 5 +++-- packages/core/src/api/command/os/GetAppAndVersionCommand.ts | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 .changeset/shaggy-experts-flash.md diff --git a/.changeset/shaggy-experts-flash.md b/.changeset/shaggy-experts-flash.md new file mode 100644 index 000000000..27127b07a --- /dev/null +++ b/.changeset/shaggy-experts-flash.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": minor +--- + +Implement GetAppAndVersion command. diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts index 5226ff555..826d182ca 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts @@ -1,8 +1,9 @@ +import { Command } from "@api/command/Command"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; -import { Command } from "../Command"; + import { - GetAppAndVersionResponse, GetAppAndVersionCommand, + GetAppAndVersionResponse, } from "./GetAppAndVersionCommand"; const GET_APP_AND_VERSION_APDU = Uint8Array.from([ diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts index 6236b0303..39c949819 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts @@ -2,8 +2,8 @@ import { Apdu } from "@api/apdu/model/Apdu"; import { ApduBuilder, ApduBuilderArgs } from "@api/apdu/utils/ApduBuilder"; import { ApduParser } from "@api/apdu/utils/ApduParser"; import { Command } from "@api/command/Command"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { CommandUtils } from "@api/command/utils/CommandUtils"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; export type GetAppAndVersionResponse = { name: string; From dc4fc46ad10fe695f91448460790b9703862b18d Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 30 Apr 2024 11:09:26 +0200 Subject: [PATCH 199/253] :truck: (core): Create InternalDeviceModel & reorganize api types --- packages/core/src/api/command/Command.ts | 2 +- .../command/os/GetOsVersionCommand.test.ts | 2 +- .../src/api/command/os/GetOsVersionCommand.ts | 2 +- packages/core/src/api/device/DeviceModel.ts | 16 +++++++++++ packages/core/src/api/device/DeviceStatus.ts | 6 ++++ .../model => api/discovery}/ConnectionType.ts | 0 packages/core/src/api/index.ts | 3 ++ .../src/api/session/SessionDeviceState.ts | 17 +++++++++++ packages/core/src/api/session/types.ts | 1 + packages/core/src/api/types.ts | 11 ++------ .../core/src/api/usb/model/ConnectedDevice.ts | 7 ++--- .../data/DeviceModelDataSource.ts | 14 +++++----- .../data/StaticDeviceModelDataSource.test.ts | 2 +- .../data/StaticDeviceModelDataSource.ts | 28 ++++++++++--------- .../device-model/model/DeviceModel.stub.ts | 7 +++-- .../device-model/model/DeviceModel.test.ts | 16 ++++++----- .../device-model/model/DeviceModel.ts | 11 ++------ .../discovery/use-case/ConnectUseCase.ts | 5 ++-- .../discovery/use-case/DisconnectUseCase.ts | 2 +- .../use-case/StartDiscoveringUseCase.test.ts | 6 ++-- .../internal/send/use-case/SendApduUseCase.ts | 2 +- .../internal/usb/model/DiscoveredDevice.ts | 8 ++---- .../usb/model/InternalConnectedDevice.ts | 12 ++++---- .../internal/usb/transport/UsbHidTransport.ts | 2 +- .../usb/transport/WebUsbHidTransport.test.ts | 5 +--- .../usb/transport/WebUsbHidTransport.ts | 2 +- .../usb/use-case/GetConnectedDeviceUseCase.ts | 2 +- 27 files changed, 109 insertions(+), 82 deletions(-) create mode 100644 packages/core/src/api/device/DeviceModel.ts create mode 100644 packages/core/src/api/device/DeviceStatus.ts rename packages/core/src/{internal/discovery/model => api/discovery}/ConnectionType.ts (100%) create mode 100644 packages/core/src/api/session/SessionDeviceState.ts create mode 100644 packages/core/src/api/session/types.ts diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index 7b4f35586..d5f243e8c 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -1,5 +1,5 @@ import { Apdu } from "@api/apdu/model/Apdu"; -import { DeviceModelId } from "@internal/device-model/model/DeviceModel"; +import { DeviceModelId } from "@api/device/DeviceModel"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; export interface Command { diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.test.ts b/packages/core/src/api/command/os/GetOsVersionCommand.test.ts index 8df4e9eea..d954e133f 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.test.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.test.ts @@ -1,5 +1,5 @@ import { Command } from "@api/command/Command"; -import { DeviceModelId } from "@api/types"; +import { DeviceModelId } from "@api/device/DeviceModel"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.ts b/packages/core/src/api/command/os/GetOsVersionCommand.ts index 84c8fca69..9567b4612 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.ts @@ -3,7 +3,7 @@ import { ApduBuilder } from "@api/apdu/utils/ApduBuilder"; import { ApduParser } from "@api/apdu/utils/ApduParser"; import { Command } from "@api/command/Command"; import { CommandUtils } from "@api/command/utils/CommandUtils"; -import { DeviceModelId } from "@api/types"; +import { DeviceModelId } from "@api/device/DeviceModel"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; export type GetOsVersionResponse = { diff --git a/packages/core/src/api/device/DeviceModel.ts b/packages/core/src/api/device/DeviceModel.ts new file mode 100644 index 000000000..0f9367de2 --- /dev/null +++ b/packages/core/src/api/device/DeviceModel.ts @@ -0,0 +1,16 @@ +export enum DeviceModelId { + NANO_S = "nanoS", + NANO_SP = "nanoSP", + NANO_X = "nanoX", + STAX = "stax", +} + +export type DeviceId = string; + +export class DeviceModel { + constructor( + public id: DeviceId, + public model: DeviceModelId, + public name: string, + ) {} +} diff --git a/packages/core/src/api/device/DeviceStatus.ts b/packages/core/src/api/device/DeviceStatus.ts new file mode 100644 index 000000000..99a7eb2fb --- /dev/null +++ b/packages/core/src/api/device/DeviceStatus.ts @@ -0,0 +1,6 @@ +export enum DeviceStatus { + LOCKED = "LOCKED", + BUSY = "BUSY", + CONNECTED = "CONNECTED", + NOT_CONNECTED = "NOT_CONNECTED", +} diff --git a/packages/core/src/internal/discovery/model/ConnectionType.ts b/packages/core/src/api/discovery/ConnectionType.ts similarity index 100% rename from packages/core/src/internal/discovery/model/ConnectionType.ts rename to packages/core/src/api/discovery/ConnectionType.ts diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 49f78b6f8..001cd3ddc 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -1,9 +1,12 @@ "use strict"; +export { DeviceModel, DeviceModelId } from "./device/DeviceModel"; +export { DeviceStatus } from "./device/DeviceStatus"; export { DeviceSdk } from "./DeviceSdk"; export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; export { LogLevel } from "./logger-subscriber/model/LogLevel"; export { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; +export { SessionDeviceState } from "./session/SessionDeviceState"; export * from "./types"; export { ConnectedDevice } from "./usb/model/ConnectedDevice"; export { ApduResponse } from "@internal/device-session/model/ApduResponse"; diff --git a/packages/core/src/api/session/SessionDeviceState.ts b/packages/core/src/api/session/SessionDeviceState.ts new file mode 100644 index 000000000..baf89db36 --- /dev/null +++ b/packages/core/src/api/session/SessionDeviceState.ts @@ -0,0 +1,17 @@ +import { DeviceStatus } from "@api/device/DeviceStatus"; +import { SessionId } from "@api/session/types"; + +export type SessionStateConstructorArgs = { + sessionId: SessionId; + deviceStatus: DeviceStatus; +}; + +export class SessionDeviceState { + public readonly sessionId: SessionId; + public readonly deviceStatus: DeviceStatus; + + constructor({ sessionId, deviceStatus }: SessionStateConstructorArgs) { + this.sessionId = sessionId; + this.deviceStatus = deviceStatus; + } +} diff --git a/packages/core/src/api/session/types.ts b/packages/core/src/api/session/types.ts new file mode 100644 index 000000000..287a68aaa --- /dev/null +++ b/packages/core/src/api/session/types.ts @@ -0,0 +1 @@ +export type SessionId = string; diff --git a/packages/core/src/api/types.ts b/packages/core/src/api/types.ts index 384c0a79d..bd7b9c6a5 100644 --- a/packages/core/src/api/types.ts +++ b/packages/core/src/api/types.ts @@ -1,9 +1,4 @@ +export type { DeviceId } from "./device/DeviceModel"; +export type { ConnectionType } from "./discovery/ConnectionType"; export type { LogSubscriberOptions } from "./logger-subscriber/model/LogSubscriberOptions"; -export type { - DeviceId, - DeviceModel, -} from "@internal/device-model/model/DeviceModel"; -export { DeviceModelId } from "@internal/device-model/model/DeviceModel"; -export type { SessionId } from "@internal/device-session/model/Session"; -export type { ConnectionType } from "@internal/discovery/model/ConnectionType"; -export type { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; +export type { SessionId } from "./session/types"; diff --git a/packages/core/src/api/usb/model/ConnectedDevice.ts b/packages/core/src/api/usb/model/ConnectedDevice.ts index b358e86c3..ec1213e81 100644 --- a/packages/core/src/api/usb/model/ConnectedDevice.ts +++ b/packages/core/src/api/usb/model/ConnectedDevice.ts @@ -1,8 +1,5 @@ -import { - DeviceId, - DeviceModelId, -} from "@internal/device-model/model/DeviceModel"; -import { ConnectionType } from "@internal/discovery/model/ConnectionType"; +import { DeviceId, DeviceModelId } from "@api/device/DeviceModel"; +import { ConnectionType } from "@api/discovery/ConnectionType"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; type ConnectedDeviceConstructorArgs = { diff --git a/packages/core/src/internal/device-model/data/DeviceModelDataSource.ts b/packages/core/src/internal/device-model/data/DeviceModelDataSource.ts index 40bb0f044..fb56a8f46 100644 --- a/packages/core/src/internal/device-model/data/DeviceModelDataSource.ts +++ b/packages/core/src/internal/device-model/data/DeviceModelDataSource.ts @@ -1,15 +1,15 @@ -import { - DeviceModel, - DeviceModelId, -} from "@internal/device-model/model/DeviceModel"; +import { DeviceModelId } from "@api/device/DeviceModel"; +import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; /** * Source of truth for the device models */ export interface DeviceModelDataSource { - getAllDeviceModels(): DeviceModel[]; + getAllDeviceModels(): InternalDeviceModel[]; - getDeviceModel(params: { id: DeviceModelId }): DeviceModel; + getDeviceModel(params: { id: DeviceModelId }): InternalDeviceModel; - filterDeviceModels(params: Partial): DeviceModel[]; + filterDeviceModels( + params: Partial, + ): InternalDeviceModel[]; } diff --git a/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.test.ts b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.test.ts index 7912ec4f7..d3d1c76e5 100644 --- a/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.test.ts +++ b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.test.ts @@ -1,4 +1,4 @@ -import { DeviceModelId } from "@internal/device-model/model/DeviceModel"; +import { DeviceModelId } from "@api/device/DeviceModel"; import { StaticDeviceModelDataSource } from "./StaticDeviceModelDataSource"; diff --git a/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts index 359438577..b02c8fc70 100644 --- a/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts +++ b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts @@ -1,9 +1,7 @@ import { injectable } from "inversify"; -import { - DeviceModel, - DeviceModelId, -} from "@internal/device-model/model/DeviceModel"; +import { DeviceModelId } from "@api/device/DeviceModel"; +import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; import { DeviceModelDataSource } from "./DeviceModelDataSource"; @@ -12,8 +10,10 @@ import { DeviceModelDataSource } from "./DeviceModelDataSource"; */ @injectable() export class StaticDeviceModelDataSource implements DeviceModelDataSource { - private static deviceModelByIds: { [key in DeviceModelId]: DeviceModel } = { - [DeviceModelId.NANO_S]: new DeviceModel({ + private static deviceModelByIds: { + [key in DeviceModelId]: InternalDeviceModel; + } = { + [DeviceModelId.NANO_S]: new InternalDeviceModel({ id: DeviceModelId.NANO_S, productName: "Ledger Nano S", usbProductId: 0x10, @@ -22,7 +22,7 @@ export class StaticDeviceModelDataSource implements DeviceModelDataSource { memorySize: 320 * 1024, masks: [0x31100000], }), - [DeviceModelId.NANO_SP]: new DeviceModel({ + [DeviceModelId.NANO_SP]: new InternalDeviceModel({ id: DeviceModelId.NANO_SP, productName: "Ledger Nano S Plus", usbProductId: 0x50, @@ -31,7 +31,7 @@ export class StaticDeviceModelDataSource implements DeviceModelDataSource { memorySize: 1533 * 1024, masks: [0x33100000], }), - [DeviceModelId.NANO_X]: new DeviceModel({ + [DeviceModelId.NANO_X]: new InternalDeviceModel({ id: DeviceModelId.NANO_X, productName: "Ledger Nano X", usbProductId: 0x40, @@ -48,7 +48,7 @@ export class StaticDeviceModelDataSource implements DeviceModelDataSource { }, ], }), - [DeviceModelId.STAX]: new DeviceModel({ + [DeviceModelId.STAX]: new InternalDeviceModel({ id: DeviceModelId.STAX, productName: "Ledger Stax", usbProductId: 0x60, @@ -67,21 +67,23 @@ export class StaticDeviceModelDataSource implements DeviceModelDataSource { }), }; - getAllDeviceModels(): DeviceModel[] { + getAllDeviceModels(): InternalDeviceModel[] { return Object.values(StaticDeviceModelDataSource.deviceModelByIds); } - getDeviceModel(params: { id: DeviceModelId }): DeviceModel { + getDeviceModel(params: { id: DeviceModelId }): InternalDeviceModel { return StaticDeviceModelDataSource.deviceModelByIds[params.id]; } /** * Returns the list of device models that match all the given parameters */ - filterDeviceModels(params: Partial): DeviceModel[] { + filterDeviceModels( + params: Partial, + ): InternalDeviceModel[] { return this.getAllDeviceModels().filter((deviceModel) => { return Object.entries(params).every(([key, value]) => { - return deviceModel[key as keyof DeviceModel] === value; + return deviceModel[key as keyof InternalDeviceModel] === value; }); }); } diff --git a/packages/core/src/internal/device-model/model/DeviceModel.stub.ts b/packages/core/src/internal/device-model/model/DeviceModel.stub.ts index ca3501e7b..3de8daef5 100644 --- a/packages/core/src/internal/device-model/model/DeviceModel.stub.ts +++ b/packages/core/src/internal/device-model/model/DeviceModel.stub.ts @@ -1,8 +1,9 @@ -import { DeviceModel, DeviceModelId } from "./DeviceModel"; +import { DeviceModelId } from "@api/device/DeviceModel"; +import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; export function deviceModelStubBuilder( - props: Partial = {}, -): DeviceModel { + props: Partial = {}, +): InternalDeviceModel { return { id: DeviceModelId.NANO_X, productName: "Ledger Nano X", diff --git a/packages/core/src/internal/device-model/model/DeviceModel.test.ts b/packages/core/src/internal/device-model/model/DeviceModel.test.ts index 0fa7f5b06..457011d4d 100644 --- a/packages/core/src/internal/device-model/model/DeviceModel.test.ts +++ b/packages/core/src/internal/device-model/model/DeviceModel.test.ts @@ -1,22 +1,24 @@ -import { DeviceModel, DeviceModelId } from "./DeviceModel"; +import { DeviceModelId } from "@api/device/DeviceModel"; + +import { InternalDeviceModel } from "./DeviceModel"; import { deviceModelStubBuilder } from "./DeviceModel.stub"; describe("DeviceModel", () => { - let stubDeviceModel: DeviceModel; + let stubDeviceModel: InternalDeviceModel; beforeAll(() => { stubDeviceModel = deviceModelStubBuilder(); }); test("should return the correct block size for Nano X", () => { - const deviceModel = new DeviceModel(stubDeviceModel); + const deviceModel = new InternalDeviceModel(stubDeviceModel); const firmwareVersion = "2.0.0"; expect(deviceModel.getBlockSize(firmwareVersion)).toBe(4 * 1024); }); test("should return the correct block size for Stax", () => { - const deviceModel = new DeviceModel({ + const deviceModel = new InternalDeviceModel({ ...stubDeviceModel, id: DeviceModelId.STAX, }); @@ -26,7 +28,7 @@ describe("DeviceModel", () => { }); test("should return the correct block size for Nano SP", () => { - const deviceModel = new DeviceModel({ + const deviceModel = new InternalDeviceModel({ ...stubDeviceModel, id: DeviceModelId.NANO_SP, }); @@ -36,7 +38,7 @@ describe("DeviceModel", () => { }); test("should return the correct block size for Nano S with version lower than 2.0.0", () => { - const deviceModel = new DeviceModel({ + const deviceModel = new InternalDeviceModel({ ...stubDeviceModel, id: DeviceModelId.NANO_S, }); @@ -46,7 +48,7 @@ describe("DeviceModel", () => { }); test("should return the correct block size for Nano S with version 2.0.0", () => { - const deviceModel = new DeviceModel({ + const deviceModel = new InternalDeviceModel({ ...stubDeviceModel, id: DeviceModelId.NANO_S, }); diff --git a/packages/core/src/internal/device-model/model/DeviceModel.ts b/packages/core/src/internal/device-model/model/DeviceModel.ts index 11f365d90..1b8f6c8b5 100644 --- a/packages/core/src/internal/device-model/model/DeviceModel.ts +++ b/packages/core/src/internal/device-model/model/DeviceModel.ts @@ -1,18 +1,11 @@ import semver from "semver"; -export type DeviceId = string; - -export enum DeviceModelId { - NANO_S = "nanoS", - NANO_SP = "nanoSP", - NANO_X = "nanoX", - STAX = "stax", -} +import { DeviceModelId } from "@api/device/DeviceModel"; /** * Represents the info of a device model */ -export class DeviceModel { +export class InternalDeviceModel { id: DeviceModelId; productName: string; usbProductId: number; diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts index d8efebb0b..ed0f0fd0d 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -1,8 +1,9 @@ import { inject, injectable } from "inversify"; -import { DeviceId } from "@internal/device-model/model/DeviceModel"; +import { DeviceId } from "@api/device/DeviceModel"; +import { SessionId } from "@api/session/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import { Session, SessionId } from "@internal/device-session/model/Session"; +import { Session } from "@internal/device-session/model/Session"; import type { SessionService } from "@internal/device-session/service/SessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; diff --git a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts index 28bab15f3..d3b1c8de8 100644 --- a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts @@ -1,12 +1,12 @@ import { inject, injectable } from "inversify"; +import { SessionId } from "@api/session/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import type { SessionService } from "@internal/device-session/service/SessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; -import { SessionId } from "@root/src"; export type DisconnectUseCaseArgs = { sessionId: SessionId; diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts index 9d4dba0eb..1e14232fb 100644 --- a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts @@ -1,12 +1,12 @@ import { of } from "rxjs"; import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; -import { DeviceModel } from "@internal/device-model/model/DeviceModel"; +import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { usbHidDeviceConnectionFactoryStubBuilder } from "@internal/usb/service/UsbHidDeviceConnectionFactory.stub"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; -import { DiscoveredDevice } from "@root/src"; import { StartDiscoveringUseCase } from "./StartDiscoveringUseCase"; @@ -16,7 +16,7 @@ let logger: LoggerPublisherService; describe("StartDiscoveringUseCase", () => { const stubDiscoveredDevice: DiscoveredDevice = { id: "", - deviceModel: {} as DeviceModel, + deviceModel: {} as InternalDeviceModel, }; const tag = "logger-tag"; diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.ts index 47ad5cee9..d48754569 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.ts @@ -1,8 +1,8 @@ import { inject, injectable } from "inversify"; +import { SessionId } from "@api/session/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; -import { SessionId } from "@internal/device-session/model/Session"; import type { SessionService } from "@internal/device-session/service/SessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; diff --git a/packages/core/src/internal/usb/model/DiscoveredDevice.ts b/packages/core/src/internal/usb/model/DiscoveredDevice.ts index b17a970c9..7f908b7c0 100644 --- a/packages/core/src/internal/usb/model/DiscoveredDevice.ts +++ b/packages/core/src/internal/usb/model/DiscoveredDevice.ts @@ -1,7 +1,5 @@ -import { - DeviceId, - DeviceModel, -} from "@internal/device-model/model/DeviceModel"; +import { DeviceId } from "@api/device/DeviceModel"; +import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; /** * Represents a discovered/scanned (not yet connected to) device. @@ -9,5 +7,5 @@ import { export type DiscoveredDevice = { // type: "web-hid", // "node-hid" in the future -> no need as we will only have 1 USB transport implementation running id: DeviceId; // UUID to map with the associated transport device - deviceModel: DeviceModel; + deviceModel: InternalDeviceModel; }; diff --git a/packages/core/src/internal/usb/model/InternalConnectedDevice.ts b/packages/core/src/internal/usb/model/InternalConnectedDevice.ts index d34208e44..c457d4e80 100644 --- a/packages/core/src/internal/usb/model/InternalConnectedDevice.ts +++ b/packages/core/src/internal/usb/model/InternalConnectedDevice.ts @@ -1,8 +1,6 @@ -import { - DeviceId, - DeviceModel, -} from "@internal/device-model/model/DeviceModel"; -import { ConnectionType } from "@internal/discovery/model/ConnectionType"; +import { DeviceId } from "@api/device/DeviceModel"; +import { ConnectionType } from "@api/discovery/ConnectionType"; +import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; import { SendApduFnType } from "@internal/usb/transport/DeviceConnection"; /** @@ -10,14 +8,14 @@ import { SendApduFnType } from "@internal/usb/transport/DeviceConnection"; */ export type ConnectedDeviceConstructorArgs = { id: DeviceId; - deviceModel: DeviceModel; + deviceModel: InternalDeviceModel; type: ConnectionType; sendApdu: SendApduFnType; }; export class InternalConnectedDevice { public readonly id: DeviceId; - public readonly deviceModel: DeviceModel; + public readonly deviceModel: InternalDeviceModel; public readonly sendApdu: SendApduFnType; public readonly type: ConnectionType; diff --git a/packages/core/src/internal/usb/transport/UsbHidTransport.ts b/packages/core/src/internal/usb/transport/UsbHidTransport.ts index dc6e95dff..cdebe9a4a 100644 --- a/packages/core/src/internal/usb/transport/UsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/UsbHidTransport.ts @@ -1,8 +1,8 @@ import { Either } from "purify-ts"; import { Observable } from "rxjs"; +import { DeviceId } from "@api/device/DeviceModel"; import { SdkError } from "@api/Error"; -import { DeviceId } from "@internal/device-model/model/DeviceModel"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { ConnectError } from "@internal/usb/model/Errors"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index 62ca8fd3a..3795fc37d 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -1,10 +1,7 @@ import { Left, Right } from "purify-ts"; +import { DeviceModel, DeviceModelId } from "@api/device/DeviceModel"; import { StaticDeviceModelDataSource } from "@internal/device-model/data/StaticDeviceModelDataSource"; -import { - DeviceModel, - DeviceModelId, -} from "@internal/device-model/model/DeviceModel"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { DeviceNotRecognizedError, diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 1d38bbb4d..020466ec3 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -4,10 +4,10 @@ import { Either, EitherAsync, Left, Maybe, Right } from "purify-ts"; import { from, Observable, switchMap } from "rxjs"; import { v4 as uuid } from "uuid"; +import { DeviceId } from "@api/device/DeviceModel"; import { SdkError } from "@api/Error"; import type { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { deviceModelTypes } from "@internal/device-model/di/deviceModelTypes"; -import { DeviceId } from "@internal/device-model/model/DeviceModel"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { LEDGER_VENDOR_ID } from "@internal/usb/data/UsbHidConfig"; diff --git a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts index 7e396634c..7c8a6adbe 100644 --- a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts +++ b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts @@ -1,8 +1,8 @@ import { inject, injectable } from "inversify"; +import { SessionId } from "@api/session/types"; import { ConnectedDevice } from "@api/usb/model/ConnectedDevice"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import { SessionId } from "@internal/device-session/model/Session"; import type { SessionService } from "@internal/device-session/service/SessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; From 5e362554ca8f866e6a9917880cc227e3cec917d5 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 30 Apr 2024 11:12:15 +0200 Subject: [PATCH 200/253] :sparkles: (core): Create CommandUtils isLockedDeviceResponse --- .../api/command/utils/CommandUtils.test.ts | 45 ++++++++++++++++++- .../src/api/command/utils/CommandUtils.ts | 14 +++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/packages/core/src/api/command/utils/CommandUtils.test.ts b/packages/core/src/api/command/utils/CommandUtils.test.ts index e640b83bf..7f8028faf 100644 --- a/packages/core/src/api/command/utils/CommandUtils.test.ts +++ b/packages/core/src/api/command/utils/CommandUtils.test.ts @@ -24,11 +24,54 @@ describe("CommandUtils", () => { it("should return false if the status code is not 2 bytes long", () => { const response = new ApduResponse({ - statusCode: Uint8Array.from([0x90]), + statusCode: Uint8Array.from([0x55]), data: Uint8Array.from([]), }); expect(CommandUtils.isSuccessResponse(response)).toBe(false); }); }); + + describe("static isValidStatusCode", () => { + it("should return true if the status code is 2 bytes long", () => { + const statusCode = Uint8Array.from([0x90, 0x00]); + + expect(CommandUtils.isValidStatusCode(statusCode)).toBe(true); + }); + + it("should return false if the status code is not 2 bytes long", () => { + const statusCode = Uint8Array.from([0x90]); + + expect(CommandUtils.isValidStatusCode(statusCode)).toBe(false); + }); + }); + + describe("static isLockedDeviceResponse", () => { + it("should return true if the status code is 0x5515", () => { + const response = new ApduResponse({ + statusCode: Uint8Array.from([0x55, 0x15]), + data: Uint8Array.from([]), + }); + + expect(CommandUtils.isLockedDeviceResponse(response)).toBe(true); + }); + + it("should return false if the status code is not 0x5515", () => { + const response = new ApduResponse({ + statusCode: Uint8Array.from([0x90, 0x00]), + data: Uint8Array.from([]), + }); + + expect(CommandUtils.isLockedDeviceResponse(response)).toBe(false); + }); + + it("should return false if the status code is not 2 bytes long", () => { + const response = new ApduResponse({ + statusCode: Uint8Array.from([0x90]), + data: Uint8Array.from([]), + }); + + expect(CommandUtils.isLockedDeviceResponse(response)).toBe(false); + }); + }); }); diff --git a/packages/core/src/api/command/utils/CommandUtils.ts b/packages/core/src/api/command/utils/CommandUtils.ts index a4a1bd5d2..7042a0871 100644 --- a/packages/core/src/api/command/utils/CommandUtils.ts +++ b/packages/core/src/api/command/utils/CommandUtils.ts @@ -1,11 +1,23 @@ import { ApduResponse } from "@internal/device-session/model/ApduResponse"; export class CommandUtils { + static isValidStatusCode(statusCode: Uint8Array) { + return statusCode.length === 2; + } + static isSuccessResponse({ statusCode }: ApduResponse) { - if (statusCode.length !== 2) { + if (!this.isValidStatusCode(statusCode)) { return false; } return statusCode[0] === 0x90 && statusCode[1] === 0x00; } + + static isLockedDeviceResponse({ statusCode }: ApduResponse) { + if (!this.isValidStatusCode(statusCode)) { + return false; + } + + return statusCode[0] === 0x55 && statusCode[1] === 0x15; + } } From c543a1e936b56005d0a74ca6922d1c5a271992a1 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 30 Apr 2024 11:14:40 +0200 Subject: [PATCH 201/253] :sparkles: (core): Handle session state & locked device --- .../internal/device-session/model/Session.ts | 54 ++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index 195463de7..a0c4e57a2 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -1,10 +1,13 @@ +import { BehaviorSubject } from "rxjs"; import { v4 as uuidv4 } from "uuid"; import { Command } from "@api/command/Command"; -import { DeviceModelId } from "@api/types"; +import { CommandUtils } from "@api/command/utils/CommandUtils"; +import { DeviceModelId } from "@api/device/DeviceModel"; +import { SessionDeviceState } from "@api/session/SessionDeviceState"; +import { SessionId } from "@api/session/types"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; - -export type SessionId = string; +import { DeviceStatus } from "@root/src"; export type SessionConstructorArgs = { connectedDevice: InternalConnectedDevice; @@ -17,10 +20,17 @@ export type SessionConstructorArgs = { export class Session { private readonly _id: SessionId; private readonly _connectedDevice: InternalConnectedDevice; + private readonly _deviceState: BehaviorSubject; constructor({ connectedDevice, id = uuidv4() }: SessionConstructorArgs) { this._id = id; this._connectedDevice = connectedDevice; + this._deviceState = new BehaviorSubject( + new SessionDeviceState({ + sessionId: this._id, + deviceStatus: DeviceStatus.CONNECTED, + }), + ); } public get id() { @@ -31,8 +41,39 @@ export class Session { return this._connectedDevice; } - sendApdu(rawApdu: Uint8Array) { - return this._connectedDevice.sendApdu(rawApdu); + public get state() { + return this._deviceState.asObservable(); + } + + async sendApdu(rawApdu: Uint8Array) { + const sessionState = this._deviceState.getValue(); + this._deviceState.next( + new SessionDeviceState({ + ...sessionState, + deviceStatus: DeviceStatus.BUSY, + }), + ); + + const errorOrResponse = await this._connectedDevice.sendApdu(rawApdu); + + return errorOrResponse.map((response) => { + if (CommandUtils.isLockedDeviceResponse(response)) { + this._deviceState.next( + new SessionDeviceState({ + ...sessionState, + deviceStatus: DeviceStatus.LOCKED, + }), + ); + } else { + this._deviceState.next( + new SessionDeviceState({ + ...sessionState, + deviceStatus: DeviceStatus.CONNECTED, + }), + ); + } + return response; + }); } getCommand(command: Command) { @@ -50,7 +91,6 @@ export class Session { } close() { - // @todo: Implement session close - return; + this._deviceState.complete(); } } From 4722287bbdb02c748ef073b554d10852eec1faab Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 30 Apr 2024 11:15:15 +0200 Subject: [PATCH 202/253] :sparkles: (core): Create GetSessionStateUseCase --- packages/core/src/api/DeviceSdk.test.ts | 2 + packages/core/src/api/DeviceSdk.ts | 15 ++++- packages/core/src/di.ts | 2 +- .../device-session/di/deviceSessionModule.ts | 18 ++++-- .../device-session/di/deviceSessionTypes.ts | 1 + .../GetSessionDeviceStateUseCase.test.ts | 56 +++++++++++++++++++ .../use-case/GetSessionDeviceStateUseCase.ts | 40 +++++++++++++ 7 files changed, 128 insertions(+), 6 deletions(-) create mode 100644 packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.test.ts create mode 100644 packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.ts diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts index b0d8b19dd..a32de59b8 100644 --- a/packages/core/src/api/DeviceSdk.test.ts +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -1,6 +1,7 @@ import { LocalConfigDataSource } from "@internal/config/data/ConfigDataSource"; import { StubLocalConfigDataSource } from "@internal/config/data/LocalConfigDataSource.stub"; import { configTypes } from "@internal/config/di/configTypes"; +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { discoveryTypes } from "@internal/discovery/di/discoveryTypes"; import { sendTypes } from "@internal/send/di/sendTypes"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; @@ -86,6 +87,7 @@ describe("DeviceSdk", () => { [commandTypes.SendCommandUseCase], [usbDiTypes.GetConnectedDeviceUseCase], [discoveryTypes.DisconnectUseCase], + [deviceSessionTypes.GetSessionDeviceStateUseCase], ])("should have %p use case", (diSymbol) => { const uc = sdk.container.get(diSymbol); expect(uc).toBeInstanceOf(StubUseCase); diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 935f28c42..a54d0a5b0 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -6,11 +6,14 @@ import { SendCommandUseCase, SendCommandUseCaseArgs, } from "@api/command/use-case/SendCommandUseCase"; +import { SessionDeviceState } from "@api/session/SessionDeviceState"; +import { SessionId } from "@api/session/types"; import { ConnectedDevice } from "@api/usb/model/ConnectedDevice"; import { configTypes } from "@internal/config/di/configTypes"; import { GetSdkVersionUseCase } from "@internal/config/use-case/GetSdkVersionUseCase"; +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; -import { SessionId } from "@internal/device-session/model/Session"; +import { GetSessionDeviceStateUseCase } from "@internal/device-session/use-case/GetSessionDeviceStateUseCase"; import { discoveryTypes } from "@internal/discovery/di/discoveryTypes"; import { ConnectUseCase, @@ -92,4 +95,14 @@ export class DeviceSdk { .get(usbDiTypes.GetConnectedDeviceUseCase) .execute(args); } + + getSessionDeviceState(args: { + sessionId: SessionId; + }): Observable { + return this.container + .get( + deviceSessionTypes.GetSessionDeviceStateUseCase, + ) + .execute(args); + } } diff --git a/packages/core/src/di.ts b/packages/core/src/di.ts index 2d2462389..050e9e320 100644 --- a/packages/core/src/di.ts +++ b/packages/core/src/di.ts @@ -35,7 +35,7 @@ export const makeContainer = ({ usbModuleFactory({ stub }), discoveryModuleFactory({ stub }), loggerModuleFactory({ subscribers: loggers }), - deviceSessionModuleFactory(), + deviceSessionModuleFactory({ stub }), sendModuleFactory({ stub }), commandModuleFactory({ stub }), // modules go here diff --git a/packages/core/src/internal/device-session/di/deviceSessionModule.ts b/packages/core/src/internal/device-session/di/deviceSessionModule.ts index fa4a07031..5e4148cf7 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionModule.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionModule.ts @@ -1,6 +1,5 @@ import { ContainerModule, interfaces } from "inversify"; -import { Session } from "@internal/device-session/model/Session"; import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; import { @@ -12,23 +11,26 @@ import { DefaultApduSenderServiceConstructorArgs, } from "@internal/device-session/service/DefaultApduSenderService"; import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { GetSessionDeviceStateUseCase } from "@internal/device-session/use-case/GetSessionDeviceStateUseCase"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { StubUseCase } from "@root/src/di.stub"; import { deviceSessionTypes } from "./deviceSessionTypes"; export type DeviceSessionModuleArgs = Partial<{ stub: boolean; - sessions: Session[]; }>; -export const deviceSessionModuleFactory = () => +export const deviceSessionModuleFactory = ( + { stub }: DeviceSessionModuleArgs = { stub: false }, +) => new ContainerModule( ( bind, _unbind, _isBound, - _rebind, + rebind, _unbindAsync, _onActivation, _onDeactivation, @@ -60,5 +62,13 @@ export const deviceSessionModuleFactory = () => bind(deviceSessionTypes.SessionService) .to(DefaultSessionService) .inSingletonScope(); + + bind(deviceSessionTypes.GetSessionDeviceStateUseCase).to( + GetSessionDeviceStateUseCase, + ); + + if (stub) { + rebind(deviceSessionTypes.GetSessionDeviceStateUseCase).to(StubUseCase); + } }, ); diff --git a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts index 44b9da359..e4fd35ed3 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts @@ -2,4 +2,5 @@ export const deviceSessionTypes = { ApduSenderServiceFactory: Symbol.for("ApduSenderServiceFactory"), ApduReceiverServiceFactory: Symbol.for("ApduReceiverServiceFactory"), SessionService: Symbol.for("SessionService"), + GetSessionDeviceStateUseCase: Symbol.for("GetSessionDeviceStateUseCase"), }; diff --git a/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.test.ts b/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.test.ts new file mode 100644 index 000000000..0f6a54af4 --- /dev/null +++ b/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.test.ts @@ -0,0 +1,56 @@ +import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; +import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { SessionService } from "@internal/device-session/service/SessionService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +import { GetSessionDeviceStateUseCase } from "./GetSessionDeviceStateUseCase"; + +let logger: LoggerPublisherService; +let sessionService: SessionService; + +const fakeSessionId = "fakeSessionId"; + +describe("GetSessionDeviceStateUseCase", () => { + beforeEach(() => { + logger = new DefaultLoggerPublisherService( + [], + "get-connected-device-use-case-test", + ); + sessionService = new DefaultSessionService(() => logger); + }); + it("should retrieve session device state", () => { + // given + const session = sessionStubBuilder({ id: fakeSessionId }); + sessionService.addSession(session); + const useCase = new GetSessionDeviceStateUseCase( + sessionService, + () => logger, + ); + + // when + const response = useCase.execute({ + sessionId: fakeSessionId, + }); + + // then + expect(response).toStrictEqual(session.state); + }); + + it("should throw error when session is not found", () => { + // given + const useCase = new GetSessionDeviceStateUseCase( + sessionService, + () => logger, + ); + + // when + const execute = () => + useCase.execute({ + sessionId: fakeSessionId, + }); + + // then + expect(execute).toThrowError(); + }); +}); diff --git a/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.ts b/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.ts new file mode 100644 index 000000000..61596a45c --- /dev/null +++ b/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.ts @@ -0,0 +1,40 @@ +import { inject, injectable } from "inversify"; + +import { SessionId } from "@api/session/types"; +import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; +import type { SessionService } from "@internal/device-session/service/SessionService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +export type GetSessionDeviceStateUseCaseArgs = { + sessionId: SessionId; +}; + +/** + * Get session state from its id. + */ +@injectable() +export class GetSessionDeviceStateUseCase { + private readonly _sessionService: SessionService; + private readonly _logger: LoggerPublisherService; + constructor( + @inject(deviceSessionTypes.SessionService) sessionService: SessionService, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerFactory: (tag: string) => LoggerPublisherService, + ) { + this._sessionService = sessionService; + this._logger = loggerFactory("GetSessionDeviceStateUseCase"); + } + + execute({ sessionId }: GetSessionDeviceStateUseCaseArgs) { + const errorOrDeviceSession = this._sessionService.getSessionById(sessionId); + + return errorOrDeviceSession.caseOf({ + Left: (error) => { + this._logger.error("Error getting session device", { data: { error } }); + throw error; + }, + Right: (deviceSession) => deviceSession.state, + }); + } +} From 68dadb73e4edb55a69ff420346bda8a25cc99c88 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 30 Apr 2024 11:17:28 +0200 Subject: [PATCH 203/253] :lipstick: (smpl): Observe device state from session --- .../src/components/Device/StatusText.tsx | 15 ++---- apps/sample/src/components/Device/index.tsx | 27 +++++------ apps/sample/src/components/MainView/index.tsx | 46 ++++++++----------- apps/sample/src/components/Sidebar/index.tsx | 1 + apps/sample/src/hooks/useSessionState.ts | 28 +++++++++++ 5 files changed, 66 insertions(+), 51 deletions(-) create mode 100644 apps/sample/src/hooks/useSessionState.ts diff --git a/apps/sample/src/components/Device/StatusText.tsx b/apps/sample/src/components/Device/StatusText.tsx index 9dfe482e2..4e983cf30 100644 --- a/apps/sample/src/components/Device/StatusText.tsx +++ b/apps/sample/src/components/Device/StatusText.tsx @@ -1,30 +1,25 @@ +import { DeviceStatus } from "@ledgerhq/device-sdk-core"; import { Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; -import { DeviceStatus } from "."; - const getColorFromState = ({ - status, + state, theme, }: { - status: DeviceStatus; + state: DeviceStatus; theme: DefaultTheme; }) => { - switch (status) { + switch (state) { case DeviceStatus.CONNECTED: return theme.colors.success.c50; - case DeviceStatus.AVAILABLE: - return theme.colors.primary.c80; case DeviceStatus.BUSY: case DeviceStatus.LOCKED: return theme.colors.warning.c60; - case DeviceStatus.NOT_CONNECTED: - return theme.colors.neutral.c80; } }; type StatusTextProps = { - readonly status: DeviceStatus; + readonly state: DeviceStatus; }; export const StatusText = styled(Text)` diff --git a/apps/sample/src/components/Device/index.tsx b/apps/sample/src/components/Device/index.tsx index 9c58b1364..2187736b9 100644 --- a/apps/sample/src/components/Device/index.tsx +++ b/apps/sample/src/components/Device/index.tsx @@ -1,8 +1,14 @@ import React from "react"; -import { ConnectionType, DeviceModelId } from "@ledgerhq/device-sdk-core"; +import { + ConnectionType, + DeviceModelId, + SessionId, +} from "@ledgerhq/device-sdk-core"; import { Box, DropdownGeneric, Flex, Icons, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; +import { useSessionState } from "@/hooks/useSessionState"; + import { StatusText } from "./StatusText"; const Root = styled(Flex).attrs({ p: 5, mb: 8, borderRadius: 2 })` @@ -28,30 +34,23 @@ const ActionRow = styled(Flex).attrs({ py: 4, px: 2 })` justify-content: space-between; `; -export enum DeviceStatus { - AVAILABLE = "Available", - CONNECTED = "Connected", - BUSY = "Busy", - LOCKED = "Locked", - NOT_CONNECTED = "Not Connected", -} - // These props are subject to change. type DeviceProps = { name: string; type: ConnectionType; + sessionId: SessionId; model: DeviceModelId; - status?: DeviceStatus; onDisconnect: () => Promise; }; export const Device: React.FC = ({ name, - status = DeviceStatus.AVAILABLE, type, model, onDisconnect, + sessionId, }) => { + const sessionState = useSessionState(sessionId); return ( @@ -64,9 +63,11 @@ export const Device: React.FC = ({ {name} - {status && ( + {sessionState && ( <> - {status} + + {sessionState.deviceStatus} + diff --git a/apps/sample/src/components/MainView/index.tsx b/apps/sample/src/components/MainView/index.tsx index 572f9b3d0..bc26aa261 100644 --- a/apps/sample/src/components/MainView/index.tsx +++ b/apps/sample/src/components/MainView/index.tsx @@ -1,5 +1,4 @@ -import React, { useCallback, useEffect, useState } from "react"; -import type { DiscoveredDevice } from "@ledgerhq/device-sdk-core"; +import React, { useCallback, useEffect } from "react"; import { Button, Flex, Text } from "@ledgerhq/react-ui"; import Image from "next/image"; import styled, { DefaultTheme } from "styled-components"; @@ -25,15 +24,28 @@ const NanoLogo = styled(Image).attrs({ mb: 8 })` export const MainView: React.FC = () => { const sdk = useSdk(); const { dispatch } = useSessionContext(); - const [discoveredDevice, setDiscoveredDevice] = - useState(null); // Example starting the discovery on a user action const onSelectDeviceClicked = useCallback(() => { sdk.startDiscovering().subscribe({ next: (device) => { - console.log(`🦖 Discovered device: `, device); - setDiscoveredDevice(device); + sdk + .connect({ deviceId: device.id }) + .then((sessionId) => { + console.log( + `🦖 Response from connect: ${JSON.stringify(sessionId)} 🎉`, + ); + dispatch({ + type: "add_session", + payload: { + sessionId, + connectedDevice: sdk.getConnectedDevice({ sessionId }), + }, + }); + }) + .catch((error) => { + console.error(`Error from connection or get-version`, error); + }); }, error: (error) => { console.error(error); @@ -48,28 +60,6 @@ export const MainView: React.FC = () => { }; }, [sdk]); - useEffect(() => { - if (discoveredDevice) { - sdk - .connect({ deviceId: discoveredDevice.id }) - .then((sessionId) => { - console.log( - `🦖 Response from connect: ${JSON.stringify(sessionId)} 🎉`, - ); - dispatch({ - type: "add_session", - payload: { - sessionId, - connectedDevice: sdk.getConnectedDevice({ sessionId }), - }, - }); - }) - .catch((error) => { - console.error(`Error from connection or get-version`, error); - }); - } - }, [sdk, discoveredDevice]); - return ( { {Object.entries(deviceById).map(([sessionId, device]) => ( (); + + useEffect(() => { + if (sessionId) { + const subscription = sdk + .getSessionDeviceState({ + sessionId, + }) + .subscribe((state) => { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + setSessionState(state); + }); + + return () => { + subscription.unsubscribe(); + }; + } + }, [sessionId, sdk]); + + return sessionState; +} From 8563963b04a477a7728ecfca4c86274d9247b8ba Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Tue, 30 Apr 2024 11:28:34 +0200 Subject: [PATCH 204/253] :bookmark: (core): Add changeset --- .changeset/four-knives-judge.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/four-knives-judge.md diff --git a/.changeset/four-knives-judge.md b/.changeset/four-knives-judge.md new file mode 100644 index 000000000..cded226e4 --- /dev/null +++ b/.changeset/four-knives-judge.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": minor +--- + +Handle device session state From fea8294c91324a126ee1b36abe8da3df755ca2e3 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 2 May 2024 11:22:42 +0200 Subject: [PATCH 205/253] :art: (core): Reviews --- .../internal/device-session/model/Session.ts | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index a0c4e57a2..bb66fe95f 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -45,33 +45,27 @@ export class Session { return this._deviceState.asObservable(); } - async sendApdu(rawApdu: Uint8Array) { + private updateDeviceStatus(deviceStatus: DeviceStatus) { const sessionState = this._deviceState.getValue(); this._deviceState.next( new SessionDeviceState({ ...sessionState, - deviceStatus: DeviceStatus.BUSY, + deviceStatus, }), ); + } + + async sendApdu(rawApdu: Uint8Array) { + this.updateDeviceStatus(DeviceStatus.BUSY); const errorOrResponse = await this._connectedDevice.sendApdu(rawApdu); return errorOrResponse.map((response) => { - if (CommandUtils.isLockedDeviceResponse(response)) { - this._deviceState.next( - new SessionDeviceState({ - ...sessionState, - deviceStatus: DeviceStatus.LOCKED, - }), - ); - } else { - this._deviceState.next( - new SessionDeviceState({ - ...sessionState, - deviceStatus: DeviceStatus.CONNECTED, - }), - ); - } + this.updateDeviceStatus( + CommandUtils.isLockedDeviceResponse(response) + ? DeviceStatus.LOCKED + : DeviceStatus.CONNECTED, + ); return response; }); } From 5deb5a82779057162c37c1692319c887da72bb55 Mon Sep 17 00:00:00 2001 From: jz_ Date: Mon, 29 Apr 2024 15:28:40 +0200 Subject: [PATCH 206/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Add=20GetBatteryS?= =?UTF-8?q?tatus=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/gold-chairs-divide.md | 5 + packages/core/src/api/DeviceSdk.ts | 2 +- .../core/src/api/apdu/utils/ApduParser.ts | 8 +- packages/core/src/api/command/Command.ts | 9 +- .../os/GetBatteryStatusCommand.test.ts | 123 ++++++++++++++++++ .../api/command/os/GetBatteryStatusCommand.ts | 121 +++++++++++++++++ .../command/os/GetOsVersionCommand.test.ts | 2 +- .../src/api/command/os/GetOsVersionCommand.ts | 4 +- .../use-case/SendCommandUseCase.test.ts | 8 +- .../command/use-case/SendCommandUseCase.ts | 12 +- .../internal/device-session/model/Session.ts | 8 +- 11 files changed, 277 insertions(+), 25 deletions(-) create mode 100644 .changeset/gold-chairs-divide.md create mode 100644 packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts create mode 100644 packages/core/src/api/command/os/GetBatteryStatusCommand.ts diff --git a/.changeset/gold-chairs-divide.md b/.changeset/gold-chairs-divide.md new file mode 100644 index 000000000..47384c41a --- /dev/null +++ b/.changeset/gold-chairs-divide.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": minor +--- + +Add `GetBatteryStatus` command. diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index a54d0a5b0..8cd4fe02a 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -84,7 +84,7 @@ export class DeviceSdk { .execute(args); } - sendCommand(args: SendCommandUseCaseArgs): Promise { + sendCommand(args: SendCommandUseCaseArgs): Promise { return this.container .get(commandTypes.SendCommandUseCase) .execute(args); diff --git a/packages/core/src/api/apdu/utils/ApduParser.ts b/packages/core/src/api/apdu/utils/ApduParser.ts index 88e24032d..7c5cb2236 100644 --- a/packages/core/src/api/apdu/utils/ApduParser.ts +++ b/packages/core/src/api/apdu/utils/ApduParser.ts @@ -43,9 +43,9 @@ export class ApduParser { extract16BitUInt(): number | undefined { if (this._outOfRange(2)) return; let msb = this.extract8BitUint(); - if (!msb) return; + if (msb === undefined) return; const lsb = this.extract8BitUint(); - if (!lsb) return; + if (lsb === undefined) return; msb *= 0x100; return msb + lsb; } @@ -57,9 +57,9 @@ export class ApduParser { extract32BitUInt(): number | undefined { if (this._outOfRange(4)) return; let msw = this.extract16BitUInt(); - if (!msw) return; + if (msw === undefined) return; const lsw = this.extract16BitUInt(); - if (!lsw) return; + if (lsw === undefined) return; msw *= 0x10000; return msw + lsw; } diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index d46509147..8d9795fde 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -2,7 +2,10 @@ import { Apdu } from "@api/apdu/model/Apdu"; import { DeviceModelId } from "@api/device/DeviceModel"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; -export interface Command { - getApdu(params?: Params): Apdu; - parseResponse(apduResponse: ApduResponse, deviceModelId?: DeviceModelId): T; +export interface Command { + getApdu(args?: U): Apdu; + parseResponse( + apduResponse: ApduResponse, + deviceModelId: DeviceModelId | void, + ): T; } diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts new file mode 100644 index 000000000..843b35d01 --- /dev/null +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts @@ -0,0 +1,123 @@ +import { Command } from "@api/command/Command"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; + +import { + BatteryStatusType, + ChargingMode, + GetBatteryStatusCommand, + GetBatteryStatusResponse, +} from "./GetBatteryStatusCommand"; + +const GET_BATTERY_STATUS_APDU_PERCENTAGE = Uint8Array.from([ + 0xe0, 0x10, 0x00, 0x00, 0x00, +]); +const GET_BATTERY_STATUS_APDU_VOLTAGE = Uint8Array.from([ + 0xe0, 0x10, 0x00, 0x01, 0x00, +]); +const GET_BATTERY_STATUS_APDU_TEMPERATURE = Uint8Array.from([ + 0xe0, 0x10, 0x00, 0x02, 0x00, +]); +const GET_BATTERY_STATUS_APDU_CURRENT = Uint8Array.from([ + 0xe0, 0x10, 0x00, 0x03, 0x00, +]); +const GET_BATTERY_STATUS_APDU_FLAGS = Uint8Array.from([ + 0xe0, 0x10, 0x00, 0x04, 0x00, +]); + +const PERCENTAGE_RESPONSE_HEX = Uint8Array.from([0x37, 0x90, 0x00]); +const VOLTAGE_RESPONSE_HEX = Uint8Array.from([0x0f, 0xff, 0x90, 0x00]); +const TEMPERATURE_RESPONSE_HEX = Uint8Array.from([0x10, 0x90, 0x00]); +const FLAGS_RESPONSE_HEX = Uint8Array.from([ + 0x00, 0x00, 0x00, 0x0f, 0x90, 0x00, +]); +const FAILED_RESPONSE_HEX = Uint8Array.from([0x67, 0x00]); + +describe("GetBatteryStatus", () => { + let command: Command; + + beforeEach(() => { + command = new GetBatteryStatusCommand(); + }); + + describe("getApdu", () => { + it("should return the GetBatteryStatus APUD", () => { + expect( + command.getApdu(BatteryStatusType.BATTERY_PERCENTAGE).getRawApdu(), + ).toStrictEqual(GET_BATTERY_STATUS_APDU_PERCENTAGE); + expect( + command.getApdu(BatteryStatusType.BATTERY_VOLTAGE).getRawApdu(), + ).toStrictEqual(GET_BATTERY_STATUS_APDU_VOLTAGE); + expect( + command.getApdu(BatteryStatusType.BATTERY_TEMPERATURE).getRawApdu(), + ).toStrictEqual(GET_BATTERY_STATUS_APDU_TEMPERATURE); + expect( + command.getApdu(BatteryStatusType.BATTERY_CURRENT).getRawApdu(), + ).toStrictEqual(GET_BATTERY_STATUS_APDU_CURRENT); + expect( + command.getApdu(BatteryStatusType.BATTERY_FLAGS).getRawApdu(), + ).toStrictEqual(GET_BATTERY_STATUS_APDU_FLAGS); + }); + }); + describe("parseResponse", () => { + it("should parse the response when querying percentage", () => { + const PERCENTAGE_RESPONSE = new ApduResponse({ + statusCode: PERCENTAGE_RESPONSE_HEX.slice(-2), + data: PERCENTAGE_RESPONSE_HEX.slice(0, -2), + }); + command.getApdu(BatteryStatusType.BATTERY_PERCENTAGE); + const parsed = command.parseResponse(PERCENTAGE_RESPONSE); + expect(parsed).toStrictEqual(55); + }); + it("should parse the response when querying voltage", () => { + const VOLTAGE_RESPONSE = new ApduResponse({ + statusCode: VOLTAGE_RESPONSE_HEX.slice(-2), + data: VOLTAGE_RESPONSE_HEX.slice(0, -2), + }); + command.getApdu(BatteryStatusType.BATTERY_VOLTAGE); + const parsed = command.parseResponse(VOLTAGE_RESPONSE); + expect(parsed).toStrictEqual(4095); + }); + it("should parse the response when querying temperature", () => { + const TEMPERATURE_RESPONSE = new ApduResponse({ + statusCode: TEMPERATURE_RESPONSE_HEX.slice(-2), + data: TEMPERATURE_RESPONSE_HEX.slice(0, -2), + }); + command.getApdu(BatteryStatusType.BATTERY_TEMPERATURE); + const parsed = command.parseResponse(TEMPERATURE_RESPONSE); + expect(parsed).toStrictEqual(16); + }); + it("should parse the response when querying flags", () => { + const FLAGS_RESPONSE = new ApduResponse({ + statusCode: FLAGS_RESPONSE_HEX.slice(-2), + data: FLAGS_RESPONSE_HEX.slice(0, -2), + }); + command.getApdu(BatteryStatusType.BATTERY_FLAGS); + const parsed = command.parseResponse(FLAGS_RESPONSE); + expect(parsed).toStrictEqual({ + charging: ChargingMode.USB, + issueCharging: false, + issueTemperature: false, + issueBattery: false, + }); + }); + it("should not parse the response when getApdu not called", () => { + const PERCENTAGE_RESPONSE = new ApduResponse({ + statusCode: PERCENTAGE_RESPONSE_HEX.slice(-2), + data: PERCENTAGE_RESPONSE_HEX.slice(0, -2), + }); + expect(() => command.parseResponse(PERCENTAGE_RESPONSE)).toThrow( + "Call getApdu to initialise battery status type.", + ); + }); + it("should throw an error if the response returned unsupported format", () => { + const FAILED_RESPONSE = new ApduResponse({ + statusCode: FAILED_RESPONSE_HEX.slice(-2), + data: FAILED_RESPONSE_HEX.slice(0, -2), + }); + command.getApdu(BatteryStatusType.BATTERY_PERCENTAGE); + expect(() => command.parseResponse(FAILED_RESPONSE)).toThrow( + "Unexpected status word: 6700", + ); + }); + }); +}); diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts new file mode 100644 index 000000000..38d1ad396 --- /dev/null +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts @@ -0,0 +1,121 @@ +import { Apdu } from "@api/apdu/model/Apdu"; +import { ApduBuilder, ApduBuilderArgs } from "@api/apdu/utils/ApduBuilder"; +import { ApduParser } from "@api/apdu/utils/ApduParser"; +import { Command } from "@api/command/Command"; +import { CommandUtils } from "@api/command/utils/CommandUtils"; +import { ApduResponse } from "@internal/device-session/model/ApduResponse"; + +export enum BatteryStatusType { + BATTERY_PERCENTAGE = 0x00, + BATTERY_VOLTAGE = 0x01, + BATTERY_TEMPERATURE = 0x02, + BATTERY_CURRENT = 0x03, + BATTERY_FLAGS = 0x04, +} + +export enum ChargingMode { + NONE = 0x00, + USB = 0x01, + QI = 0x02, +} + +enum FlagMasks { + CHARGING = 0x00000001, + USB = 0x00000002, + USB_POWERED = 0x00000008, + BLE = 0x00000004, + ISSUE_BATTERY = 0x00000080, + ISSUE_CHARGING = 0x00000010, + ISSUE_TEMPERATURE = 0x00000020, +} + +type BatteryStatusFlags = { + charging: ChargingMode; + issueCharging: boolean; + issueTemperature: boolean; + issueBattery: boolean; +}; + +export type GetBatteryStatusResponse = number | BatteryStatusFlags; + +export class GetBatteryStatusCommand + implements Command +{ + private _statusType: BatteryStatusType | undefined = undefined; + + getApdu(statusType: BatteryStatusType): Apdu { + this._statusType = statusType; + const getBatteryStatusArgs: ApduBuilderArgs = { + cla: 0xe0, + ins: 0x10, + p1: 0x00, + p2: statusType, + } as const; + return new ApduBuilder(getBatteryStatusArgs).build(); + } + + parseResponse(apduResponse: ApduResponse): GetBatteryStatusResponse { + if (this._statusType === undefined) { + throw new Error("Call getApdu to initialise battery status type."); + } + + const parser = new ApduParser(apduResponse); + // [SHOULD] Implement new error treatment logic + if (!CommandUtils.isSuccessResponse(apduResponse)) { + throw new Error( + `Unexpected status word: ${parser.encodeToHexaString( + apduResponse.statusCode, + )}`, + ); + } + + switch (this._statusType) { + case BatteryStatusType.BATTERY_PERCENTAGE: { + const percentage = parser.extract8BitUint(); + if (!percentage) { + throw new Error("Cannot parse APDU response"); + } + return percentage > 100 ? -1 : percentage; + } + case BatteryStatusType.BATTERY_VOLTAGE: { + const data = parser.extract16BitUInt(); + if (!data) { + throw new Error("Cannot parse APDU response"); + } + return data; + } + case BatteryStatusType.BATTERY_TEMPERATURE: + case BatteryStatusType.BATTERY_CURRENT: { + const data = parser.extract8BitUint(); + if (!data) { + throw new Error("Cannot parse APDU response"); + } + return (data << 24) >> 24; + } + case BatteryStatusType.BATTERY_FLAGS: { + const flags = parser.extract32BitUInt(); + if (!flags) { + throw new Error("Cannot parse APDU response"); + } + const chargingUSB = !!(flags & FlagMasks.USB_POWERED); + const chargingQi = !chargingUSB && !!(flags & FlagMasks.CHARGING); + return { + charging: chargingQi + ? ChargingMode.QI + : chargingUSB + ? ChargingMode.USB + : ChargingMode.NONE, + issueCharging: !!(flags & FlagMasks.ISSUE_CHARGING), + issueTemperature: !!(flags & FlagMasks.ISSUE_TEMPERATURE), + issueBattery: !!(flags & FlagMasks.ISSUE_BATTERY), + }; + } + default: + this._exhaustiveMatchingGuard(this._statusType); + } + } + + private _exhaustiveMatchingGuard(_: never): never { + throw new Error("One or some case(s) not covered"); + } +} diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.test.ts b/packages/core/src/api/command/os/GetOsVersionCommand.test.ts index d954e133f..8cc2e0713 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.test.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.test.ts @@ -40,7 +40,7 @@ const STAX_RESPONSE_GOOD = new ApduResponse({ }); describe("GetOsVersionCommand", () => { - let command: Command; + let command: Command; beforeEach(() => { command = new GetOsVersionCommand(); diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.ts b/packages/core/src/api/command/os/GetOsVersionCommand.ts index 9567b4612..2fb15c6d9 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.ts @@ -17,9 +17,7 @@ export type GetOsVersionResponse = { recoverState: string; }; -export class GetOsVersionCommand - implements Command -{ +export class GetOsVersionCommand implements Command { getApdu = (): Apdu => new ApduBuilder({ cla: 0xe0, diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts index 8ee94dbaf..470c5face 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts @@ -15,7 +15,7 @@ import { let logger: LoggerPublisherService; let sessionService: SessionService; const fakeSessionId = "fakeSessionId"; -let command: Command; +let command: Command<{ status: string }>; describe("SendCommandUseCase", () => { beforeEach(() => { @@ -40,9 +40,10 @@ describe("SendCommandUseCase", () => { .spyOn(session, "getCommand") .mockReturnValue(async () => Promise.resolve({ status: "success" })); - const response = await useCase.execute({ + const response = await useCase.execute<{ status: string }>({ sessionId: fakeSessionId, command, + params: undefined, }); expect(response).toStrictEqual({ status: "success" }); @@ -54,9 +55,10 @@ describe("SendCommandUseCase", () => { .spyOn(sessionService, "getSessionById") .mockReturnValue(Left({ _tag: "DeviceSessionNotFound" })); - const res = useCase.execute({ + const res = useCase.execute<{ status: string }>({ sessionId: fakeSessionId, command, + params: undefined, }); await expect(res).rejects.toMatchObject({ _tag: "DeviceSessionNotFound" }); diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.ts index 686424350..f9ff13c43 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.ts @@ -6,10 +6,10 @@ import type { SessionService } from "@internal/device-session/service/SessionSer import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -export type SendCommandUseCaseArgs = { +export type SendCommandUseCaseArgs = { sessionId: string; - command: Command; - params?: Params; + command: Command; + params: U; }; /** @@ -28,18 +28,18 @@ export class SendCommandUseCase { this._logger = loggerFactory("SendCommandUseCase"); } - async execute({ + async execute({ sessionId, command, params, - }: SendCommandUseCaseArgs): Promise { + }: SendCommandUseCaseArgs): Promise { const deviceSession = this._sessionService.getSessionById(sessionId); return deviceSession.caseOf({ // Case device session found Right: async (session) => { const deviceModelId = session.connectedDevice.deviceModel.id; - const action = session.getCommand(command); + const action = session.getCommand(command); const response = await action(deviceModelId, params); return response; }, diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/Session.ts index bb66fe95f..6ffc16287 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/Session.ts @@ -70,16 +70,16 @@ export class Session { }); } - getCommand(command: Command) { - return async (deviceModel: DeviceModelId, params?: Params): Promise => { - const apdu = command.getApdu(params); + getCommand(command: Command) { + return async (deviceModelId: DeviceModelId, getApduArgs: U): Promise => { + const apdu = command.getApdu(getApduArgs); const response = await this.sendApdu(apdu.getRawApdu()); return response.caseOf({ Left: (err) => { throw err; }, - Right: (r) => command.parseResponse(r, deviceModel), + Right: (r) => command.parseResponse(r, deviceModelId), }); }; } From b87c57ca564d4da8d85b95c9e4c99497ca346cd1 Mon Sep 17 00:00:00 2001 From: jz_ Date: Fri, 3 May 2024 10:36:54 +0200 Subject: [PATCH 207/253] =?UTF-8?q?=F0=9F=94=80=20(core):=20Rebase=20on=20?= =?UTF-8?q?develop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/command/os/GetAppAndVersionCommand.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts index 39c949819..312e23f16 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts @@ -12,7 +12,7 @@ export type GetAppAndVersionResponse = { }; export class GetAppAndVersionCommand - implements Command + implements Command { getApdu(): Apdu { const getAppAndVersionApduArgs: ApduBuilderArgs = { From b2c582009a637e420f3c5c41416a2618aa19b09f Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Fri, 3 May 2024 15:33:54 +0200 Subject: [PATCH 208/253] :recycle: (core): Use SdkError in command api module Closes DSDK-292 --- packages/core/src/api/command/Errors.ts | 46 +++++++++++++++++++ .../os/GetAppAndVersionCommand.test.ts | 8 +++- .../api/command/os/GetAppAndVersionCommand.ts | 12 +++-- .../os/GetBatteryStatusCommand.test.ts | 8 +++- .../api/command/os/GetBatteryStatusCommand.ts | 23 ++++++---- .../command/os/GetOsVersionCommand.test.ts | 3 +- .../src/api/command/os/GetOsVersionCommand.ts | 3 +- 7 files changed, 85 insertions(+), 18 deletions(-) create mode 100644 packages/core/src/api/command/Errors.ts diff --git a/packages/core/src/api/command/Errors.ts b/packages/core/src/api/command/Errors.ts new file mode 100644 index 000000000..f57af3b4d --- /dev/null +++ b/packages/core/src/api/command/Errors.ts @@ -0,0 +1,46 @@ +import { SdkError } from "@api/Error"; + +export class InvalidStatusWordError implements SdkError { + readonly _tag = "InvalidStatusWordError"; + originalError?: Error; + + constructor(message?: string) { + this.originalError = new Error(message ?? "Invalid status word."); + } +} + +export class InvalidBatteryStatusTypeError implements SdkError { + readonly _tag = "InvalidBatteryStatusTypeError"; + originalError: Error; + + constructor(message?: string) { + this.originalError = new Error(message ?? "Invalid battery status type."); + } +} + +export class InvalidBatteryDataError implements SdkError { + readonly _tag = "InvalidBatteryDataError"; + originalError: Error; + + constructor(message?: string) { + this.originalError = new Error(message ?? "Invalid battery data."); + } +} + +export class InvalidBatteryFlagsError implements SdkError { + readonly _tag = "InvalidBatteryFlagsError"; + originalError: Error; + + constructor(message?: string) { + this.originalError = new Error(message ?? "Invalid battery flags."); + } +} + +export class InvalidResponseFormatError implements SdkError { + readonly _tag = "InvalidResponseFormatError"; + originalError: Error; + + constructor(message?: string) { + this.originalError = new Error(message ?? "Invalid response format."); + } +} diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts index 826d182ca..5fc680830 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts @@ -1,4 +1,8 @@ import { Command } from "@api/command/Command"; +import { + InvalidResponseFormatError, + InvalidStatusWordError, +} from "@api/command/Errors"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { @@ -71,7 +75,7 @@ describe("GetAppAndVersionCommand", () => { }); expect(() => command.parseResponse(FAILED_RESPONSE)).toThrow( - "Unexpected status word: 6700", + InvalidStatusWordError, ); }); it("should throw an error if the response returned unsupported format", () => { @@ -81,7 +85,7 @@ describe("GetAppAndVersionCommand", () => { }); expect(() => command.parseResponse(ERROR_RESPONSE)).toThrow( - "getAppAndVersion: format not supported", + InvalidResponseFormatError, ); }); }); diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts index 312e23f16..596fb5ea8 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts @@ -2,6 +2,10 @@ import { Apdu } from "@api/apdu/model/Apdu"; import { ApduBuilder, ApduBuilderArgs } from "@api/apdu/utils/ApduBuilder"; import { ApduParser } from "@api/apdu/utils/ApduParser"; import { Command } from "@api/command/Command"; +import { + InvalidResponseFormatError, + InvalidStatusWordError, +} from "@api/command/Errors"; import { CommandUtils } from "@api/command/utils/CommandUtils"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; @@ -26,9 +30,8 @@ export class GetAppAndVersionCommand parseResponse(apduResponse: ApduResponse): GetAppAndVersionResponse { const parser = new ApduParser(apduResponse); - // [SHOULD] Implement new error treatment logic if (!CommandUtils.isSuccessResponse(apduResponse)) { - throw new Error( + throw new InvalidStatusWordError( `Unexpected status word: ${parser.encodeToHexaString( apduResponse.statusCode, )}`, @@ -36,8 +39,9 @@ export class GetAppAndVersionCommand } if (parser.extract8BitUint() !== 1) { - // TODO: Make dedicated error object - throw new Error("getAppAndVersion: format not supported"); + throw new InvalidResponseFormatError( + "getAppAndVersion: format not supported", + ); } const name = parser.encodeToString(parser.extractFieldLVEncoded()); diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts index 843b35d01..060997a80 100644 --- a/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts @@ -1,4 +1,8 @@ import { Command } from "@api/command/Command"; +import { + InvalidBatteryStatusTypeError, + InvalidStatusWordError, +} from "@api/command/Errors"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { @@ -106,7 +110,7 @@ describe("GetBatteryStatus", () => { data: PERCENTAGE_RESPONSE_HEX.slice(0, -2), }); expect(() => command.parseResponse(PERCENTAGE_RESPONSE)).toThrow( - "Call getApdu to initialise battery status type.", + InvalidBatteryStatusTypeError, ); }); it("should throw an error if the response returned unsupported format", () => { @@ -116,7 +120,7 @@ describe("GetBatteryStatus", () => { }); command.getApdu(BatteryStatusType.BATTERY_PERCENTAGE); expect(() => command.parseResponse(FAILED_RESPONSE)).toThrow( - "Unexpected status word: 6700", + InvalidStatusWordError, ); }); }); diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts index 38d1ad396..1aaac4345 100644 --- a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts @@ -2,6 +2,12 @@ import { Apdu } from "@api/apdu/model/Apdu"; import { ApduBuilder, ApduBuilderArgs } from "@api/apdu/utils/ApduBuilder"; import { ApduParser } from "@api/apdu/utils/ApduParser"; import { Command } from "@api/command/Command"; +import { + InvalidBatteryDataError, + InvalidBatteryFlagsError, + InvalidBatteryStatusTypeError, + InvalidStatusWordError, +} from "@api/command/Errors"; import { CommandUtils } from "@api/command/utils/CommandUtils"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; @@ -56,13 +62,14 @@ export class GetBatteryStatusCommand parseResponse(apduResponse: ApduResponse): GetBatteryStatusResponse { if (this._statusType === undefined) { - throw new Error("Call getApdu to initialise battery status type."); + throw new InvalidBatteryStatusTypeError( + "Call getApdu to initialise battery status type.", + ); } const parser = new ApduParser(apduResponse); - // [SHOULD] Implement new error treatment logic if (!CommandUtils.isSuccessResponse(apduResponse)) { - throw new Error( + throw new InvalidStatusWordError( `Unexpected status word: ${parser.encodeToHexaString( apduResponse.statusCode, )}`, @@ -73,14 +80,14 @@ export class GetBatteryStatusCommand case BatteryStatusType.BATTERY_PERCENTAGE: { const percentage = parser.extract8BitUint(); if (!percentage) { - throw new Error("Cannot parse APDU response"); + throw new InvalidBatteryDataError("Cannot parse APDU response"); } return percentage > 100 ? -1 : percentage; } case BatteryStatusType.BATTERY_VOLTAGE: { const data = parser.extract16BitUInt(); if (!data) { - throw new Error("Cannot parse APDU response"); + throw new InvalidBatteryDataError("Cannot parse APDU response"); } return data; } @@ -88,14 +95,14 @@ export class GetBatteryStatusCommand case BatteryStatusType.BATTERY_CURRENT: { const data = parser.extract8BitUint(); if (!data) { - throw new Error("Cannot parse APDU response"); + throw new InvalidBatteryDataError("Cannot parse APDU response"); } return (data << 24) >> 24; } case BatteryStatusType.BATTERY_FLAGS: { const flags = parser.extract32BitUInt(); if (!flags) { - throw new Error("Cannot parse APDU response"); + throw new InvalidBatteryFlagsError("Cannot parse APDU response"); } const chargingUSB = !!(flags & FlagMasks.USB_POWERED); const chargingQi = !chargingUSB && !!(flags & FlagMasks.CHARGING); @@ -116,6 +123,6 @@ export class GetBatteryStatusCommand } private _exhaustiveMatchingGuard(_: never): never { - throw new Error("One or some case(s) not covered"); + throw new InvalidBatteryStatusTypeError("One or some case(s) not covered"); } } diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.test.ts b/packages/core/src/api/command/os/GetOsVersionCommand.test.ts index 8cc2e0713..fbc8358cc 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.test.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.test.ts @@ -1,4 +1,5 @@ import { Command } from "@api/command/Command"; +import { InvalidStatusWordError } from "@api/command/Errors"; import { DeviceModelId } from "@api/device/DeviceModel"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; @@ -129,7 +130,7 @@ describe("GetOsVersionCommand", () => { expect(() => command.parseResponse(response, DeviceModelId.NANO_X), - ).toThrow("Unexpected status word: 6e80"); + ).toThrow(InvalidStatusWordError); }); }); }); diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.ts b/packages/core/src/api/command/os/GetOsVersionCommand.ts index 2fb15c6d9..4dc89c1e5 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.ts @@ -2,6 +2,7 @@ import { Apdu } from "@api/apdu/model/Apdu"; import { ApduBuilder } from "@api/apdu/utils/ApduBuilder"; import { ApduParser } from "@api/apdu/utils/ApduParser"; import { Command } from "@api/command/Command"; +import { InvalidStatusWordError } from "@api/command/Errors"; import { CommandUtils } from "@api/command/utils/CommandUtils"; import { DeviceModelId } from "@api/device/DeviceModel"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; @@ -30,7 +31,7 @@ export class GetOsVersionCommand implements Command { const parser = new ApduParser(responseApdu); if (!CommandUtils.isSuccessResponse(responseApdu)) { // [ASK] How de we handle unsuccessful responses? - throw new Error( + throw new InvalidStatusWordError( `Unexpected status word: ${parser.encodeToHexaString(responseApdu.statusCode)}`, ); } From a83a6096cec217a25ece13d9f750aef22647d854 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 2 May 2024 17:09:53 +0200 Subject: [PATCH 209/253] :truck: (core): Rename Session to DeviceSession --- packages/core/src/api/DeviceSdk.test.ts | 2 +- packages/core/src/api/DeviceSdk.ts | 18 ++--- .../use-case/SendCommandUseCase.test.ts | 18 ++--- .../command/use-case/SendCommandUseCase.ts | 21 +++--- .../DeviceSessionState.ts} | 8 +-- packages/core/src/api/device-session/types.ts | 1 + packages/core/src/api/index.ts | 2 +- packages/core/src/api/session/types.ts | 1 - packages/core/src/api/types.ts | 2 +- .../device-session/di/deviceSessionModule.ts | 14 ++-- .../device-session/di/deviceSessionTypes.ts | 4 +- ...{Session.stub.ts => DeviceSession.stub.ts} | 8 +-- .../model/{Session.ts => DeviceSession.ts} | 20 +++--- .../service/DefaultApduReceiverService.ts | 2 +- .../DefaultDeviceSessionService.test.ts | 68 +++++++++++++++++++ .../service/DefaultDeviceSessionService.ts | 61 +++++++++++++++++ .../service/DefaultSessionService.test.ts | 66 ------------------ .../service/DefaultSessionService.ts | 59 ---------------- .../service/DeviceSessionService.ts | 11 +++ .../device-session/service/SessionService.ts | 11 --- .../GetDeviceSessionStateUseCase.test.ts | 56 +++++++++++++++ ...ase.ts => GetDeviceSessionStateUseCase.ts} | 20 +++--- .../GetSessionDeviceStateUseCase.test.ts | 56 --------------- .../discovery/use-case/ConnectUseCase.test.ts | 10 +-- .../discovery/use-case/ConnectUseCase.ts | 20 +++--- .../use-case/DisconnectUseCase.test.ts | 33 +++++---- .../discovery/use-case/DisconnectUseCase.ts | 22 +++--- .../send/use-case/SendApduUseCase.test.ts | 22 +++--- .../internal/send/use-case/SendApduUseCase.ts | 23 ++++--- .../GetConnectedDeviceUseCase.test.ts | 22 +++--- .../usb/use-case/GetConnectedDeviceUseCase.ts | 23 ++++--- 31 files changed, 360 insertions(+), 344 deletions(-) rename packages/core/src/api/{session/SessionDeviceState.ts => device-session/DeviceSessionState.ts} (66%) create mode 100644 packages/core/src/api/device-session/types.ts delete mode 100644 packages/core/src/api/session/types.ts rename packages/core/src/internal/device-session/model/{Session.stub.ts => DeviceSession.stub.ts} (67%) rename packages/core/src/internal/device-session/model/{Session.ts => DeviceSession.ts} (81%) create mode 100644 packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts create mode 100644 packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts delete mode 100644 packages/core/src/internal/device-session/service/DefaultSessionService.test.ts delete mode 100644 packages/core/src/internal/device-session/service/DefaultSessionService.ts create mode 100644 packages/core/src/internal/device-session/service/DeviceSessionService.ts delete mode 100644 packages/core/src/internal/device-session/service/SessionService.ts create mode 100644 packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.ts rename packages/core/src/internal/device-session/use-case/{GetSessionDeviceStateUseCase.ts => GetDeviceSessionStateUseCase.ts} (61%) delete mode 100644 packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.test.ts diff --git a/packages/core/src/api/DeviceSdk.test.ts b/packages/core/src/api/DeviceSdk.test.ts index a32de59b8..e5d05075c 100644 --- a/packages/core/src/api/DeviceSdk.test.ts +++ b/packages/core/src/api/DeviceSdk.test.ts @@ -87,7 +87,7 @@ describe("DeviceSdk", () => { [commandTypes.SendCommandUseCase], [usbDiTypes.GetConnectedDeviceUseCase], [discoveryTypes.DisconnectUseCase], - [deviceSessionTypes.GetSessionDeviceStateUseCase], + [deviceSessionTypes.GetDeviceSessionStateUseCase], ])("should have %p use case", (diSymbol) => { const uc = sdk.container.get(diSymbol); expect(uc).toBeInstanceOf(StubUseCase); diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 8cd4fe02a..9ac08670b 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -6,14 +6,14 @@ import { SendCommandUseCase, SendCommandUseCaseArgs, } from "@api/command/use-case/SendCommandUseCase"; -import { SessionDeviceState } from "@api/session/SessionDeviceState"; -import { SessionId } from "@api/session/types"; +import { DeviceSessionState } from "@api/device-session/DeviceSessionState"; +import { DeviceSessionId } from "@api/device-session/types"; import { ConnectedDevice } from "@api/usb/model/ConnectedDevice"; import { configTypes } from "@internal/config/di/configTypes"; import { GetSdkVersionUseCase } from "@internal/config/use-case/GetSdkVersionUseCase"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; -import { GetSessionDeviceStateUseCase } from "@internal/device-session/use-case/GetSessionDeviceStateUseCase"; +import { GetDeviceSessionStateUseCase } from "@internal/device-session/use-case/GetDeviceSessionStateUseCase"; import { discoveryTypes } from "@internal/discovery/di/discoveryTypes"; import { ConnectUseCase, @@ -66,7 +66,7 @@ export class DeviceSdk { .execute(); } - connect(args: ConnectUseCaseArgs): Promise { + connect(args: ConnectUseCaseArgs): Promise { return this.container .get(discoveryTypes.ConnectUseCase) .execute(args); @@ -96,12 +96,12 @@ export class DeviceSdk { .execute(args); } - getSessionDeviceState(args: { - sessionId: SessionId; - }): Observable { + getDeviceSessionState(args: { + sessionId: DeviceSessionId; + }): Observable { return this.container - .get( - deviceSessionTypes.GetSessionDeviceStateUseCase, + .get( + deviceSessionTypes.GetDeviceSessionStateUseCase, ) .execute(args); } diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts index 470c5face..74c2441f6 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts @@ -1,9 +1,9 @@ import { Left } from "purify-ts"; import { Command } from "@api/command/Command"; -import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; -import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; -import { SessionService } from "@internal/device-session/service/SessionService"; +import { deviceSessionStubBuilder } from "@internal/device-session/model/DeviceSession.stub"; +import { DefaultDeviceSessionService } from "@internal/device-session/service/DefaultDeviceSessionService"; +import { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; @@ -13,14 +13,14 @@ import { } from "./SendCommandUseCase"; let logger: LoggerPublisherService; -let sessionService: SessionService; +let sessionService: DeviceSessionService; const fakeSessionId = "fakeSessionId"; let command: Command<{ status: string }>; describe("SendCommandUseCase", () => { beforeEach(() => { logger = new DefaultLoggerPublisherService([], "send-command-use-case"); - sessionService = new DefaultSessionService(() => logger); + sessionService = new DefaultDeviceSessionService(() => logger); command = { getApdu: jest.fn(), parseResponse: jest.fn(), @@ -32,12 +32,12 @@ describe("SendCommandUseCase", () => { }); it("should send a command to a connected device", async () => { - const session = sessionStubBuilder(); - sessionService.addSession(session); + const deviceSession = deviceSessionStubBuilder(); + sessionService.addDeviceSession(deviceSession); const useCase = new SendCommandUseCase(sessionService, () => logger); jest - .spyOn(session, "getCommand") + .spyOn(deviceSession, "getCommand") .mockReturnValue(async () => Promise.resolve({ status: "success" })); const response = await useCase.execute<{ status: string }>({ @@ -52,7 +52,7 @@ describe("SendCommandUseCase", () => { it("should throw an error if the session is not found", async () => { const useCase = new SendCommandUseCase(sessionService, () => logger); jest - .spyOn(sessionService, "getSessionById") + .spyOn(sessionService, "getDeviceSessionById") .mockReturnValue(Left({ _tag: "DeviceSessionNotFound" })); const res = useCase.execute<{ status: string }>({ diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.ts index f9ff13c43..0e2b4c8fd 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.ts @@ -2,7 +2,7 @@ import { inject, injectable } from "inversify"; import { Command } from "@api/command/Command"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import type { SessionService } from "@internal/device-session/service/SessionService"; +import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; @@ -17,10 +17,11 @@ export type SendCommandUseCaseArgs = { */ @injectable() export class SendCommandUseCase { - private readonly _sessionService: SessionService; + private readonly _sessionService: DeviceSessionService; private readonly _logger: LoggerPublisherService; constructor( - @inject(deviceSessionTypes.SessionService) sessionService: SessionService, + @inject(deviceSessionTypes.DeviceSessionService) + sessionService: DeviceSessionService, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerFactory: (tag: string) => LoggerPublisherService, ) { @@ -33,15 +34,15 @@ export class SendCommandUseCase { command, params, }: SendCommandUseCaseArgs): Promise { - const deviceSession = this._sessionService.getSessionById(sessionId); + const deviceSessionOrError = + this._sessionService.getDeviceSessionById(sessionId); - return deviceSession.caseOf({ + return deviceSessionOrError.caseOf({ // Case device session found - Right: async (session) => { - const deviceModelId = session.connectedDevice.deviceModel.id; - const action = session.getCommand(command); - const response = await action(deviceModelId, params); - return response; + Right: async (deviceSession) => { + const deviceModelId = deviceSession.connectedDevice.deviceModel.id; + const action = deviceSession.getCommand(command); + return await action(deviceModelId, params); }, // Case device session not found Left: (error) => { diff --git a/packages/core/src/api/session/SessionDeviceState.ts b/packages/core/src/api/device-session/DeviceSessionState.ts similarity index 66% rename from packages/core/src/api/session/SessionDeviceState.ts rename to packages/core/src/api/device-session/DeviceSessionState.ts index baf89db36..e2cd7caff 100644 --- a/packages/core/src/api/session/SessionDeviceState.ts +++ b/packages/core/src/api/device-session/DeviceSessionState.ts @@ -1,13 +1,13 @@ import { DeviceStatus } from "@api/device/DeviceStatus"; -import { SessionId } from "@api/session/types"; +import { DeviceSessionId } from "@api/device-session/types"; export type SessionStateConstructorArgs = { - sessionId: SessionId; + sessionId: DeviceSessionId; deviceStatus: DeviceStatus; }; -export class SessionDeviceState { - public readonly sessionId: SessionId; +export class DeviceSessionState { + public readonly sessionId: DeviceSessionId; public readonly deviceStatus: DeviceStatus; constructor({ sessionId, deviceStatus }: SessionStateConstructorArgs) { diff --git a/packages/core/src/api/device-session/types.ts b/packages/core/src/api/device-session/types.ts new file mode 100644 index 000000000..4edcad22d --- /dev/null +++ b/packages/core/src/api/device-session/types.ts @@ -0,0 +1 @@ +export type DeviceSessionId = string; diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 001cd3ddc..7e7c01e0c 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -6,7 +6,7 @@ export { DeviceSdk } from "./DeviceSdk"; export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; export { LogLevel } from "./logger-subscriber/model/LogLevel"; export { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; -export { SessionDeviceState } from "./session/SessionDeviceState"; export * from "./types"; export { ConnectedDevice } from "./usb/model/ConnectedDevice"; +export { DeviceSessionState } from "@api/device-session/DeviceSessionState"; export { ApduResponse } from "@internal/device-session/model/ApduResponse"; diff --git a/packages/core/src/api/session/types.ts b/packages/core/src/api/session/types.ts deleted file mode 100644 index 287a68aaa..000000000 --- a/packages/core/src/api/session/types.ts +++ /dev/null @@ -1 +0,0 @@ -export type SessionId = string; diff --git a/packages/core/src/api/types.ts b/packages/core/src/api/types.ts index bd7b9c6a5..c8180c92e 100644 --- a/packages/core/src/api/types.ts +++ b/packages/core/src/api/types.ts @@ -1,4 +1,4 @@ export type { DeviceId } from "./device/DeviceModel"; export type { ConnectionType } from "./discovery/ConnectionType"; export type { LogSubscriberOptions } from "./logger-subscriber/model/LogSubscriberOptions"; -export type { SessionId } from "./session/types"; +export type { DeviceSessionId } from "@api/device-session/types"; diff --git a/packages/core/src/internal/device-session/di/deviceSessionModule.ts b/packages/core/src/internal/device-session/di/deviceSessionModule.ts index 5e4148cf7..11d133b55 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionModule.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionModule.ts @@ -10,8 +10,8 @@ import { DefaultApduSenderService, DefaultApduSenderServiceConstructorArgs, } from "@internal/device-session/service/DefaultApduSenderService"; -import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; -import { GetSessionDeviceStateUseCase } from "@internal/device-session/use-case/GetSessionDeviceStateUseCase"; +import { DefaultDeviceSessionService } from "@internal/device-session/service/DefaultDeviceSessionService"; +import { GetDeviceSessionStateUseCase } from "@internal/device-session/use-case/GetDeviceSessionStateUseCase"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { StubUseCase } from "@root/src/di.stub"; @@ -59,16 +59,16 @@ export const deviceSessionModuleFactory = ( }; }); - bind(deviceSessionTypes.SessionService) - .to(DefaultSessionService) + bind(deviceSessionTypes.DeviceSessionService) + .to(DefaultDeviceSessionService) .inSingletonScope(); - bind(deviceSessionTypes.GetSessionDeviceStateUseCase).to( - GetSessionDeviceStateUseCase, + bind(deviceSessionTypes.GetDeviceSessionStateUseCase).to( + GetDeviceSessionStateUseCase, ); if (stub) { - rebind(deviceSessionTypes.GetSessionDeviceStateUseCase).to(StubUseCase); + rebind(deviceSessionTypes.GetDeviceSessionStateUseCase).to(StubUseCase); } }, ); diff --git a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts index e4fd35ed3..9361ab55b 100644 --- a/packages/core/src/internal/device-session/di/deviceSessionTypes.ts +++ b/packages/core/src/internal/device-session/di/deviceSessionTypes.ts @@ -1,6 +1,6 @@ export const deviceSessionTypes = { ApduSenderServiceFactory: Symbol.for("ApduSenderServiceFactory"), ApduReceiverServiceFactory: Symbol.for("ApduReceiverServiceFactory"), - SessionService: Symbol.for("SessionService"), - GetSessionDeviceStateUseCase: Symbol.for("GetSessionDeviceStateUseCase"), + DeviceSessionService: Symbol.for("DeviceSessionService"), + GetDeviceSessionStateUseCase: Symbol.for("GetDeviceSessionStateUseCase"), }; diff --git a/packages/core/src/internal/device-session/model/Session.stub.ts b/packages/core/src/internal/device-session/model/DeviceSession.stub.ts similarity index 67% rename from packages/core/src/internal/device-session/model/Session.stub.ts rename to packages/core/src/internal/device-session/model/DeviceSession.stub.ts index 66821ab55..a4f9dcf76 100644 --- a/packages/core/src/internal/device-session/model/Session.stub.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.stub.ts @@ -1,13 +1,13 @@ import { - Session, + DeviceSession, SessionConstructorArgs, -} from "@internal/device-session/model/Session"; +} from "@internal/device-session/model/DeviceSession"; import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; -export const sessionStubBuilder = ( +export const deviceSessionStubBuilder = ( props: Partial = {}, ) => - new Session({ + new DeviceSession({ connectedDevice: connectedDeviceStubBuilder(), id: "fakeSessionId", ...props, diff --git a/packages/core/src/internal/device-session/model/Session.ts b/packages/core/src/internal/device-session/model/DeviceSession.ts similarity index 81% rename from packages/core/src/internal/device-session/model/Session.ts rename to packages/core/src/internal/device-session/model/DeviceSession.ts index 6ffc16287..47d0937e0 100644 --- a/packages/core/src/internal/device-session/model/Session.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.ts @@ -4,29 +4,29 @@ import { v4 as uuidv4 } from "uuid"; import { Command } from "@api/command/Command"; import { CommandUtils } from "@api/command/utils/CommandUtils"; import { DeviceModelId } from "@api/device/DeviceModel"; -import { SessionDeviceState } from "@api/session/SessionDeviceState"; -import { SessionId } from "@api/session/types"; +import { DeviceStatus } from "@api/device/DeviceStatus"; +import { DeviceSessionState } from "@api/device-session/DeviceSessionState"; +import { DeviceSessionId } from "@api/device-session/types"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; -import { DeviceStatus } from "@root/src"; export type SessionConstructorArgs = { connectedDevice: InternalConnectedDevice; - id?: SessionId; + id?: DeviceSessionId; }; /** * Represents a session with a device. */ -export class Session { - private readonly _id: SessionId; +export class DeviceSession { + private readonly _id: DeviceSessionId; private readonly _connectedDevice: InternalConnectedDevice; - private readonly _deviceState: BehaviorSubject; + private readonly _deviceState: BehaviorSubject; constructor({ connectedDevice, id = uuidv4() }: SessionConstructorArgs) { this._id = id; this._connectedDevice = connectedDevice; - this._deviceState = new BehaviorSubject( - new SessionDeviceState({ + this._deviceState = new BehaviorSubject( + new DeviceSessionState({ sessionId: this._id, deviceStatus: DeviceStatus.CONNECTED, }), @@ -48,7 +48,7 @@ export class Session { private updateDeviceStatus(deviceStatus: DeviceStatus) { const sessionState = this._deviceState.getValue(); this._deviceState.next( - new SessionDeviceState({ + new DeviceSessionState({ ...sessionState, deviceStatus, }), diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts index 09323a318..f149ed605 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts @@ -58,7 +58,7 @@ export class DefaultApduReceiverService implements ApduReceiverService { }); this._pendingFrames.push(value); - const dataSize = this._pendingFrames.at(0)!.getHeader().getDataLength(); + const dataSize = this._pendingFrames[0]!.getHeader().getDataLength(); return this.getCompleteFrame(dataSize); }); } diff --git a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts new file mode 100644 index 000000000..72e00258b --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts @@ -0,0 +1,68 @@ +import { Either, Left } from "purify-ts"; + +import { DeviceSession } from "@internal/device-session/model/DeviceSession"; +import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; + +import { DefaultDeviceSessionService } from "./DefaultDeviceSessionService"; + +jest.mock("@internal/logger-publisher/service/DefaultLoggerPublisherService"); + +let sessionService: DefaultDeviceSessionService; +let loggerService: DefaultLoggerPublisherService; +let deviceSession: DeviceSession; +describe("DefaultDeviceSessionService", () => { + beforeEach(() => { + jest.restoreAllMocks(); + deviceSession = new DeviceSession({ + connectedDevice: connectedDeviceStubBuilder(), + }); + loggerService = new DefaultLoggerPublisherService([], "deviceSession"); + sessionService = new DefaultDeviceSessionService(() => loggerService); + }); + + it("should have an empty sessions list", () => { + expect(sessionService.getDeviceSessions()).toEqual([]); + }); + + it("should add a deviceSession", () => { + sessionService.addDeviceSession(deviceSession); + expect(sessionService.getDeviceSessions()).toEqual([deviceSession]); + }); + + it("should not add a deviceSession if it already exists", () => { + sessionService.addDeviceSession(deviceSession); + sessionService.addDeviceSession(deviceSession); + expect(sessionService.getDeviceSessions()).toEqual([deviceSession]); + }); + + it("should remove a deviceSession", () => { + sessionService.addDeviceSession(deviceSession); + sessionService.removeDeviceSession(deviceSession.id); + expect(sessionService.getDeviceSessions()).toEqual([]); + }); + + it("should not remove a deviceSession if it does not exist", () => { + sessionService.removeDeviceSession(deviceSession.id); + expect(sessionService.getDeviceSessions()).toEqual([]); + }); + + it("should get a deviceSession", () => { + sessionService.addDeviceSession(deviceSession); + expect(sessionService.getDeviceSessionById(deviceSession.id)).toEqual( + Either.of(deviceSession), + ); + }); + + it("should not get a deviceSession if it does not exist", () => { + expect(sessionService.getDeviceSessionById(deviceSession.id)).toEqual( + Left(new DeviceSessionNotFound()), + ); + }); + + it("should get all sessions", () => { + sessionService.addDeviceSession(deviceSession); + expect(sessionService.getDeviceSessions()).toEqual([deviceSession]); + }); +}); diff --git a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts new file mode 100644 index 000000000..0b2d07353 --- /dev/null +++ b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts @@ -0,0 +1,61 @@ +import { inject, injectable } from "inversify"; +import { Maybe } from "purify-ts"; + +import { DeviceSession } from "@internal/device-session/model/DeviceSession"; +import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; +import { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +@injectable() +export class DefaultDeviceSessionService implements DeviceSessionService { + private _sessions: DeviceSession[]; + private _logger: LoggerPublisherService; + + constructor( + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerModuleFactory: (tag: string) => LoggerPublisherService, + ) { + this._sessions = []; + this._logger = loggerModuleFactory("DeviceSessionService"); + } + + addDeviceSession(deviceSession: DeviceSession) { + const found = this._sessions.find((s) => s.id === deviceSession.id); + if (found) { + this._logger.warn("DeviceSession already exists", { + data: { deviceSession }, + }); + return this; + } + + this._sessions.push(deviceSession); + this._logger.info("DeviceSession added", { data: { deviceSession } }); + return this; + } + + removeDeviceSession(sessionId: string) { + const found = this._sessions.find((s) => s.id === sessionId); + if (found) { + found.close(); + this._sessions = this._sessions.filter((s) => s.id !== sessionId); + this._logger.info("DeviceSession removed", { data: { sessionId } }); + return this; + } + + this._logger.warn("DeviceSession not found", { data: { sessionId } }); + return this; + } + + getDeviceSessionById(sessionId: string) { + const deviceSession = Maybe.fromNullable( + this._sessions.find((s) => s.id === sessionId), + ); + + return deviceSession.toEither(new DeviceSessionNotFound()); + } + + getDeviceSessions() { + return this._sessions; + } +} diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts deleted file mode 100644 index 4275ac6b6..000000000 --- a/packages/core/src/internal/device-session/service/DefaultSessionService.test.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Either, Left } from "purify-ts"; - -import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; -import { Session } from "@internal/device-session/model/Session"; -import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; -import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; - -import { DefaultSessionService } from "./DefaultSessionService"; - -jest.mock("@internal/logger-publisher/service/DefaultLoggerPublisherService"); - -let sessionService: DefaultSessionService; -let loggerService: DefaultLoggerPublisherService; -let session: Session; -describe("DefaultSessionService", () => { - beforeEach(() => { - jest.restoreAllMocks(); - session = new Session({ connectedDevice: connectedDeviceStubBuilder() }); - loggerService = new DefaultLoggerPublisherService([], "session"); - sessionService = new DefaultSessionService(() => loggerService); - }); - - it("should have an empty sessions list", () => { - expect(sessionService.getSessions()).toEqual([]); - }); - - it("should add a session", () => { - sessionService.addSession(session); - expect(sessionService.getSessions()).toEqual([session]); - }); - - it("should not add a session if it already exists", () => { - sessionService.addSession(session); - sessionService.addSession(session); - expect(sessionService.getSessions()).toEqual([session]); - }); - - it("should remove a session", () => { - sessionService.addSession(session); - sessionService.removeSession(session.id); - expect(sessionService.getSessions()).toEqual([]); - }); - - it("should not remove a session if it does not exist", () => { - sessionService.removeSession(session.id); - expect(sessionService.getSessions()).toEqual([]); - }); - - it("should get a session", () => { - sessionService.addSession(session); - expect(sessionService.getSessionById(session.id)).toEqual( - Either.of(session), - ); - }); - - it("should not get a session if it does not exist", () => { - expect(sessionService.getSessionById(session.id)).toEqual( - Left(new DeviceSessionNotFound()), - ); - }); - - it("should get all sessions", () => { - sessionService.addSession(session); - expect(sessionService.getSessions()).toEqual([session]); - }); -}); diff --git a/packages/core/src/internal/device-session/service/DefaultSessionService.ts b/packages/core/src/internal/device-session/service/DefaultSessionService.ts deleted file mode 100644 index 9169dc2c3..000000000 --- a/packages/core/src/internal/device-session/service/DefaultSessionService.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { inject, injectable } from "inversify"; -import { Maybe } from "purify-ts"; - -import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; -import { Session } from "@internal/device-session/model/Session"; -import { SessionService } from "@internal/device-session/service/SessionService"; -import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; -import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; - -@injectable() -export class DefaultSessionService implements SessionService { - private _sessions: Session[]; - private _logger: LoggerPublisherService; - - constructor( - @inject(loggerTypes.LoggerPublisherServiceFactory) - loggerModuleFactory: (tag: string) => LoggerPublisherService, - ) { - this._sessions = []; - this._logger = loggerModuleFactory("session"); - } - - addSession(session: Session) { - const found = this._sessions.find((s) => s.id === session.id); - if (found) { - this._logger.warn("Session already exists", { data: { session } }); - return this; - } - - this._sessions.push(session); - this._logger.info("Session added", { data: { session } }); - return this; - } - - removeSession(sessionId: string) { - const found = this._sessions.find((s) => s.id === sessionId); - if (found) { - found.close(); - this._sessions = this._sessions.filter((s) => s.id !== sessionId); - this._logger.info("Session removed", { data: { sessionId } }); - return this; - } - - this._logger.warn("Session not found", { data: { sessionId } }); - return this; - } - - getSessionById(sessionId: string) { - const session = Maybe.fromNullable( - this._sessions.find((s) => s.id === sessionId), - ); - - return session.toEither(new DeviceSessionNotFound()); - } - - getSessions() { - return this._sessions; - } -} diff --git a/packages/core/src/internal/device-session/service/DeviceSessionService.ts b/packages/core/src/internal/device-session/service/DeviceSessionService.ts new file mode 100644 index 000000000..e0abd3bc4 --- /dev/null +++ b/packages/core/src/internal/device-session/service/DeviceSessionService.ts @@ -0,0 +1,11 @@ +import { Either } from "purify-ts"; + +import { SdkError } from "@api/Error"; +import { DeviceSession } from "@internal/device-session/model/DeviceSession"; + +export interface DeviceSessionService { + addDeviceSession(deviceSession: DeviceSession): DeviceSessionService; + getDeviceSessionById(sessionId: string): Either; + removeDeviceSession(sessionId: string): DeviceSessionService; + getDeviceSessions(): DeviceSession[]; +} diff --git a/packages/core/src/internal/device-session/service/SessionService.ts b/packages/core/src/internal/device-session/service/SessionService.ts deleted file mode 100644 index 4ee5fb680..000000000 --- a/packages/core/src/internal/device-session/service/SessionService.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Either } from "purify-ts"; - -import { SdkError } from "@api/Error"; -import { Session } from "@internal/device-session/model/Session"; - -export interface SessionService { - addSession(session: Session): SessionService; - getSessionById(sessionId: string): Either; - removeSession(sessionId: string): SessionService; - getSessions(): Session[]; -} diff --git a/packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.ts b/packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.ts new file mode 100644 index 000000000..54cb73aea --- /dev/null +++ b/packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.ts @@ -0,0 +1,56 @@ +import { deviceSessionStubBuilder } from "@internal/device-session/model/DeviceSession.stub"; +import { DefaultDeviceSessionService } from "@internal/device-session/service/DefaultDeviceSessionService"; +import { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +import { GetDeviceSessionStateUseCase } from "./GetDeviceSessionStateUseCase"; + +let logger: LoggerPublisherService; +let sessionService: DeviceSessionService; + +const fakeSessionId = "fakeSessionId"; + +describe("GetDeviceSessionStateUseCase", () => { + beforeEach(() => { + logger = new DefaultLoggerPublisherService( + [], + "get-connected-device-use-case-test", + ); + sessionService = new DefaultDeviceSessionService(() => logger); + }); + it("should retrieve deviceSession device state", () => { + // given + const deviceSession = deviceSessionStubBuilder({ id: fakeSessionId }); + sessionService.addDeviceSession(deviceSession); + const useCase = new GetDeviceSessionStateUseCase( + sessionService, + () => logger, + ); + + // when + const response = useCase.execute({ + sessionId: fakeSessionId, + }); + + // then + expect(response).toStrictEqual(deviceSession.state); + }); + + it("should throw error when deviceSession is not found", () => { + // given + const useCase = new GetDeviceSessionStateUseCase( + sessionService, + () => logger, + ); + + // when + const execute = () => + useCase.execute({ + sessionId: fakeSessionId, + }); + + // then + expect(execute).toThrowError(); + }); +}); diff --git a/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.ts b/packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.ts similarity index 61% rename from packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.ts rename to packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.ts index 61596a45c..d8de29b4d 100644 --- a/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.ts +++ b/packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.ts @@ -1,33 +1,35 @@ import { inject, injectable } from "inversify"; -import { SessionId } from "@api/session/types"; +import { DeviceSessionId } from "@api/device-session/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import type { SessionService } from "@internal/device-session/service/SessionService"; +import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; export type GetSessionDeviceStateUseCaseArgs = { - sessionId: SessionId; + sessionId: DeviceSessionId; }; /** - * Get session state from its id. + * Get deviceSession state from its id. */ @injectable() -export class GetSessionDeviceStateUseCase { - private readonly _sessionService: SessionService; +export class GetDeviceSessionStateUseCase { + private readonly _sessionService: DeviceSessionService; private readonly _logger: LoggerPublisherService; constructor( - @inject(deviceSessionTypes.SessionService) sessionService: SessionService, + @inject(deviceSessionTypes.DeviceSessionService) + sessionService: DeviceSessionService, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerFactory: (tag: string) => LoggerPublisherService, ) { this._sessionService = sessionService; - this._logger = loggerFactory("GetSessionDeviceStateUseCase"); + this._logger = loggerFactory("GetDeviceSessionStateUseCase"); } execute({ sessionId }: GetSessionDeviceStateUseCaseArgs) { - const errorOrDeviceSession = this._sessionService.getSessionById(sessionId); + const errorOrDeviceSession = + this._sessionService.getDeviceSessionById(sessionId); return errorOrDeviceSession.caseOf({ Left: (error) => { diff --git a/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.test.ts b/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.test.ts deleted file mode 100644 index 0f6a54af4..000000000 --- a/packages/core/src/internal/device-session/use-case/GetSessionDeviceStateUseCase.test.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; -import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; -import { SessionService } from "@internal/device-session/service/SessionService"; -import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; -import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; - -import { GetSessionDeviceStateUseCase } from "./GetSessionDeviceStateUseCase"; - -let logger: LoggerPublisherService; -let sessionService: SessionService; - -const fakeSessionId = "fakeSessionId"; - -describe("GetSessionDeviceStateUseCase", () => { - beforeEach(() => { - logger = new DefaultLoggerPublisherService( - [], - "get-connected-device-use-case-test", - ); - sessionService = new DefaultSessionService(() => logger); - }); - it("should retrieve session device state", () => { - // given - const session = sessionStubBuilder({ id: fakeSessionId }); - sessionService.addSession(session); - const useCase = new GetSessionDeviceStateUseCase( - sessionService, - () => logger, - ); - - // when - const response = useCase.execute({ - sessionId: fakeSessionId, - }); - - // then - expect(response).toStrictEqual(session.state); - }); - - it("should throw error when session is not found", () => { - // given - const useCase = new GetSessionDeviceStateUseCase( - sessionService, - () => logger, - ); - - // when - const execute = () => - useCase.execute({ - sessionId: fakeSessionId, - }); - - // then - expect(execute).toThrowError(); - }); -}); diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts index 34d804864..ef6952f4c 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.test.ts @@ -3,8 +3,8 @@ import * as uuid from "uuid"; jest.mock("uuid"); import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; -import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; -import { SessionService } from "@internal/device-session/service/SessionService"; +import { DefaultDeviceSessionService } from "@internal/device-session/service/DefaultDeviceSessionService"; +import { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { UnknownDeviceError } from "@internal/usb/model/Errors"; @@ -16,7 +16,7 @@ import { ConnectUseCase } from "./ConnectUseCase"; let transport: WebUsbHidTransport; let logger: LoggerPublisherService; -let sessionService: SessionService; +let sessionService: DeviceSessionService; const fakeSessionId = "fakeSessionId"; describe("ConnectUseCase", () => { @@ -31,7 +31,7 @@ describe("ConnectUseCase", () => { () => logger, usbHidDeviceConnectionFactoryStubBuilder(), ); - sessionService = new DefaultSessionService(() => logger); + sessionService = new DefaultDeviceSessionService(() => logger); }); afterAll(() => { @@ -50,7 +50,7 @@ describe("ConnectUseCase", () => { ); }); - test("If connect is in success, return a session id", async () => { + test("If connect is in success, return a deviceSession id", async () => { jest .spyOn(transport, "connect") .mockResolvedValue(Promise.resolve(Right(stubConnectedDevice))); diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts index ed0f0fd0d..13b6b3724 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -1,10 +1,10 @@ import { inject, injectable } from "inversify"; import { DeviceId } from "@api/device/DeviceModel"; -import { SessionId } from "@api/session/types"; +import { DeviceSessionId } from "@api/device-session/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import { Session } from "@internal/device-session/model/Session"; -import type { SessionService } from "@internal/device-session/service/SessionService"; +import { DeviceSession } from "@internal/device-session/model/DeviceSession"; +import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; @@ -20,14 +20,14 @@ export type ConnectUseCaseArgs = { @injectable() export class ConnectUseCase { private readonly _usbHidTransport: UsbHidTransport; - private readonly _sessionService: SessionService; + private readonly _sessionService: DeviceSessionService; private readonly _logger: LoggerPublisherService; constructor( @inject(usbDiTypes.UsbHidTransport) usbHidTransport: UsbHidTransport, - @inject(deviceSessionTypes.SessionService) - sessionService: SessionService, + @inject(deviceSessionTypes.DeviceSessionService) + sessionService: DeviceSessionService, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerFactory: (tag: string) => LoggerPublisherService, ) { @@ -36,7 +36,7 @@ export class ConnectUseCase { this._logger = loggerFactory("ConnectUseCase"); } - async execute({ deviceId }: ConnectUseCaseArgs): Promise { + async execute({ deviceId }: ConnectUseCaseArgs): Promise { const either = await this._usbHidTransport.connect({ deviceId }); return either.caseOf({ @@ -47,9 +47,9 @@ export class ConnectUseCase { throw error; }, Right: (connectedDevice) => { - const session = new Session({ connectedDevice }); - this._sessionService.addSession(session); - return session.id; + const deviceSession = new DeviceSession({ connectedDevice }); + this._sessionService.addDeviceSession(deviceSession); + return deviceSession.id; }, }); } diff --git a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts index 2a251e9f6..6b7c1ccad 100644 --- a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts @@ -1,9 +1,9 @@ import { Left, Right } from "purify-ts"; import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; +import { deviceSessionStubBuilder } from "@internal/device-session/model/DeviceSession.stub"; import { DeviceSessionNotFound } from "@internal/device-session/model/Errors"; -import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; -import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; +import { DefaultDeviceSessionService } from "@internal/device-session/service/DefaultDeviceSessionService"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { DisconnectError } from "@internal/usb/model/Errors"; import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; @@ -12,7 +12,7 @@ import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; import { DisconnectUseCase } from "./DisconnectUseCase"; -let sessionService: DefaultSessionService; +let sessionService: DefaultDeviceSessionService; let usbHidTransport: WebUsbHidTransport; const loggerFactory = jest .fn() @@ -29,18 +29,21 @@ describe("DisconnectUseCase", () => { loggerFactory, usbHidDeviceConnectionFactoryStubBuilder(), ); - sessionService = new DefaultSessionService(loggerFactory); + sessionService = new DefaultDeviceSessionService(loggerFactory); }); it("should disconnect from a device", async () => { // Given const connectedDevice = connectedDeviceStubBuilder(); - const session = sessionStubBuilder({ id: sessionId, connectedDevice }); + const deviceSession = deviceSessionStubBuilder({ + id: sessionId, + connectedDevice, + }); jest - .spyOn(sessionService, "getSessionById") - .mockImplementation(() => Right(session)); - jest.spyOn(session, "close"); - jest.spyOn(sessionService, "removeSession"); + .spyOn(sessionService, "getDeviceSessionById") + .mockImplementation(() => Right(deviceSession)); + jest.spyOn(deviceSession, "close"); + jest.spyOn(sessionService, "removeDeviceSession"); jest .spyOn(usbHidTransport, "disconnect") .mockImplementation(() => Promise.resolve(Right(void 0))); @@ -53,14 +56,14 @@ describe("DisconnectUseCase", () => { await disconnectUseCase.execute({ sessionId }); // Then - expect(session.close).toHaveBeenCalled(); - expect(sessionService.removeSession).toHaveBeenCalledWith(sessionId); + expect(deviceSession.close).toHaveBeenCalled(); + expect(sessionService.removeDeviceSession).toHaveBeenCalledWith(sessionId); expect(usbHidTransport.disconnect).toHaveBeenCalledWith({ connectedDevice, }); }); - it("should throw an error when session not found", async () => { + it("should throw an error when deviceSession not found", async () => { // Given const disconnectUseCase = new DisconnectUseCase( usbHidTransport, @@ -79,8 +82,10 @@ describe("DisconnectUseCase", () => { it("should throw an error if usb hid disconnection fails", async () => { // Given jest - .spyOn(sessionService, "getSessionById") - .mockImplementation(() => Right(sessionStubBuilder({ id: sessionId }))); + .spyOn(sessionService, "getDeviceSessionById") + .mockImplementation(() => + Right(deviceSessionStubBuilder({ id: sessionId })), + ); jest .spyOn(usbHidTransport, "disconnect") .mockResolvedValue(Promise.resolve(Left(new DisconnectError()))); diff --git a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts index d3b1c8de8..05cb9ab93 100644 --- a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts @@ -1,15 +1,15 @@ import { inject, injectable } from "inversify"; -import { SessionId } from "@api/session/types"; +import { DeviceSessionId } from "@api/device-session/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import type { SessionService } from "@internal/device-session/service/SessionService"; +import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; export type DisconnectUseCaseArgs = { - sessionId: SessionId; + sessionId: DeviceSessionId; }; /** @@ -18,14 +18,14 @@ export type DisconnectUseCaseArgs = { @injectable() export class DisconnectUseCase { private readonly _usbHidTransport: UsbHidTransport; - private readonly _sessionService: SessionService; + private readonly _sessionService: DeviceSessionService; private readonly _logger: LoggerPublisherService; constructor( @inject(usbDiTypes.UsbHidTransport) usbHidTransport: UsbHidTransport, - @inject(deviceSessionTypes.SessionService) - sessionService: SessionService, + @inject(deviceSessionTypes.DeviceSessionService) + sessionService: DeviceSessionService, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerFactory: (tag: string) => LoggerPublisherService, ) { @@ -35,7 +35,7 @@ export class DisconnectUseCase { } async execute({ sessionId }: DisconnectUseCaseArgs): Promise { - const errorOrSession = this._sessionService.getSessionById(sessionId); + const errorOrSession = this._sessionService.getDeviceSessionById(sessionId); return errorOrSession.caseOf({ Left: (error) => { @@ -44,14 +44,14 @@ export class DisconnectUseCase { }); throw error; }, - Right: async (session) => { - session.close(); + Right: async (deviceSession) => { + deviceSession.close(); - this._sessionService.removeSession(sessionId); + this._sessionService.removeDeviceSession(sessionId); await this._usbHidTransport .disconnect({ - connectedDevice: session.connectedDevice, + connectedDevice: deviceSession.connectedDevice, }) .then((errorOrDisconnected) => errorOrDisconnected.mapLeft((error) => { diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts index 280db169f..cc194127f 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts @@ -1,31 +1,31 @@ import { Left } from "purify-ts"; +import { deviceSessionStubBuilder } from "@internal/device-session/model/DeviceSession.stub"; import { DeviceSessionNotFound, ReceiverApduError, } from "@internal/device-session/model/Errors"; -import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; -import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; -import { SessionService } from "@internal/device-session/service/SessionService"; +import { DefaultDeviceSessionService } from "@internal/device-session/service/DefaultDeviceSessionService"; +import { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { SendApduUseCase } from "@internal/send/use-case/SendApduUseCase"; import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; let logger: LoggerPublisherService; -let sessionService: SessionService; +let sessionService: DeviceSessionService; const fakeSessionId = "fakeSessionId"; describe("SendApduUseCase", () => { beforeEach(() => { logger = new DefaultLoggerPublisherService([], "send-apdu-use-case"); - sessionService = new DefaultSessionService(() => logger); + sessionService = new DefaultDeviceSessionService(() => logger); }); it("should send an APDU to a connected device", async () => { // given - const session = sessionStubBuilder(); - sessionService.addSession(session); + const deviceSession = deviceSessionStubBuilder(); + sessionService.addDeviceSession(deviceSession); const useCase = new SendApduUseCase(sessionService, () => logger); // when @@ -35,11 +35,11 @@ describe("SendApduUseCase", () => { }); // then - expect(session.connectedDevice.sendApdu).toHaveBeenCalledTimes(1); + expect(deviceSession.connectedDevice.sendApdu).toHaveBeenCalledTimes(1); expect(response).toBeDefined(); }); - it("should throw an error if the session is not found", async () => { + it("should throw an error if the deviceSession is not found", async () => { // given const useCase = new SendApduUseCase(sessionService, () => logger); @@ -60,8 +60,8 @@ describe("SendApduUseCase", () => { Promise.resolve(Left(new ReceiverApduError())), ), }); - const session = sessionStubBuilder({ connectedDevice }); - sessionService.addSession(session); + const deviceSession = deviceSessionStubBuilder({ connectedDevice }); + sessionService.addDeviceSession(deviceSession); const useCase = new SendApduUseCase(sessionService, () => logger); // when diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.ts index d48754569..a7e6e07f0 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.ts @@ -1,14 +1,14 @@ import { inject, injectable } from "inversify"; -import { SessionId } from "@api/session/types"; +import { DeviceSessionId } from "@api/device-session/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { ApduResponse } from "@internal/device-session/model/ApduResponse"; -import type { SessionService } from "@internal/device-session/service/SessionService"; +import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; export type SendApduUseCaseArgs = { - sessionId: SessionId; + sessionId: DeviceSessionId; apdu: Uint8Array; }; @@ -17,12 +17,12 @@ export type SendApduUseCaseArgs = { */ @injectable() export class SendApduUseCase { - private readonly _sessionService: SessionService; + private readonly _sessionService: DeviceSessionService; private readonly _logger: LoggerPublisherService; constructor( - @inject(deviceSessionTypes.SessionService) - sessionService: SessionService, + @inject(deviceSessionTypes.DeviceSessionService) + sessionService: DeviceSessionService, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerFactory: (tag: string) => LoggerPublisherService, ) { @@ -34,12 +34,13 @@ export class SendApduUseCase { sessionId, apdu, }: SendApduUseCaseArgs): Promise { - const deviceSession = this._sessionService.getSessionById(sessionId); + const deviceSessionOrError = + this._sessionService.getDeviceSessionById(sessionId); - return deviceSession.caseOf({ + return deviceSessionOrError.caseOf({ // Case device session found - Right: async (session) => { - const response = await session.sendApdu(apdu); + Right: async (deviceSession) => { + const response = await deviceSession.sendApdu(apdu); return response.caseOf({ // Case APDU sent and response received successfully Right: (data) => data, @@ -54,7 +55,7 @@ export class SendApduUseCase { }, // Case device session not found Left: (error) => { - this._logger.error("Error getting session", { + this._logger.error("Error getting deviceSession", { data: { error }, }); throw error; diff --git a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts index c8d6043e3..776843d76 100644 --- a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts +++ b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts @@ -1,13 +1,13 @@ -import { sessionStubBuilder } from "@internal/device-session/model/Session.stub"; -import { DefaultSessionService } from "@internal/device-session/service/DefaultSessionService"; -import { SessionService } from "@internal/device-session/service/SessionService"; +import { deviceSessionStubBuilder } from "@internal/device-session/model/DeviceSession.stub"; +import { DefaultDeviceSessionService } from "@internal/device-session/service/DefaultDeviceSessionService"; +import { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { GetConnectedDeviceUseCase } from "@internal/usb/use-case/GetConnectedDeviceUseCase"; import { ConnectedDevice } from "@root/src"; let logger: LoggerPublisherService; -let sessionService: SessionService; +let sessionService: DeviceSessionService; const fakeSessionId = "fakeSessionId"; @@ -17,13 +17,13 @@ describe("GetConnectedDevice", () => { [], "get-connected-device-use-case", ); - sessionService = new DefaultSessionService(() => logger); + sessionService = new DefaultDeviceSessionService(() => logger); }); it("should retrieve an instance of ConnectedDevice", () => { // given - const session = sessionStubBuilder({ id: fakeSessionId }); - sessionService.addSession(session); + const deviceSession = deviceSessionStubBuilder({ id: fakeSessionId }); + sessionService.addDeviceSession(deviceSession); const useCase = new GetConnectedDeviceUseCase(sessionService, () => logger); // when @@ -37,8 +37,8 @@ describe("GetConnectedDevice", () => { it("should retrieve correct device from session", () => { // given - const session = sessionStubBuilder({ id: fakeSessionId }); - sessionService.addSession(session); + const deviceSession = deviceSessionStubBuilder({ id: fakeSessionId }); + sessionService.addDeviceSession(deviceSession); const useCase = new GetConnectedDeviceUseCase(sessionService, () => logger); // when @@ -48,7 +48,9 @@ describe("GetConnectedDevice", () => { // then expect(response).toStrictEqual( - new ConnectedDevice({ internalConnectedDevice: session.connectedDevice }), + new ConnectedDevice({ + internalConnectedDevice: deviceSession.connectedDevice, + }), ); }); }); diff --git a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts index 7c8a6adbe..4a56fa5b5 100644 --- a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts +++ b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.ts @@ -1,27 +1,27 @@ import { inject, injectable } from "inversify"; -import { SessionId } from "@api/session/types"; +import { DeviceSessionId } from "@api/device-session/types"; import { ConnectedDevice } from "@api/usb/model/ConnectedDevice"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import type { SessionService } from "@internal/device-session/service/SessionService"; +import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; export type GetConnectedDeviceUseCaseArgs = { - sessionId: SessionId; + sessionId: DeviceSessionId; }; /** - * Get a connected device from session id. + * Get a connected device from deviceSession id. */ @injectable() export class GetConnectedDeviceUseCase { - private readonly _sessionService: SessionService; + private readonly _sessionService: DeviceSessionService; private readonly _logger: LoggerPublisherService; constructor( - @inject(deviceSessionTypes.SessionService) - sessionService: SessionService, + @inject(deviceSessionTypes.DeviceSessionService) + sessionService: DeviceSessionService, @inject(loggerTypes.LoggerPublisherServiceFactory) loggerFactory: (tag: string) => LoggerPublisherService, ) { @@ -30,12 +30,13 @@ export class GetConnectedDeviceUseCase { } execute({ sessionId }: GetConnectedDeviceUseCaseArgs): ConnectedDevice { - const deviceSession = this._sessionService.getSessionById(sessionId); + const deviceSessionOrError = + this._sessionService.getDeviceSessionById(sessionId); - return deviceSession.caseOf({ - Right: (session) => + return deviceSessionOrError.caseOf({ + Right: (deviceSession) => new ConnectedDevice({ - internalConnectedDevice: session.connectedDevice, + internalConnectedDevice: deviceSession.connectedDevice, }), Left: (error) => { this._logger.error("Error getting session", { From 2f05046e93d35a5e76bf5cd612d93af7c6290b2e Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 2 May 2024 17:10:18 +0200 Subject: [PATCH 210/253] :truck: (smpl): Rename Session to DeviceSession --- apps/sample/src/app/client-layout.tsx | 6 +-- apps/sample/src/components/ApduView/index.tsx | 4 +- apps/sample/src/components/Device/index.tsx | 8 ++-- apps/sample/src/components/MainView/index.tsx | 4 +- apps/sample/src/components/Sidebar/index.tsx | 4 +- ...ssionState.ts => useDeviceSessionState.ts} | 13 ++++--- .../DeviceSessionsProvider/index.tsx | 38 +++++++++++++++++++ .../src/providers/SessionsProvider/index.tsx | 35 ----------------- .../{sessions.ts => deviceSessions.ts} | 18 ++++----- 9 files changed, 67 insertions(+), 63 deletions(-) rename apps/sample/src/hooks/{useSessionState.ts => useDeviceSessionState.ts} (57%) create mode 100644 apps/sample/src/providers/DeviceSessionsProvider/index.tsx delete mode 100644 apps/sample/src/providers/SessionsProvider/index.tsx rename apps/sample/src/reducers/{sessions.ts => deviceSessions.ts} (61%) diff --git a/apps/sample/src/app/client-layout.tsx b/apps/sample/src/app/client-layout.tsx index 2b20fb6f0..cb1117643 100644 --- a/apps/sample/src/app/client-layout.tsx +++ b/apps/sample/src/app/client-layout.tsx @@ -16,7 +16,7 @@ import styled, { DefaultTheme } from "styled-components"; import { Header } from "@/components/Header"; import { Sidebar } from "@/components/Sidebar"; import { SdkProvider } from "@/providers/DeviceSdkProvider"; -import { SessionProvider } from "@/providers/SessionsProvider"; +import { DeviceSessionsProvider } from "@/providers/DeviceSessionsProvider"; import { GlobalStyle } from "@/styles/globalstyles"; type ClientRootLayoutProps = { @@ -45,13 +45,13 @@ const ClientRootLayout: React.FC = ({ children }) => { - +
    {children} - + diff --git a/apps/sample/src/components/ApduView/index.tsx b/apps/sample/src/components/ApduView/index.tsx index 92aef352f..5e01972d1 100644 --- a/apps/sample/src/components/ApduView/index.tsx +++ b/apps/sample/src/components/ApduView/index.tsx @@ -5,7 +5,7 @@ import styled, { DefaultTheme } from "styled-components"; import { useApduForm } from "@/hooks/useApduForm"; import { useSdk } from "@/providers/DeviceSdkProvider"; -import { useSessionContext } from "@/providers/SessionsProvider"; +import { useDeviceSessionsContext } from "@/providers/DeviceSessionsProvider"; const Root = styled(Flex).attrs({ mx: 15, mt: 10, mb: 5 })` flex-direction: column; @@ -70,7 +70,7 @@ export const ApduView: React.FC = () => { const sdk = useSdk(); const { state: { selectedId: selectedSessionId }, - } = useSessionContext(); + } = useDeviceSessionsContext(); const onSubmit = useCallback( async (values: typeof apduFormValues) => { setLoading(true); diff --git a/apps/sample/src/components/Device/index.tsx b/apps/sample/src/components/Device/index.tsx index 2187736b9..3a2d8c587 100644 --- a/apps/sample/src/components/Device/index.tsx +++ b/apps/sample/src/components/Device/index.tsx @@ -2,12 +2,12 @@ import React from "react"; import { ConnectionType, DeviceModelId, - SessionId, + DeviceSessionId, } from "@ledgerhq/device-sdk-core"; import { Box, DropdownGeneric, Flex, Icons, Text } from "@ledgerhq/react-ui"; import styled, { DefaultTheme } from "styled-components"; -import { useSessionState } from "@/hooks/useSessionState"; +import { useDeviceSessionState } from "@/hooks/useDeviceSessionState"; import { StatusText } from "./StatusText"; @@ -38,7 +38,7 @@ const ActionRow = styled(Flex).attrs({ py: 4, px: 2 })` type DeviceProps = { name: string; type: ConnectionType; - sessionId: SessionId; + sessionId: DeviceSessionId; model: DeviceModelId; onDisconnect: () => Promise; }; @@ -50,7 +50,7 @@ export const Device: React.FC = ({ onDisconnect, sessionId, }) => { - const sessionState = useSessionState(sessionId); + const sessionState = useDeviceSessionState(sessionId); return ( diff --git a/apps/sample/src/components/MainView/index.tsx b/apps/sample/src/components/MainView/index.tsx index bc26aa261..ceca7b06f 100644 --- a/apps/sample/src/components/MainView/index.tsx +++ b/apps/sample/src/components/MainView/index.tsx @@ -4,7 +4,7 @@ import Image from "next/image"; import styled, { DefaultTheme } from "styled-components"; import { useSdk } from "@/providers/DeviceSdkProvider"; -import { useSessionContext } from "@/providers/SessionsProvider"; +import { useDeviceSessionsContext } from "@/providers/DeviceSessionsProvider"; const Root = styled(Flex)` flex: 1; @@ -23,7 +23,7 @@ const NanoLogo = styled(Image).attrs({ mb: 8 })` export const MainView: React.FC = () => { const sdk = useSdk(); - const { dispatch } = useSessionContext(); + const { dispatch } = useDeviceSessionsContext(); // Example starting the discovery on a user action const onSelectDeviceClicked = useCallback(() => { diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx index c80920481..6d2a15a6b 100644 --- a/apps/sample/src/components/Sidebar/index.tsx +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -7,7 +7,7 @@ import styled, { DefaultTheme } from "styled-components"; import { Device } from "@/components/Device"; import { Menu } from "@/components/Menu"; import { useSdk } from "@/providers/DeviceSdkProvider"; -import { useSessionContext } from "@/providers/SessionsProvider"; +import { useDeviceSessionsContext } from "@/providers/DeviceSessionsProvider"; const Root = styled(Flex).attrs({ py: 8, px: 6 })` flex-direction: column; @@ -46,7 +46,7 @@ export const Sidebar: React.FC = () => { const { state: { deviceById }, dispatch, - } = useSessionContext(); + } = useDeviceSessionsContext(); useEffect(() => { sdk diff --git a/apps/sample/src/hooks/useSessionState.ts b/apps/sample/src/hooks/useDeviceSessionState.ts similarity index 57% rename from apps/sample/src/hooks/useSessionState.ts rename to apps/sample/src/hooks/useDeviceSessionState.ts index be9bb3544..aad5317ae 100644 --- a/apps/sample/src/hooks/useSessionState.ts +++ b/apps/sample/src/hooks/useDeviceSessionState.ts @@ -1,21 +1,22 @@ import { useEffect, useState } from "react"; -import { SessionDeviceState, SessionId } from "@ledgerhq/device-sdk-core"; +import { DeviceSessionId, DeviceSessionState } from "@ledgerhq/device-sdk-core"; import { useSdk } from "@/providers/DeviceSdkProvider"; -export function useSessionState(sessionId: SessionId) { +export function useDeviceSessionState(sessionId: DeviceSessionId) { const sdk = useSdk(); - const [sessionState, setSessionState] = useState(); + const [deviceSessionState, setDeviceSessionState] = + useState(); useEffect(() => { if (sessionId) { const subscription = sdk - .getSessionDeviceState({ + .getDeviceSessionState({ sessionId, }) .subscribe((state) => { // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion - setSessionState(state); + setDeviceSessionState(state); }); return () => { @@ -24,5 +25,5 @@ export function useSessionState(sessionId: SessionId) { } }, [sessionId, sdk]); - return sessionState; + return deviceSessionState; } diff --git a/apps/sample/src/providers/DeviceSessionsProvider/index.tsx b/apps/sample/src/providers/DeviceSessionsProvider/index.tsx new file mode 100644 index 000000000..82354d2a2 --- /dev/null +++ b/apps/sample/src/providers/DeviceSessionsProvider/index.tsx @@ -0,0 +1,38 @@ +import React, { Context, createContext, useContext, useReducer } from "react"; + +import { + AddSessionAction, + DeviceSessionsInitialState, + deviceSessionsReducer, + DeviceSessionsState, + RemoveSessionAction, +} from "@/reducers/deviceSessions"; + +type DeviceSessionsContextType = { + state: DeviceSessionsState; + dispatch: (value: AddSessionAction | RemoveSessionAction) => void; +}; + +const DeviceSessionsContext: Context = + createContext({ + state: DeviceSessionsInitialState, + dispatch: () => null, + }); + +export const DeviceSessionsProvider: React.FC = ({ + children, +}) => { + const [state, dispatch] = useReducer( + deviceSessionsReducer, + DeviceSessionsInitialState, + ); + + return ( + + {children} + + ); +}; + +export const useDeviceSessionsContext = () => + useContext(DeviceSessionsContext); diff --git a/apps/sample/src/providers/SessionsProvider/index.tsx b/apps/sample/src/providers/SessionsProvider/index.tsx deleted file mode 100644 index d39002451..000000000 --- a/apps/sample/src/providers/SessionsProvider/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Context, createContext, useContext, useReducer } from "react"; - -import { - AddSessionAction, - RemoveSessionAction, - SessionsInitialState, - sessionsReducer, - SessionsState, -} from "@/reducers/sessions"; - -type SessionContextType = { - state: SessionsState; - dispatch: (value: AddSessionAction | RemoveSessionAction) => void; -}; - -const SessionContext: Context = - createContext({ - state: SessionsInitialState, - dispatch: () => null, - }); - -export const SessionProvider: React.FC = ({ - children, -}) => { - const [state, dispatch] = useReducer(sessionsReducer, SessionsInitialState); - - return ( - - {children} - - ); -}; - -export const useSessionContext = () => - useContext(SessionContext); diff --git a/apps/sample/src/reducers/sessions.ts b/apps/sample/src/reducers/deviceSessions.ts similarity index 61% rename from apps/sample/src/reducers/sessions.ts rename to apps/sample/src/reducers/deviceSessions.ts index 8ff31e365..ca419b880 100644 --- a/apps/sample/src/reducers/sessions.ts +++ b/apps/sample/src/reducers/deviceSessions.ts @@ -1,28 +1,28 @@ import { Reducer } from "react"; -import { ConnectedDevice, SessionId } from "@ledgerhq/device-sdk-core"; +import { ConnectedDevice, DeviceSessionId } from "@ledgerhq/device-sdk-core"; -export type SessionsState = { - selectedId: SessionId | null; - deviceById: Record; +export type DeviceSessionsState = { + selectedId: DeviceSessionId | null; + deviceById: Record; }; export type AddSessionAction = { type: "add_session"; - payload: { sessionId: SessionId; connectedDevice: ConnectedDevice }; + payload: { sessionId: DeviceSessionId; connectedDevice: ConnectedDevice }; }; export type RemoveSessionAction = { type: "remove_session"; - payload: { sessionId: SessionId }; + payload: { sessionId: DeviceSessionId }; }; -export const SessionsInitialState: SessionsState = { +export const DeviceSessionsInitialState: DeviceSessionsState = { selectedId: null, deviceById: {}, }; -export const sessionsReducer: Reducer< - SessionsState, +export const deviceSessionsReducer: Reducer< + DeviceSessionsState, AddSessionAction | RemoveSessionAction > = (state, action) => { switch (action.type) { From 56cb8821f0fd38270348a732134b7755f6dfbfb3 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 2 May 2024 18:00:58 +0200 Subject: [PATCH 211/253] :bookmark: (core): Changeset --- .changeset/curly-knives-design.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/curly-knives-design.md diff --git a/.changeset/curly-knives-design.md b/.changeset/curly-knives-design.md new file mode 100644 index 000000000..3d83f6b11 --- /dev/null +++ b/.changeset/curly-knives-design.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": patch +--- + +Naming DeviceSession From 4f9ebc0ce9a6a656e2f4689e4887ab2b3792bf95 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 2 May 2024 17:42:12 +0200 Subject: [PATCH 212/253] :bug: (core): Browser compatibility with array accessors --- packages/core/src/api/apdu/utils/ApduParser.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/api/apdu/utils/ApduParser.ts b/packages/core/src/api/apdu/utils/ApduParser.ts index 7c5cb2236..13a6df507 100644 --- a/packages/core/src/api/apdu/utils/ApduParser.ts +++ b/packages/core/src/api/apdu/utils/ApduParser.ts @@ -126,7 +126,7 @@ export class ApduParser { if (prefix) result += "0x"; while (index <= value.length) { - const item = value.at(index)?.toString(16); + const item = value[index]?.toString(16); if (item) result += item.length < 2 ? "0" + item : item; index++; } @@ -145,7 +145,7 @@ export class ApduParser { if (!value) return result; while (index <= value.length) { - const item = value.at(index); + const item = value[index]; if (item) result += String.fromCharCode(item); index++; } From 557e4238d434763a8633a6026019001c12cfdff5 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 2 May 2024 17:44:20 +0200 Subject: [PATCH 213/253] :wrench: (core): Exclude test files from ts build --- packages/core/tsconfig.cjs.json | 7 ++++++- packages/core/tsconfig.esm.json | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/core/tsconfig.cjs.json b/packages/core/tsconfig.cjs.json index a797cc717..2c686b0dd 100644 --- a/packages/core/tsconfig.cjs.json +++ b/packages/core/tsconfig.cjs.json @@ -1,6 +1,11 @@ { "extends": "./tsconfig.json", - "exclude": ["src/**/*.test.ts", "jest.*.ts"], + "exclude": [ + "src/**/*.test.ts", + "src/**/*.stub.ts", + "src/**/__mocks__", + "jest.*.ts" + ], "compilerOptions": { "module": "commonjs", "moduleResolution": "node", diff --git a/packages/core/tsconfig.esm.json b/packages/core/tsconfig.esm.json index dd32a6fe4..582fb4f0f 100644 --- a/packages/core/tsconfig.esm.json +++ b/packages/core/tsconfig.esm.json @@ -1,6 +1,11 @@ { "extends": "./tsconfig.json", - "exclude": ["src/**/*.test.ts", "jest.*.ts"], + "exclude": [ + "src/**/*.test.ts", + "src/**/*.stub.ts", + "src/**/__mocks__", + "jest.*.ts" + ], "compilerOptions": { "module": "esnext", "outDir": "./lib/esm", From e3c24c83f82f8aeb9a09d99e48d6a1bbe0369140 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 2 May 2024 18:15:05 +0200 Subject: [PATCH 214/253] :truck: (core): Move ApduResponse in @api --- packages/core/src/api/DeviceSdk.ts | 2 +- packages/core/src/api/apdu/utils/ApduParser.test.ts | 2 +- packages/core/src/api/apdu/utils/ApduParser.ts | 2 +- packages/core/src/api/command/Command.ts | 2 +- .../core/src/api/command/os/GetAppAndVersionCommand.test.ts | 2 +- packages/core/src/api/command/os/GetAppAndVersionCommand.ts | 2 +- .../core/src/api/command/os/GetBatteryStatusCommand.test.ts | 2 +- packages/core/src/api/command/os/GetBatteryStatusCommand.ts | 2 +- packages/core/src/api/command/os/GetOsVersionCommand.test.ts | 2 +- packages/core/src/api/command/os/GetOsVersionCommand.ts | 2 +- packages/core/src/api/command/utils/CommandUtils.test.ts | 2 +- packages/core/src/api/command/utils/CommandUtils.ts | 2 +- .../model => api/device-session}/ApduResponse.stub.ts | 0 .../device-session/model => api/device-session}/ApduResponse.ts | 0 packages/core/src/api/index.ts | 2 +- .../src/internal/device-session/service/ApduReceiverService.ts | 2 +- .../device-session/service/DefaultApduReceiverService.test.ts | 2 +- .../device-session/service/DefaultApduReceiverService.ts | 2 +- packages/core/src/internal/send/use-case/SendApduUseCase.ts | 2 +- .../core/src/internal/usb/model/InternalConnectedDevice.stub.ts | 2 +- .../core/src/internal/usb/model/InternalConnectedDevice.test.ts | 2 +- packages/core/src/internal/usb/transport/DeviceConnection.ts | 2 +- .../core/src/internal/usb/transport/UsbHidDeviceConnection.ts | 2 +- 23 files changed, 21 insertions(+), 21 deletions(-) rename packages/core/src/{internal/device-session/model => api/device-session}/ApduResponse.stub.ts (100%) rename packages/core/src/{internal/device-session/model => api/device-session}/ApduResponse.ts (100%) diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 9ac08670b..60f0a53c9 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -6,13 +6,13 @@ import { SendCommandUseCase, SendCommandUseCaseArgs, } from "@api/command/use-case/SendCommandUseCase"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { DeviceSessionState } from "@api/device-session/DeviceSessionState"; import { DeviceSessionId } from "@api/device-session/types"; import { ConnectedDevice } from "@api/usb/model/ConnectedDevice"; import { configTypes } from "@internal/config/di/configTypes"; import { GetSdkVersionUseCase } from "@internal/config/use-case/GetSdkVersionUseCase"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { GetDeviceSessionStateUseCase } from "@internal/device-session/use-case/GetDeviceSessionStateUseCase"; import { discoveryTypes } from "@internal/discovery/di/discoveryTypes"; import { diff --git a/packages/core/src/api/apdu/utils/ApduParser.test.ts b/packages/core/src/api/apdu/utils/ApduParser.test.ts index 54033d244..499fedc9d 100644 --- a/packages/core/src/api/apdu/utils/ApduParser.test.ts +++ b/packages/core/src/api/apdu/utils/ApduParser.test.ts @@ -1,4 +1,4 @@ -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { ApduParser } from "./ApduParser"; diff --git a/packages/core/src/api/apdu/utils/ApduParser.ts b/packages/core/src/api/apdu/utils/ApduParser.ts index 13a6df507..9e05c0146 100644 --- a/packages/core/src/api/apdu/utils/ApduParser.ts +++ b/packages/core/src/api/apdu/utils/ApduParser.ts @@ -1,4 +1,4 @@ -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; export type TaggedField = { tag: number; diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index 8d9795fde..2f7f6f479 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -1,6 +1,6 @@ import { Apdu } from "@api/apdu/model/Apdu"; import { DeviceModelId } from "@api/device/DeviceModel"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; export interface Command { getApdu(args?: U): Apdu; diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts index 5fc680830..c6268c2b9 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts @@ -3,7 +3,7 @@ import { InvalidResponseFormatError, InvalidStatusWordError, } from "@api/command/Errors"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { GetAppAndVersionCommand, diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts index 596fb5ea8..b91178a0e 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts @@ -7,7 +7,7 @@ import { InvalidStatusWordError, } from "@api/command/Errors"; import { CommandUtils } from "@api/command/utils/CommandUtils"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; export type GetAppAndVersionResponse = { name: string; diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts index 060997a80..655328605 100644 --- a/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts @@ -3,7 +3,7 @@ import { InvalidBatteryStatusTypeError, InvalidStatusWordError, } from "@api/command/Errors"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { BatteryStatusType, diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts index 1aaac4345..c692a78da 100644 --- a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts @@ -9,7 +9,7 @@ import { InvalidStatusWordError, } from "@api/command/Errors"; import { CommandUtils } from "@api/command/utils/CommandUtils"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; export enum BatteryStatusType { BATTERY_PERCENTAGE = 0x00, diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.test.ts b/packages/core/src/api/command/os/GetOsVersionCommand.test.ts index fbc8358cc..4deab02bc 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.test.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.test.ts @@ -1,7 +1,7 @@ import { Command } from "@api/command/Command"; import { InvalidStatusWordError } from "@api/command/Errors"; import { DeviceModelId } from "@api/device/DeviceModel"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { GetOsVersionCommand, diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.ts b/packages/core/src/api/command/os/GetOsVersionCommand.ts index 4dc89c1e5..3eefb3571 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.ts @@ -5,7 +5,7 @@ import { Command } from "@api/command/Command"; import { InvalidStatusWordError } from "@api/command/Errors"; import { CommandUtils } from "@api/command/utils/CommandUtils"; import { DeviceModelId } from "@api/device/DeviceModel"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; export type GetOsVersionResponse = { targetId: string; diff --git a/packages/core/src/api/command/utils/CommandUtils.test.ts b/packages/core/src/api/command/utils/CommandUtils.test.ts index 7f8028faf..f38b16d00 100644 --- a/packages/core/src/api/command/utils/CommandUtils.test.ts +++ b/packages/core/src/api/command/utils/CommandUtils.test.ts @@ -1,4 +1,4 @@ -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { CommandUtils } from "./CommandUtils"; diff --git a/packages/core/src/api/command/utils/CommandUtils.ts b/packages/core/src/api/command/utils/CommandUtils.ts index 7042a0871..bc63a2789 100644 --- a/packages/core/src/api/command/utils/CommandUtils.ts +++ b/packages/core/src/api/command/utils/CommandUtils.ts @@ -1,4 +1,4 @@ -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; export class CommandUtils { static isValidStatusCode(statusCode: Uint8Array) { diff --git a/packages/core/src/internal/device-session/model/ApduResponse.stub.ts b/packages/core/src/api/device-session/ApduResponse.stub.ts similarity index 100% rename from packages/core/src/internal/device-session/model/ApduResponse.stub.ts rename to packages/core/src/api/device-session/ApduResponse.stub.ts diff --git a/packages/core/src/internal/device-session/model/ApduResponse.ts b/packages/core/src/api/device-session/ApduResponse.ts similarity index 100% rename from packages/core/src/internal/device-session/model/ApduResponse.ts rename to packages/core/src/api/device-session/ApduResponse.ts diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 7e7c01e0c..89cd2ca28 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -2,6 +2,7 @@ export { DeviceModel, DeviceModelId } from "./device/DeviceModel"; export { DeviceStatus } from "./device/DeviceStatus"; +export { ApduResponse } from "./device-session/ApduResponse"; export { DeviceSdk } from "./DeviceSdk"; export { LedgerDeviceSdkBuilder as DeviceSdkBuilder } from "./DeviceSdkBuilder"; export { LogLevel } from "./logger-subscriber/model/LogLevel"; @@ -9,4 +10,3 @@ export { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; export * from "./types"; export { ConnectedDevice } from "./usb/model/ConnectedDevice"; export { DeviceSessionState } from "@api/device-session/DeviceSessionState"; -export { ApduResponse } from "@internal/device-session/model/ApduResponse"; diff --git a/packages/core/src/internal/device-session/service/ApduReceiverService.ts b/packages/core/src/internal/device-session/service/ApduReceiverService.ts index a8407bc21..7185891e8 100644 --- a/packages/core/src/internal/device-session/service/ApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/ApduReceiverService.ts @@ -1,7 +1,7 @@ import { Either, Maybe } from "purify-ts"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { SdkError } from "@api/Error"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; export interface ApduReceiverService { handleFrame(apdu: Uint8Array): Either>; diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.test.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.test.ts index d8a603273..d3ea8cf0a 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.test.ts @@ -3,7 +3,7 @@ jest.mock("uuid"); import { Just, Left, Maybe, Nothing, Right } from "purify-ts"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { ReceiverApduError } from "@internal/device-session/model/Errors"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts index f149ed605..805e21a68 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts @@ -2,6 +2,7 @@ import { inject, injectable } from "inversify"; import { Either, Just, Left, Maybe, Nothing, Right } from "purify-ts"; import { v4 } from "uuid"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { APDU_RESPONSE_STATUS_CODE_LENGTH } from "@internal/device-session/data/ApduResponseConst"; import { APDU_DATA_LENGTH_LENGTH, @@ -9,7 +10,6 @@ import { HEAD_TAG_LENGTH, INDEX_LENGTH, } from "@internal/device-session/data/FramerConst"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import { ReceiverApduError } from "@internal/device-session/model/Errors"; import { Frame } from "@internal/device-session/model/Frame"; import { FrameHeader } from "@internal/device-session/model/FrameHeader"; diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.ts index a7e6e07f0..248785aa3 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.ts @@ -1,8 +1,8 @@ import { inject, injectable } from "inversify"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { DeviceSessionId } from "@api/device-session/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; diff --git a/packages/core/src/internal/usb/model/InternalConnectedDevice.stub.ts b/packages/core/src/internal/usb/model/InternalConnectedDevice.stub.ts index a5502c09b..2d4617dc4 100644 --- a/packages/core/src/internal/usb/model/InternalConnectedDevice.stub.ts +++ b/packages/core/src/internal/usb/model/InternalConnectedDevice.stub.ts @@ -1,7 +1,7 @@ import { Right } from "purify-ts"; +import { defaultApduResponseStubBuilder } from "@api/device-session/ApduResponse.stub"; import { deviceModelStubBuilder } from "@internal/device-model/model/DeviceModel.stub"; -import { defaultApduResponseStubBuilder } from "@internal/device-session/model/ApduResponse.stub"; import { ConnectedDeviceConstructorArgs, InternalConnectedDevice, diff --git a/packages/core/src/internal/usb/model/InternalConnectedDevice.test.ts b/packages/core/src/internal/usb/model/InternalConnectedDevice.test.ts index c6afaf37d..a14f90d9c 100644 --- a/packages/core/src/internal/usb/model/InternalConnectedDevice.test.ts +++ b/packages/core/src/internal/usb/model/InternalConnectedDevice.test.ts @@ -1,5 +1,5 @@ +import { defaultApduResponseStubBuilder } from "@api/device-session/ApduResponse.stub"; import { deviceModelStubBuilder } from "@internal/device-model/model/DeviceModel.stub"; -import { defaultApduResponseStubBuilder } from "@internal/device-session/model/ApduResponse.stub"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; diff --git a/packages/core/src/internal/usb/transport/DeviceConnection.ts b/packages/core/src/internal/usb/transport/DeviceConnection.ts index ddf27e177..7f1cb1448 100644 --- a/packages/core/src/internal/usb/transport/DeviceConnection.ts +++ b/packages/core/src/internal/usb/transport/DeviceConnection.ts @@ -1,7 +1,7 @@ import { Either } from "purify-ts"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { SdkError } from "@api/Error"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; export type SendApduFnType = ( apdu: Uint8Array, diff --git a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts index 87b11a403..140796d78 100644 --- a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts +++ b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.ts @@ -2,7 +2,7 @@ import { inject } from "inversify"; import { Left, Right } from "purify-ts"; import { Subject } from "rxjs"; -import { ApduResponse } from "@internal/device-session/model/ApduResponse"; +import { ApduResponse } from "@api/device-session/ApduResponse"; import { ApduReceiverService } from "@internal/device-session/service/ApduReceiverService"; import { ApduSenderService } from "@internal/device-session/service/ApduSenderService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; From 192c63c12bb19f8d5e2314cab00ea7fbf6c93b47 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 2 May 2024 17:48:51 +0200 Subject: [PATCH 215/253] :bookmark: (core): Changeset --- .changeset/stupid-boats-tan.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/stupid-boats-tan.md diff --git a/.changeset/stupid-boats-tan.md b/.changeset/stupid-boats-tan.md new file mode 100644 index 000000000..db82836c5 --- /dev/null +++ b/.changeset/stupid-boats-tan.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": patch +--- + +Clean exports From faaf3bd1386ff1a010ab1c5e1186be2cc31aeb44 Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Wed, 15 May 2024 15:16:54 +0200 Subject: [PATCH 216/253] =?UTF-8?q?=F0=9F=93=9D=20(core):=20Add=20TSDoc=20?= =?UTF-8?q?comments=20for=20things=20exposed=20through=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit prettier --- packages/core/src/api/DeviceSdk.ts | 58 +++++++++++++++++++ packages/core/src/api/DeviceSdkBuilder.ts | 14 +++++ packages/core/src/api/apdu/model/Apdu.ts | 27 +++++++++ .../core/src/api/apdu/utils/ApduBuilder.ts | 16 ++++- .../core/src/api/apdu/utils/ApduParser.ts | 12 ++++ .../src/api/apdu/utils/AppBuilderError.ts | 3 + packages/core/src/api/command/Command.ts | 9 +++ .../api/command/os/GetAppAndVersionCommand.ts | 10 ++++ .../api/command/os/GetBatteryStatusCommand.ts | 30 ++++++++++ .../src/api/command/os/GetOsVersionCommand.ts | 47 ++++++++++++++- .../command/use-case/SendCommandUseCase.ts | 17 ++++++ packages/core/src/api/device-session/types.ts | 3 + packages/core/src/api/device/DeviceModel.ts | 8 +++ .../service/LoggerSubscriberService.ts | 6 ++ .../discovery/use-case/ConnectUseCase.ts | 3 + .../use-case/StartDiscoveringUseCase.ts | 2 +- .../internal/send/use-case/SendApduUseCase.ts | 6 ++ .../internal/usb/model/DiscoveredDevice.ts | 10 +++- 18 files changed, 276 insertions(+), 5 deletions(-) diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 60f0a53c9..d2d585df7 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -38,6 +38,11 @@ import { } from "@internal/usb/use-case/GetConnectedDeviceUseCase"; import { makeContainer, MakeContainerProps } from "@root/src/di"; +/** + * The main class to interact with the SDK. + * + * NB: do not instantiate this class directly, instead, use `DeviceSdkBuilder`. + */ export class DeviceSdk { container: Container; /** @internal */ @@ -48,54 +53,107 @@ export class DeviceSdk { this.container = makeContainer({ stub, loggers }); } + /** + * Returns a promise resolving to the version of the SDK. + */ getVersion(): Promise { return this.container .get(configTypes.GetSdkVersionUseCase) .getSdkVersion(); } + /** + * Starts discovering devices connected via USB HID (BLE not implemented yet). + * + * For the WeHID implementation, this use-case needs to be called as a result + * of an user interaction (button "click" event for ex). + * + * @returns {Observable} An observable of discovered devices. + */ startDiscovering(): Observable { return this.container .get(discoveryTypes.StartDiscoveringUseCase) .execute(); } + /** + * Stops discovering devices connected via USB HID (and later BLE). + */ stopDiscovering() { return this.container .get(discoveryTypes.StopDiscoveringUseCase) .execute(); } + /** + * Connects to a device previously discovered with `DeviceSdk.startDiscovering`. + * Creates a new device session which: + * - Represents the connection to the device. + * - Is terminated upon disconnection of the device. + * - Exposes the device state through an observable (see `DeviceSdk.getDeviceSessionState`) + * - Should be used for all subsequent communication with the device. + * + * @param {ConnectUseCaseArgs} args - The device ID (obtained in discovery) to connect to. + * @returns The session ID to use for further communication with the device. + */ connect(args: ConnectUseCaseArgs): Promise { return this.container .get(discoveryTypes.ConnectUseCase) .execute(args); } + /** + * Disconnects to a discovered device via USB HID (and later BLE). + * + * @param {DisconnectUseCaseArgs} args - The session ID to disconnect. + */ disconnect(args: DisconnectUseCaseArgs): Promise { return this.container .get(discoveryTypes.DisconnectUseCase) .execute(args); } + /** + * Sends an APDU command to a device through a device session. + * + * @param {SendApduUseCaseArgs} args - The device session ID and APDU command to send. + */ sendApdu(args: SendApduUseCaseArgs): Promise { return this.container .get(sendTypes.SendApduUseCase) .execute(args); } + /** + * Sends a command to a device through a device session. + * + * @param {SendCommandUseCaseArgs} - The device session ID, command and command parameters to send. + * @returns A promise resolving with the response from the command. + */ sendCommand(args: SendCommandUseCaseArgs): Promise { return this.container .get(commandTypes.SendCommandUseCase) .execute(args); } + /** + * Gets the connected from its device session ID. + * + * @param {GetConnectedDeviceUseCaseArgs} args - The device session ID. + * @returns {ConnectedDevice} The connected device. + */ getConnectedDevice(args: GetConnectedDeviceUseCaseArgs): ConnectedDevice { return this.container .get(usbDiTypes.GetConnectedDeviceUseCase) .execute(args); } + /** + * Gets the device state of a session. + * + * @param {{DeviceSessionId}} args - The device session ID. + * @returns {Observable} An observable of the session device state. + */ getDeviceSessionState(args: { sessionId: DeviceSessionId; }): Observable { diff --git a/packages/core/src/api/DeviceSdkBuilder.ts b/packages/core/src/api/DeviceSdkBuilder.ts index f308b3e68..7bc59000c 100644 --- a/packages/core/src/api/DeviceSdkBuilder.ts +++ b/packages/core/src/api/DeviceSdkBuilder.ts @@ -1,6 +1,17 @@ import { LoggerSubscriberService } from "./logger-subscriber/service/LoggerSubscriberService"; import { DeviceSdk } from "./DeviceSdk"; +/** + * Builder for the `DeviceSdk` class. + * + * @example + * ``` + * const sdk = new LedgerDeviceSdkBuilder() + * .setStub(false) + * .addLogger(myLogger) + * .build(); + * ``` + */ export class LedgerDeviceSdkBuilder { stub = false; loggers: LoggerSubscriberService[] = []; @@ -14,6 +25,9 @@ export class LedgerDeviceSdkBuilder { return this; } + /** + * Add a logger to the SDK that will receive its logs + */ addLogger(logger: LoggerSubscriberService): LedgerDeviceSdkBuilder { this.loggers.push(logger); return this; diff --git a/packages/core/src/api/apdu/model/Apdu.ts b/packages/core/src/api/apdu/model/Apdu.ts index 2ecabdcdc..4482cb23c 100644 --- a/packages/core/src/api/apdu/model/Apdu.ts +++ b/packages/core/src/api/apdu/model/Apdu.ts @@ -1,8 +1,31 @@ +/** + * Represents an APDU command that can be sent to a device. + * DO NOT USE THIS CLASS DIRECTLY, use ApduBuilder instead. + */ export class Apdu { + /** + * Instruction class (1 byte) + */ readonly cla: number; + + /** + * Instruction code (1 byte) + */ readonly ins: number; + + /** + * Instruction parameter 1 (2 bytes) + */ readonly p1: number; + + /** + * Instruction parameter 2 (2 bytes) + */ readonly p2: number; + + /** + * Bytes of data + */ data?: Uint8Array; constructor( @@ -19,6 +42,10 @@ export class Apdu { this.data = data; } + /** + * Get the raw binary data of the APDU command + * @returns {Uint8Array} - The raw APDU command + */ getRawApdu(): Uint8Array { const header = Uint8Array.from([ this.cla, diff --git a/packages/core/src/api/apdu/utils/ApduBuilder.ts b/packages/core/src/api/apdu/utils/ApduBuilder.ts index 7c2a893bf..ffa4cd410 100644 --- a/packages/core/src/api/apdu/utils/ApduBuilder.ts +++ b/packages/core/src/api/apdu/utils/ApduBuilder.ts @@ -21,9 +21,21 @@ export type ApduBuilderArgs = { }; /** - * ApduBuilder is a utility class to help build APDU commands + * ApduBuilder is a utility class to help build APDU commands. * It allows to easily add data to the data field of the APDU command - * and to encode data in different formats + * and to encode this data in different formats. + * + * @example + * ``` + * const apduBuilder = new ApduBuilder({ ins: 0x01, cla: 0x02, p1: 0x03, p2: 0x04 }) + * .add8BitUintToData(0x05) + * .add16BitUintToData(0x0607) + * .addHexaStringToData("0x0809") + * .addAsciiStringToData("hello") + * + * const apdu = apduBuilder.build(); + * const builderErrors = apduBuilder.getErrors(); + * ``` */ export class ApduBuilder { private _ins: number; diff --git a/packages/core/src/api/apdu/utils/ApduParser.ts b/packages/core/src/api/apdu/utils/ApduParser.ts index 9e05c0146..783ebd633 100644 --- a/packages/core/src/api/apdu/utils/ApduParser.ts +++ b/packages/core/src/api/apdu/utils/ApduParser.ts @@ -5,6 +5,18 @@ export type TaggedField = { value: Uint8Array; }; +/** + * ApduParser is a utility class to help parse APDU responses. + * + * It provides methods to extract fields of different types from the response. + * + * @example + * ``` + * const parser = new ApduParser(apduResponse); + * const targetId = parser.encodeToHexaString(parser.extractFieldByLength(4)); + * const seVersion = parser.encodeToString(parser.extractFieldLVEncoded()); + * ``` + */ export class ApduParser { private _index: number; private _response: Uint8Array; diff --git a/packages/core/src/api/apdu/utils/AppBuilderError.ts b/packages/core/src/api/apdu/utils/AppBuilderError.ts index c0c725250..2566422bc 100644 --- a/packages/core/src/api/apdu/utils/AppBuilderError.ts +++ b/packages/core/src/api/apdu/utils/AppBuilderError.ts @@ -45,6 +45,9 @@ export class HexaStringEncodeError implements SdkAppBuilderError { } } +/** + * Type for all possible errors that can be thrown by the AppBuilder. + */ export type AppBuilderError = | InvalidValueError | ValueOverflowError diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index 2f7f6f479..6cbd474f0 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -2,8 +2,17 @@ import { Apdu } from "@api/apdu/model/Apdu"; import { DeviceModelId } from "@api/device/DeviceModel"; import { ApduResponse } from "@api/device-session/ApduResponse"; +/** + * Represents a command that can be sent to a device. + */ export interface Command { + /** + * Returns the APDU to be sent to the device. + */ getApdu(args?: U): Apdu; + /** + * Parses the APDU response from the device. + */ parseResponse( apduResponse: ApduResponse, deviceModelId: DeviceModelId | void, diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts index b91178a0e..9990a7799 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts @@ -10,11 +10,21 @@ import { CommandUtils } from "@api/command/utils/CommandUtils"; import { ApduResponse } from "@api/device-session/ApduResponse"; export type GetAppAndVersionResponse = { + /** + * The name of the application currently running on the device. + */ name: string; + /** + * The version of the application currently running on the device. + */ version: string; flags?: number | Uint8Array; }; +/** + * Command to get information about the application currently running on the + * device. + */ export class GetAppAndVersionCommand implements Command { diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts index c692a78da..71e8b3e17 100644 --- a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts @@ -11,11 +11,29 @@ import { import { CommandUtils } from "@api/command/utils/CommandUtils"; import { ApduResponse } from "@api/device-session/ApduResponse"; +/** + * The type of battery information to retrieve. + */ export enum BatteryStatusType { + /** + * The command response will be the battery percentage. + */ BATTERY_PERCENTAGE = 0x00, + /** + * The command response will be the battery voltage in mV. + */ BATTERY_VOLTAGE = 0x01, + /** + * The command response will be the battery temperature in degree celsius + */ BATTERY_TEMPERATURE = 0x02, + /** + * The command response will be the battery current in mA. + */ BATTERY_CURRENT = 0x03, + /** + * The command response will be the battery status (cf. `BatteryStatusFlags`) + */ BATTERY_FLAGS = 0x04, } @@ -42,8 +60,20 @@ type BatteryStatusFlags = { issueBattery: boolean; }; +/** + * The response type depends on the `statusType` parameter sent with the command, + * cf. `BatteryStatusType`. + */ export type GetBatteryStatusResponse = number | BatteryStatusFlags; +/** + * Command to get the battery status of the device. + * The parameter statusType defines the type of information to retrieve, cf. + * `BatteryStatusType`. + * + * WARNING: this command should not be sent within a logic of polling as it is + * going to decrease the overall performance of the communication with the device. + */ export class GetBatteryStatusCommand implements Command { diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.ts b/packages/core/src/api/command/os/GetOsVersionCommand.ts index 3eefb3571..05cdc3d54 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.ts @@ -7,17 +7,62 @@ import { CommandUtils } from "@api/command/utils/CommandUtils"; import { DeviceModelId } from "@api/device/DeviceModel"; import { ApduResponse } from "@api/device-session/ApduResponse"; +/** + * Response of the GetOsVersionCommand. + */ export type GetOsVersionResponse = { + /** + * Target identifier. + */ targetId: string; + + /** + * Version of BOLOS on the secure element (SE). + * {@link https://developers.ledger.com/docs/device-app/architecture/bolos/hardware-architecture | Hardware Architecture} + */ seVersion: string; + + /** + * Secure element flags. + * Used to represent the current state of the secure element. + */ seFlags: number; + + /** + * Version of the microcontroller unit (MCU) SEPH, which is the SE-MCU link protocol. + * {@link https://developers.ledger.com/docs/device-app/architecture/bolos/hardware-architecture | Hardware Architecture} + */ mcuSephVersion: string; + + /** + * Version of the MCU bootloader. + */ mcuBootloaderVersion: string; + + /** + * Hardware revision version. + * Only available for Ledger Nano X in which case it's "00" or "01". + */ hwVersion: string; - langId: string; + + /** + * Identifier of the installed language pack. + * Can be one of: + * - "00": English + * - "01": French + * - "02": Spanish + */ + langId: string; // [SHOULD] be an enum + + /** + * State for Ledger Recover. // [SHOULD] Add more information about this field + */ recoverState: string; }; +/** + * Command to get information about the device firmware. + */ export class GetOsVersionCommand implements Command { getApdu = (): Apdu => new ApduBuilder({ diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.ts index 0e2b4c8fd..19ce38102 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.ts @@ -7,8 +7,17 @@ import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; export type SendCommandUseCaseArgs = { + /** + * The device session id. + */ sessionId: string; + /** + * The command to send. + */ command: Command; + /** + * The parameters of the command. + */ params: U; }; @@ -29,6 +38,14 @@ export class SendCommandUseCase { this._logger = loggerFactory("SendCommandUseCase"); } + /** + * Sends a command to a device through a device session. + * + * @param sessionId - The device session id. + * @param command - The command to send. + * @param params - The parameters of the command. + * @returns The response from the command. + */ async execute({ sessionId, command, diff --git a/packages/core/src/api/device-session/types.ts b/packages/core/src/api/device-session/types.ts index 4edcad22d..e838f624b 100644 --- a/packages/core/src/api/device-session/types.ts +++ b/packages/core/src/api/device-session/types.ts @@ -1 +1,4 @@ +/** + * Unique identifier for a device session. + */ export type DeviceSessionId = string; diff --git a/packages/core/src/api/device/DeviceModel.ts b/packages/core/src/api/device/DeviceModel.ts index 0f9367de2..b4f60e01c 100644 --- a/packages/core/src/api/device/DeviceModel.ts +++ b/packages/core/src/api/device/DeviceModel.ts @@ -5,6 +5,14 @@ export enum DeviceModelId { STAX = "stax", } +/** + * Unique identifier for a device. + * + * NB: This identifier is generated at runtime and is not persisted. It cannot + * be used to identify a device across sessions. + * There is in fact no way to identify a device across sessions, which is a + * privacy feature of Ledger devices. + */ export type DeviceId = string; export class DeviceModel { diff --git a/packages/core/src/api/logger-subscriber/service/LoggerSubscriberService.ts b/packages/core/src/api/logger-subscriber/service/LoggerSubscriberService.ts index 829032555..a4a9000eb 100644 --- a/packages/core/src/api/logger-subscriber/service/LoggerSubscriberService.ts +++ b/packages/core/src/api/logger-subscriber/service/LoggerSubscriberService.ts @@ -1,6 +1,12 @@ import { LogLevel } from "@api/logger-subscriber/model/LogLevel"; import { LogSubscriberOptions } from "@api/logger-subscriber/model/LogSubscriberOptions"; +/** + * Logger subscriber service. + * + * Implement this interface and use `LedgerDeviceSdkBuilder.addLogger` to + * receive logs from the SDK. + */ export interface LoggerSubscriberService { log(level: LogLevel, message: string, options: LogSubscriberOptions): void; } diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts index 13b6b3724..646fb37b6 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -11,6 +11,9 @@ import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; export type ConnectUseCaseArgs = { + /** + * UUID of the device obtained through device discovery `StartDiscoveringUseCase` + */ deviceId: DeviceId; }; diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts index 85c2e9bd8..b0a133642 100644 --- a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts @@ -6,7 +6,7 @@ import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; /** - * Starts discovering devices connected via USB HID (and later BLE). + * Starts discovering devices connected via USB HID (BLE not implemented yet). * * For the WebHID implementation, this use-case needs to be called as a result of an user interaction (button "click" event for ex). */ diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.ts index 248785aa3..ce0905387 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.ts @@ -8,7 +8,13 @@ import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; export type SendApduUseCaseArgs = { + /** + * Device session identifier obtained through `DeviceSdk.connect` + */ sessionId: DeviceSessionId; + /** + * APDU to send to the device + */ apdu: Uint8Array; }; diff --git a/packages/core/src/internal/usb/model/DiscoveredDevice.ts b/packages/core/src/internal/usb/model/DiscoveredDevice.ts index 7f908b7c0..5dc6a39a1 100644 --- a/packages/core/src/internal/usb/model/DiscoveredDevice.ts +++ b/packages/core/src/internal/usb/model/DiscoveredDevice.ts @@ -6,6 +6,14 @@ import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; */ export type DiscoveredDevice = { // type: "web-hid", // "node-hid" in the future -> no need as we will only have 1 USB transport implementation running - id: DeviceId; // UUID to map with the associated transport device + + /** + * Unique identifier for the device. + * NB: This identifier is generated at runtime and is not persisted. + * It cannot be used to identify a device across sessions. + * There is in fact no way to identify a device across sessions, which is a + * privacy feature of Ledger devices. + */ + id: DeviceId; deviceModel: InternalDeviceModel; }; From 384a5b3c80d025aa78382fb4a0c009db262d299f Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Wed, 15 May 2024 15:17:47 +0200 Subject: [PATCH 217/253] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(core):=20Fix=20ty?= =?UTF-8?q?po=20in=20test=20description?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/src/api/command/os/GetBatteryStatusCommand.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts index 655328605..f29e7e288 100644 --- a/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts @@ -44,7 +44,7 @@ describe("GetBatteryStatus", () => { }); describe("getApdu", () => { - it("should return the GetBatteryStatus APUD", () => { + it("should return the GetBatteryStatus APDU", () => { expect( command.getApdu(BatteryStatusType.BATTERY_PERCENTAGE).getRawApdu(), ).toStrictEqual(GET_BATTERY_STATUS_APDU_PERCENTAGE); From 44a4a686ec640b72b5750c0ef70098ac8eaf8a98 Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Wed, 15 May 2024 15:18:06 +0200 Subject: [PATCH 218/253] =?UTF-8?q?=F0=9F=94=96=20(core):=20Changeset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/spicy-dogs-sneeze.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/spicy-dogs-sneeze.md diff --git a/.changeset/spicy-dogs-sneeze.md b/.changeset/spicy-dogs-sneeze.md new file mode 100644 index 000000000..b85bf8049 --- /dev/null +++ b/.changeset/spicy-dogs-sneeze.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": patch +--- + +Add TSDoc comments for things exposed through API From f5f2ebe59baf7847221bd2be32d41a10fb98c30e Mon Sep 17 00:00:00 2001 From: jz_ Date: Thu, 23 May 2024 17:33:23 +0200 Subject: [PATCH 219/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Implement=20Close?= =?UTF-8?q?=20App=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/olive-radios-impress.md | 5 +++ packages/core/src/api/command/Command.ts | 17 ++++++++-- .../api/command/os/CloseAppCommand.test.ts | 33 ++++++++++++++++++ .../src/api/command/os/CloseAppCommand.ts | 34 +++++++++++++++++++ 4 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 .changeset/olive-radios-impress.md create mode 100644 packages/core/src/api/command/os/CloseAppCommand.test.ts create mode 100644 packages/core/src/api/command/os/CloseAppCommand.ts diff --git a/.changeset/olive-radios-impress.md b/.changeset/olive-radios-impress.md new file mode 100644 index 000000000..3ed0121ba --- /dev/null +++ b/.changeset/olive-radios-impress.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": minor +--- + +Implement Close App command. diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index 6cbd474f0..16970fee3 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -3,15 +3,26 @@ import { DeviceModelId } from "@api/device/DeviceModel"; import { ApduResponse } from "@api/device-session/ApduResponse"; /** - * Represents a command that can be sent to a device. + * A command that can be sent to a device. + * + * @template T - The type of the response returned by the device. + * @template U - The type of the arguments passed to the command (optional). */ export interface Command { /** - * Returns the APDU to be sent to the device. + * Gets the APDU (Application Protocol Data Unit) for the command. + * + * @param args - The arguments passed to the command (optional). + * @returns The APDU for the command. */ getApdu(args?: U): Apdu; + /** - * Parses the APDU response from the device. + * Parses the response received from the device. + * + * @param apduResponse - The response received from the device. + * @param deviceModelId - The ID of the device model (optional). + * @returns The parsed response. */ parseResponse( apduResponse: ApduResponse, diff --git a/packages/core/src/api/command/os/CloseAppCommand.test.ts b/packages/core/src/api/command/os/CloseAppCommand.test.ts new file mode 100644 index 000000000..5e1bf200c --- /dev/null +++ b/packages/core/src/api/command/os/CloseAppCommand.test.ts @@ -0,0 +1,33 @@ +import { CloseAppCommand } from "@api/command/os/CloseAppCommand"; +import { ApduResponse } from "@api/device-session/ApduResponse"; + +const CLOSE_APP_APDU = new Uint8Array([0xb0, 0xa7, 0x00, 0x00, 0x00]); + +describe("CloseAppCommand", () => { + let closeAppCommand: CloseAppCommand; + + beforeEach(() => { + closeAppCommand = new CloseAppCommand(); + }); + + it("should return the correct APDU", () => { + const apdu = closeAppCommand.getApdu(); + expect(apdu.getRawApdu()).toStrictEqual(CLOSE_APP_APDU); + }); + + it("should not throw error when command is sucessful", () => { + const apduResponse: ApduResponse = new ApduResponse({ + statusCode: new Uint8Array([0x90, 0x00]), + data: new Uint8Array([]), + }); + expect(() => closeAppCommand.parseResponse(apduResponse)).not.toThrow(); + }); + + it("should throw error when command is unsuccessful", () => { + const apduResponse: ApduResponse = new ApduResponse({ + statusCode: new Uint8Array([0x6a, 0x81]), + data: new Uint8Array([]), + }); + expect(() => closeAppCommand.parseResponse(apduResponse)).toThrow(); + }); +}); diff --git a/packages/core/src/api/command/os/CloseAppCommand.ts b/packages/core/src/api/command/os/CloseAppCommand.ts new file mode 100644 index 000000000..89ca6573e --- /dev/null +++ b/packages/core/src/api/command/os/CloseAppCommand.ts @@ -0,0 +1,34 @@ +import { Apdu } from "@api/apdu/model/Apdu"; +import { ApduBuilder, ApduBuilderArgs } from "@api/apdu/utils/ApduBuilder"; +import { ApduParser } from "@api/apdu/utils/ApduParser"; +import { Command } from "@api/command/Command"; +import { InvalidStatusWordError } from "@api/command/Errors"; +import { CommandUtils } from "@api/command/utils/CommandUtils"; +import { ApduResponse } from "@api/device-session/ApduResponse"; + +/** + * The command to close a runnint application on the device. + */ +export class CloseAppCommand implements Command { + getApdu(): Apdu { + const closeAppApduArgs: ApduBuilderArgs = { + cla: 0xb0, + ins: 0xa7, + p1: 0x00, + p2: 0x00, + } as const; + return new ApduBuilder(closeAppApduArgs).build(); + } + + parseResponse(apduResponse: ApduResponse): void { + const parser = new ApduParser(apduResponse); + + if (!CommandUtils.isSuccessResponse(apduResponse)) { + throw new InvalidStatusWordError( + `Unexpected status word: ${parser.encodeToHexaString( + apduResponse.statusCode, + )}`, + ); + } + } +} From 06f2f60bf95f68c8dfb3ca047c076900f2a4c1ec Mon Sep 17 00:00:00 2001 From: jz_ Date: Thu, 23 May 2024 16:32:59 +0200 Subject: [PATCH 220/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Implement=20Open?= =?UTF-8?q?=20Application=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/pink-maps-call.md | 5 +++ .../src/api/command/os/OpenAppCommand.test.ts | 36 +++++++++++++++++++ .../core/src/api/command/os/OpenAppCommand.ts | 36 +++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 .changeset/pink-maps-call.md create mode 100644 packages/core/src/api/command/os/OpenAppCommand.test.ts create mode 100644 packages/core/src/api/command/os/OpenAppCommand.ts diff --git a/.changeset/pink-maps-call.md b/.changeset/pink-maps-call.md new file mode 100644 index 000000000..d659621ae --- /dev/null +++ b/.changeset/pink-maps-call.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": minor +--- + +Implement Open Application command. diff --git a/packages/core/src/api/command/os/OpenAppCommand.test.ts b/packages/core/src/api/command/os/OpenAppCommand.test.ts new file mode 100644 index 000000000..bbf8b718f --- /dev/null +++ b/packages/core/src/api/command/os/OpenAppCommand.test.ts @@ -0,0 +1,36 @@ +import { ApduResponse } from "@api/device-session/ApduResponse"; + +import { OpenAppCommand } from "./OpenAppCommand"; + +describe("OpenAppCommand", () => { + let openAppCommand: OpenAppCommand; + + beforeEach(() => { + openAppCommand = new OpenAppCommand(); + }); + + it("should return the correct APDU for opening an application", () => { + const appName = "MyApp"; + const expectedApdu = Uint8Array.from([ + 0xe0, 0xd8, 0x00, 0x00, 0x05, 0x4d, 0x79, 0x41, 0x70, 0x70, + ]); + const apdu = openAppCommand.getApdu(appName); + expect(apdu.getRawApdu()).toStrictEqual(expectedApdu); + }); + + it("should not throw error when command is successful", () => { + const apduResponse: ApduResponse = new ApduResponse({ + statusCode: new Uint8Array([0x90, 0x00]), + data: new Uint8Array([]), + }); + expect(() => openAppCommand.parseResponse(apduResponse)).not.toThrow(); + }); + + it("should throw error when command is unsuccessful", () => { + const apduResponse: ApduResponse = new ApduResponse({ + statusCode: new Uint8Array([0x6a, 0x81]), + data: new Uint8Array([]), + }); + expect(() => openAppCommand.parseResponse(apduResponse)).toThrow(); + }); +}); diff --git a/packages/core/src/api/command/os/OpenAppCommand.ts b/packages/core/src/api/command/os/OpenAppCommand.ts new file mode 100644 index 000000000..47104caf0 --- /dev/null +++ b/packages/core/src/api/command/os/OpenAppCommand.ts @@ -0,0 +1,36 @@ +import { Apdu } from "@api/apdu/model/Apdu"; +import { ApduBuilder, ApduBuilderArgs } from "@api/apdu/utils/ApduBuilder"; +import { ApduParser } from "@api/apdu/utils/ApduParser"; +import { Command } from "@api/command/Command"; +import { InvalidStatusWordError } from "@api/command/Errors"; +import { CommandUtils } from "@api/command/utils/CommandUtils"; +import { ApduResponse } from "@api/device-session/ApduResponse"; + +/** + * The command to open an application on the device. + */ +export class OpenAppCommand implements Command { + getApdu(appName: string): Apdu { + const openAppApduArgs: ApduBuilderArgs = { + cla: 0xe0, + ins: 0xd8, + p1: 0x00, + p2: 0x00, + } as const; + return new ApduBuilder(openAppApduArgs) + .addAsciiStringToData(appName) + .build(); + } + + parseResponse(apduResponse: ApduResponse): void { + const parser = new ApduParser(apduResponse); + + if (!CommandUtils.isSuccessResponse(apduResponse)) { + throw new InvalidStatusWordError( + `Unexpected status word: ${parser.encodeToHexaString( + apduResponse.statusCode, + )}`, + ); + } + } +} From 1373cc5e7111c60381d267d681fce9db11bb0f68 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 16 May 2024 09:48:23 +0200 Subject: [PATCH 221/253] :sparkles: (core): Unplug connected device remove device session --- .../device-session/model/DeviceSession.ts | 1 + .../service/DefaultDeviceSessionService.ts | 8 +++ .../service/DeviceSessionService.ts | 1 + .../discovery/use-case/ConnectUseCase.ts | 14 ++++- .../internal/usb/transport/UsbHidTransport.ts | 2 + .../usb/transport/WebUsbHidTransport.test.ts | 57 ++++++++++++++++--- .../usb/transport/WebUsbHidTransport.ts | 21 +++++++ 7 files changed, 96 insertions(+), 8 deletions(-) diff --git a/packages/core/src/internal/device-session/model/DeviceSession.ts b/packages/core/src/internal/device-session/model/DeviceSession.ts index 47d0937e0..b49275a45 100644 --- a/packages/core/src/internal/device-session/model/DeviceSession.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.ts @@ -85,6 +85,7 @@ export class DeviceSession { } close() { + this.updateDeviceStatus(DeviceStatus.NOT_CONNECTED); this._deviceState.complete(); } } diff --git a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts index 0b2d07353..1d2eca8fa 100644 --- a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts +++ b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.ts @@ -55,6 +55,14 @@ export class DefaultDeviceSessionService implements DeviceSessionService { return deviceSession.toEither(new DeviceSessionNotFound()); } + getDeviceSessionByDeviceId(deviceId: string) { + const deviceSession = Maybe.fromNullable( + this._sessions.find((s) => s.connectedDevice.id === deviceId), + ); + + return deviceSession.toEither(new DeviceSessionNotFound()); + } + getDeviceSessions() { return this._sessions; } diff --git a/packages/core/src/internal/device-session/service/DeviceSessionService.ts b/packages/core/src/internal/device-session/service/DeviceSessionService.ts index e0abd3bc4..ca486fa5d 100644 --- a/packages/core/src/internal/device-session/service/DeviceSessionService.ts +++ b/packages/core/src/internal/device-session/service/DeviceSessionService.ts @@ -6,6 +6,7 @@ import { DeviceSession } from "@internal/device-session/model/DeviceSession"; export interface DeviceSessionService { addDeviceSession(deviceSession: DeviceSession): DeviceSessionService; getDeviceSessionById(sessionId: string): Either; + getDeviceSessionByDeviceId(deviceId: string): Either; removeDeviceSession(sessionId: string): DeviceSessionService; getDeviceSessions(): DeviceSession[]; } diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts index 646fb37b6..21bb70438 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -9,6 +9,7 @@ import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; +import type { DisconnectHandler } from "@internal/usb/transport/WebUsbHidTransport"; export type ConnectUseCaseArgs = { /** @@ -39,8 +40,19 @@ export class ConnectUseCase { this._logger = loggerFactory("ConnectUseCase"); } + private handleHardwareDisconnect: DisconnectHandler = (deviceId) => { + const deviceSessionOrError = + this._sessionService.getDeviceSessionByDeviceId(deviceId); + deviceSessionOrError.map((deviceSession) => { + this._sessionService.removeDeviceSession(deviceSession.id); + }); + }; + async execute({ deviceId }: ConnectUseCaseArgs): Promise { - const either = await this._usbHidTransport.connect({ deviceId }); + const either = await this._usbHidTransport.connect({ + deviceId, + onDisconnect: this.handleHardwareDisconnect, + }); return either.caseOf({ Left: (error) => { diff --git a/packages/core/src/internal/usb/transport/UsbHidTransport.ts b/packages/core/src/internal/usb/transport/UsbHidTransport.ts index cdebe9a4a..5e62aceae 100644 --- a/packages/core/src/internal/usb/transport/UsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/UsbHidTransport.ts @@ -6,6 +6,7 @@ import { SdkError } from "@api/Error"; import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { ConnectError } from "@internal/usb/model/Errors"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; +import type { DisconnectHandler } from "@internal/usb/transport/WebUsbHidTransport"; /** * Transport interface representing a USB HID communication @@ -25,6 +26,7 @@ export interface UsbHidTransport { */ connect(params: { deviceId: DeviceId; + onDisconnect: DisconnectHandler; }): Promise>; disconnect(params: { diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index 3795fc37d..4bf91357b 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -67,6 +67,7 @@ describe("WebUsbHidTransport", () => { getDevices: mockedGetDevices, requestDevice: mockedRequestDevice, addEventListener: jest.fn(), + ondisconnect: jest.fn(), }, } as unknown as Navigator; }); @@ -238,9 +239,9 @@ describe("WebUsbHidTransport", () => { describe("connect", () => { it("should throw UnknownDeviceError if no internal device", async () => { - const device = { deviceId: "fake" }; + const connectParams = { deviceId: "fake", onDisconnect: jest.fn() }; - const connect = await transport.connect(device); + const connect = await transport.connect(connectParams); expect(connect).toStrictEqual( Left(new UnknownDeviceError(new Error("Unknown device fake"))), @@ -248,7 +249,7 @@ describe("WebUsbHidTransport", () => { }); it("should throw OpeningConnectionError if the device is already opened", async () => { - const device = { deviceId: "fake" }; + const device = { deviceId: "fake", onDisconnect: jest.fn() }; const connect = await transport.connect(device); @@ -271,7 +272,10 @@ describe("WebUsbHidTransport", () => { transport.startDiscovering().subscribe({ next: (discoveredDevice) => { transport - .connect({ deviceId: discoveredDevice.id }) + .connect({ + deviceId: discoveredDevice.id, + onDisconnect: jest.fn(), + }) .then((value) => { expect(value).toStrictEqual( Left(new OpeningConnectionError(new Error(message))), @@ -302,7 +306,10 @@ describe("WebUsbHidTransport", () => { transport.startDiscovering().subscribe({ next: (discoveredDevice) => { transport - .connect({ deviceId: discoveredDevice.id }) + .connect({ + deviceId: discoveredDevice.id, + onDisconnect: jest.fn(), + }) .then((connectedDevice) => { connectedDevice .ifRight((device) => { @@ -331,7 +338,10 @@ describe("WebUsbHidTransport", () => { transport.startDiscovering().subscribe({ next: (discoveredDevice) => { transport - .connect({ deviceId: discoveredDevice.id }) + .connect({ + deviceId: discoveredDevice.id, + onDisconnect: jest.fn(), + }) .then((connectedDevice) => { connectedDevice .ifRight((device) => { @@ -380,7 +390,10 @@ describe("WebUsbHidTransport", () => { transport.startDiscovering().subscribe({ next: (discoveredDevice) => { transport - .connect({ deviceId: discoveredDevice.id }) + .connect({ + deviceId: discoveredDevice.id, + onDisconnect: jest.fn(), + }) .then((connectedDevice) => { connectedDevice .ifRight((device) => { @@ -407,6 +420,36 @@ describe("WebUsbHidTransport", () => { }, }); }); + + it("should call disconnect handler if a connected device is unplugged", (done) => { + // given + const onDisconnect = jest.fn(); + mockedRequestDevice.mockResolvedValueOnce([stubDevice]); + + // when + transport.startDiscovering().subscribe({ + next: (discoveredDevice) => { + transport + .connect({ + deviceId: discoveredDevice.id, + onDisconnect, + }) + .then(() => { + // @ts-expect-error + transport.handleDeviceDisconnectionEvent({ + device: { productId: stubDevice.productId }, + } as Event); + + // then + expect(onDisconnect).toHaveBeenCalled(); + done(); + }) + .catch((error) => { + done(error); + }); + }, + }); + }); }); }); }); diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 020466ec3..3304e0da5 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -35,10 +35,13 @@ type WebHidInternalDevice = { discoveredDevice: DiscoveredDevice; }; +export type DisconnectHandler = (deviceId: DeviceId) => void; + @injectable() export class WebUsbHidTransport implements UsbHidTransport { // Maps uncoupled DiscoveredDevice and WebHID's HIDDevice WebHID private _internalDevicesById: Map; + private _internalDisconnectionHandlersByHidId: Map void>; private _connectionListenersAbortController: AbortController; private _logger: LoggerPublisherService; private _usbHidDeviceConnectionFactory: UsbHidDeviceConnectionFactory; @@ -52,6 +55,7 @@ export class WebUsbHidTransport implements UsbHidTransport { usbHidDeviceConnectionFactory: UsbHidDeviceConnectionFactory, ) { this._internalDevicesById = new Map(); + this._internalDisconnectionHandlersByHidId = new Map(); this._connectionListenersAbortController = new AbortController(); this._logger = loggerServiceFactory("WebUsbHidTransport"); this._usbHidDeviceConnectionFactory = usbHidDeviceConnectionFactory; @@ -267,8 +271,10 @@ export class WebUsbHidTransport implements UsbHidTransport { */ async connect({ deviceId, + onDisconnect, }: { deviceId: DeviceId; + onDisconnect: DisconnectHandler; }): Promise> { this._logger.debug("connect", { data: { deviceId } }); @@ -309,6 +315,10 @@ export class WebUsbHidTransport implements UsbHidTransport { id: deviceId, type: "USB", }); + this._internalDisconnectionHandlersByHidId.set( + internalDevice.hidDevice.productId.toString(), + () => onDisconnect(deviceId), + ); return Right(connectedDevice); } @@ -365,5 +375,16 @@ export class WebUsbHidTransport implements UsbHidTransport { }); } }); + const maybeDisconnectHandler = Maybe.fromNullable( + this._internalDisconnectionHandlersByHidId.get( + hidDevice.productId.toString(), + ), + ); + maybeDisconnectHandler.map((handler) => { + handler(); + this._internalDisconnectionHandlersByHidId.delete( + hidDevice.productId.toString(), + ); + }); }; } From ce87be01c9c501f5e737a9178600db3664c1b886 Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 16 May 2024 09:49:13 +0200 Subject: [PATCH 222/253] :lipstick: (smpl): Display not connected device status --- apps/sample/src/components/Device/StatusText.tsx | 2 ++ packages/core/src/api/device/DeviceStatus.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/sample/src/components/Device/StatusText.tsx b/apps/sample/src/components/Device/StatusText.tsx index 4e983cf30..d95222375 100644 --- a/apps/sample/src/components/Device/StatusText.tsx +++ b/apps/sample/src/components/Device/StatusText.tsx @@ -15,6 +15,8 @@ const getColorFromState = ({ case DeviceStatus.BUSY: case DeviceStatus.LOCKED: return theme.colors.warning.c60; + case DeviceStatus.NOT_CONNECTED: + return theme.colors.error.c60; } }; diff --git a/packages/core/src/api/device/DeviceStatus.ts b/packages/core/src/api/device/DeviceStatus.ts index 99a7eb2fb..556739785 100644 --- a/packages/core/src/api/device/DeviceStatus.ts +++ b/packages/core/src/api/device/DeviceStatus.ts @@ -2,5 +2,5 @@ export enum DeviceStatus { LOCKED = "LOCKED", BUSY = "BUSY", CONNECTED = "CONNECTED", - NOT_CONNECTED = "NOT_CONNECTED", + NOT_CONNECTED = "NOT CONNECTED", } From 43e3372efa2f264677837c6bf1d045ea808b3bcf Mon Sep 17 00:00:00 2001 From: jdabbech-ledger Date: Thu, 16 May 2024 09:53:14 +0200 Subject: [PATCH 223/253] :bookmark: (core): Changeset --- .changeset/serious-clouds-provide.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/serious-clouds-provide.md diff --git a/.changeset/serious-clouds-provide.md b/.changeset/serious-clouds-provide.md new file mode 100644 index 000000000..95e6c5767 --- /dev/null +++ b/.changeset/serious-clouds-provide.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": minor +--- + +Handle unwanted transport disconnection From b262795bc6c32c9442c37565f063cb52ec52c737 Mon Sep 17 00:00:00 2001 From: jz_ Date: Fri, 3 May 2024 11:04:42 +0200 Subject: [PATCH 224/253] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20=20(core):=20Fix?= =?UTF-8?q?=20typos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/src/api/command/os/GetOsVersionCommand.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.ts b/packages/core/src/api/command/os/GetOsVersionCommand.ts index 05cdc3d54..0566e2761 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.ts @@ -1,5 +1,5 @@ import { Apdu } from "@api/apdu/model/Apdu"; -import { ApduBuilder } from "@api/apdu/utils/ApduBuilder"; +import { ApduBuilder, ApduBuilderArgs } from "@api/apdu/utils/ApduBuilder"; import { ApduParser } from "@api/apdu/utils/ApduParser"; import { Command } from "@api/command/Command"; import { InvalidStatusWordError } from "@api/command/Errors"; @@ -64,13 +64,15 @@ export type GetOsVersionResponse = { * Command to get information about the device firmware. */ export class GetOsVersionCommand implements Command { - getApdu = (): Apdu => - new ApduBuilder({ + getApdu(): Apdu { + const getOsVersionApduArgs: ApduBuilderArgs = { cla: 0xe0, ins: 0x01, p1: 0x00, p2: 0x00, - }).build(); + } as const; + return new ApduBuilder(getOsVersionApduArgs).build(); + } parseResponse(responseApdu: ApduResponse, deviceModelId: DeviceModelId) { const parser = new ApduParser(responseApdu); From ddf1654674484e420a5de240033e2c9437061841 Mon Sep 17 00:00:00 2001 From: jz_ Date: Fri, 3 May 2024 15:50:55 +0200 Subject: [PATCH 225/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Add=20polling=20t?= =?UTF-8?q?o=20update=20state?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/device-session/DeviceSessionState.ts | 56 +++++++++++++ .../device-session/model/DeviceSession.ts | 8 ++ .../device-session/model/SessionRefresher.ts | 78 +++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 packages/core/src/internal/device-session/model/SessionRefresher.ts diff --git a/packages/core/src/api/device-session/DeviceSessionState.ts b/packages/core/src/api/device-session/DeviceSessionState.ts index e2cd7caff..f0a325ab6 100644 --- a/packages/core/src/api/device-session/DeviceSessionState.ts +++ b/packages/core/src/api/device-session/DeviceSessionState.ts @@ -6,6 +6,25 @@ export type SessionStateConstructorArgs = { deviceStatus: DeviceStatus; }; +export type ConnectedStateConstructorArgs = Pick< + SessionStateConstructorArgs, + "sessionId" +> & { + batteryStatus?: BatteryStatus; + firmwareVersion?: FirmwareVersion; + currentApp?: string; +}; + +export type BatteryStatus = { + level: number; +}; + +export type FirmwareVersion = { + mcu: string; // Microcontroller Unit version + bootloader: string; // Bootloader version + os: string; // Operating System version +}; + export class DeviceSessionState { public readonly sessionId: DeviceSessionId; public readonly deviceStatus: DeviceStatus; @@ -15,3 +34,40 @@ export class DeviceSessionState { this.deviceStatus = deviceStatus; } } + +export class ConnectedState extends DeviceSessionState { + // private readonly _deviceName: string; // GetDeviceNameResponse +} + +export class ReadyWithoutSecureChannelState extends ConnectedState { + private readonly _batteryStatus: BatteryStatus | null = null; // GetBatteryStatusResponse + private readonly _firmwareVersion: FirmwareVersion | null = null; // GetOsVersionResponse + private readonly _currentApp: string | null = null; // GetAppVersionResponse + // private readonly _deviceName: string; // GetDeviceNameResponse + + constructor({ + sessionId, + currentApp, + batteryStatus, + firmwareVersion, + }: ConnectedStateConstructorArgs) { + super({ sessionId, deviceStatus: DeviceStatus.CONNECTED }); + this._currentApp = currentApp ? currentApp : null; + this._batteryStatus = batteryStatus ? batteryStatus : null; + this._firmwareVersion = firmwareVersion ? firmwareVersion : null; + } + + public get batteryStatus() { + return this._batteryStatus; + } + + public get firmwareVersion() { + return this._firmwareVersion; + } + + public get currentApp() { + return this._currentApp; + } +} + +export class ReadyWithSecureChannelState extends ReadyWithoutSecureChannelState {} diff --git a/packages/core/src/internal/device-session/model/DeviceSession.ts b/packages/core/src/internal/device-session/model/DeviceSession.ts index b49275a45..a0a62a5db 100644 --- a/packages/core/src/internal/device-session/model/DeviceSession.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.ts @@ -7,6 +7,7 @@ import { DeviceModelId } from "@api/device/DeviceModel"; import { DeviceStatus } from "@api/device/DeviceStatus"; import { DeviceSessionState } from "@api/device-session/DeviceSessionState"; import { DeviceSessionId } from "@api/device-session/types"; +import { SeesionRefresher } from "@internal/device-session/model/SessionRefresher"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; export type SessionConstructorArgs = { @@ -21,6 +22,7 @@ export class DeviceSession { private readonly _id: DeviceSessionId; private readonly _connectedDevice: InternalConnectedDevice; private readonly _deviceState: BehaviorSubject; + private readonly _refresher: SeesionRefresher; constructor({ connectedDevice, id = uuidv4() }: SessionConstructorArgs) { this._id = id; @@ -31,6 +33,8 @@ export class DeviceSession { deviceStatus: DeviceStatus.CONNECTED, }), ); + this._refresher = new SeesionRefresher(this, 1000); + this._refresher.start(); } public get id() { @@ -45,6 +49,10 @@ export class DeviceSession { return this._deviceState.asObservable(); } + public setState(state: DeviceSessionState) { + this._deviceState.next(state); + } + private updateDeviceStatus(deviceStatus: DeviceStatus) { const sessionState = this._deviceState.getValue(); this._deviceState.next( diff --git a/packages/core/src/internal/device-session/model/SessionRefresher.ts b/packages/core/src/internal/device-session/model/SessionRefresher.ts new file mode 100644 index 000000000..54d538cec --- /dev/null +++ b/packages/core/src/internal/device-session/model/SessionRefresher.ts @@ -0,0 +1,78 @@ +import { audit, interval, Subscription, switchMap, takeWhile } from "rxjs"; + +import { + GetAppAndVersionCommand, + GetAppAndVersionResponse, +} from "@api/command/os/GetAppAndVersionCommand"; +import { DeviceStatus } from "@api/device/DeviceStatus"; +import { ReadyWithoutSecureChannelState } from "@api/session/SessionDeviceState"; + +import { Session } from "./Session"; + +export const DEVICE_OS_NAME = "BOLOS"; + +export class SeesionRefresher { + private _subscription: Subscription | null = null; + private readonly command: GetAppAndVersionCommand; + + constructor( + private readonly session: Session, + private readonly refreshInterval: number, + ) { + this.command = new GetAppAndVersionCommand(); + } + + start(): void { + this._subscription = this.session.state + .pipe( + audit(() => interval(this.refreshInterval)), + takeWhile((state) => state.deviceStatus === DeviceStatus.CONNECTED), + switchMap(() => { + const rawApdu = this.command.getApdu().getRawApdu(); + return this.session.connectedDevice.sendApdu(rawApdu); + }), + ) + .subscribe({ + next: (response) => { + response + .ifRight((data) => { + const { name }: GetAppAndVersionResponse = + this.command.parseResponse(data); + if (name === DEVICE_OS_NAME) { + // await this.session.connectedDevice.sendApdu( + // new GetOsVersionCommand().getApdu().getRawApdu(), + // ); + } else { + this.session.setState( + new ReadyWithoutSecureChannelState({ + sessionId: this.session.id, + currentApp: name, + }), + ); + } + }) + .ifLeft(() => { + console.log("Error in response"); + }); + }, + error: (error) => { + this.restart(); + console.error("Error", error); + }, + complete: () => { + console.log("Complete"); + }, + }); + } + + stop(): void { + if (this._subscription) { + this._subscription.unsubscribe(); + } + } + + restart(): void { + this.stop(); + this.start(); + } +} From 8bef03ffe3348b5f660ea3f180bf6ece93dd3f92 Mon Sep 17 00:00:00 2001 From: jz_ Date: Fri, 3 May 2024 16:15:43 +0200 Subject: [PATCH 226/253] =?UTF-8?q?=F0=9F=93=9D=20(core):=20Add=20changese?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/fresh-eels-sip.md | 5 +++ .../api/device-session/DeviceSessionState.ts | 12 +++++-- .../device-session/model/DeviceSession.ts | 16 +++++---- .../device-session/model/SessionRefresher.ts | 36 ++++++++++--------- 4 files changed, 44 insertions(+), 25 deletions(-) create mode 100644 .changeset/fresh-eels-sip.md diff --git a/.changeset/fresh-eels-sip.md b/.changeset/fresh-eels-sip.md new file mode 100644 index 000000000..72fe29a23 --- /dev/null +++ b/.changeset/fresh-eels-sip.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": minor +--- + +Polling on conncected device to get device status. diff --git a/packages/core/src/api/device-session/DeviceSessionState.ts b/packages/core/src/api/device-session/DeviceSessionState.ts index f0a325ab6..03a807f25 100644 --- a/packages/core/src/api/device-session/DeviceSessionState.ts +++ b/packages/core/src/api/device-session/DeviceSessionState.ts @@ -9,6 +9,11 @@ export type SessionStateConstructorArgs = { export type ConnectedStateConstructorArgs = Pick< SessionStateConstructorArgs, "sessionId" +>; // & {}; + +export type ReadyWithoutSecureChannelStateConstructorArgs = Pick< + ConnectedStateConstructorArgs, + "sessionId" > & { batteryStatus?: BatteryStatus; firmwareVersion?: FirmwareVersion; @@ -37,6 +42,9 @@ export class DeviceSessionState { export class ConnectedState extends DeviceSessionState { // private readonly _deviceName: string; // GetDeviceNameResponse + constructor({ sessionId }: ConnectedStateConstructorArgs) { + super({ sessionId, deviceStatus: DeviceStatus.CONNECTED }); + } } export class ReadyWithoutSecureChannelState extends ConnectedState { @@ -50,8 +58,8 @@ export class ReadyWithoutSecureChannelState extends ConnectedState { currentApp, batteryStatus, firmwareVersion, - }: ConnectedStateConstructorArgs) { - super({ sessionId, deviceStatus: DeviceStatus.CONNECTED }); + }: ReadyWithoutSecureChannelStateConstructorArgs) { + super({ sessionId }); this._currentApp = currentApp ? currentApp : null; this._batteryStatus = batteryStatus ? batteryStatus : null; this._firmwareVersion = firmwareVersion ? firmwareVersion : null; diff --git a/packages/core/src/internal/device-session/model/DeviceSession.ts b/packages/core/src/internal/device-session/model/DeviceSession.ts index a0a62a5db..708310a94 100644 --- a/packages/core/src/internal/device-session/model/DeviceSession.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.ts @@ -1,3 +1,4 @@ +import { Left, Right } from "purify-ts"; import { BehaviorSubject } from "rxjs"; import { v4 as uuidv4 } from "uuid"; @@ -68,13 +69,14 @@ export class DeviceSession { const errorOrResponse = await this._connectedDevice.sendApdu(rawApdu); - return errorOrResponse.map((response) => { - this.updateDeviceStatus( - CommandUtils.isLockedDeviceResponse(response) - ? DeviceStatus.LOCKED - : DeviceStatus.CONNECTED, - ); - return response; + return errorOrResponse.chain((response) => { + if (CommandUtils.isLockedDeviceResponse(response)) { + this.updateDeviceStatus(DeviceStatus.LOCKED); + return Left(new Error("Device is locked")); + } else { + this.updateDeviceStatus(DeviceStatus.CONNECTED); + return Right(response); + } }); } diff --git a/packages/core/src/internal/device-session/model/SessionRefresher.ts b/packages/core/src/internal/device-session/model/SessionRefresher.ts index 54d538cec..e70785975 100644 --- a/packages/core/src/internal/device-session/model/SessionRefresher.ts +++ b/packages/core/src/internal/device-session/model/SessionRefresher.ts @@ -1,4 +1,4 @@ -import { audit, interval, Subscription, switchMap, takeWhile } from "rxjs"; +import { audit, interval, skipWhile, Subscription, switchMap } from "rxjs"; import { GetAppAndVersionCommand, @@ -26,29 +26,33 @@ export class SeesionRefresher { this._subscription = this.session.state .pipe( audit(() => interval(this.refreshInterval)), - takeWhile((state) => state.deviceStatus === DeviceStatus.CONNECTED), + skipWhile((state) => state.deviceStatus === DeviceStatus.BUSY), switchMap(() => { const rawApdu = this.command.getApdu().getRawApdu(); - return this.session.connectedDevice.sendApdu(rawApdu); + return this.session.sendApdu(rawApdu); }), ) .subscribe({ next: (response) => { response .ifRight((data) => { - const { name }: GetAppAndVersionResponse = - this.command.parseResponse(data); - if (name === DEVICE_OS_NAME) { - // await this.session.connectedDevice.sendApdu( - // new GetOsVersionCommand().getApdu().getRawApdu(), - // ); - } else { - this.session.setState( - new ReadyWithoutSecureChannelState({ - sessionId: this.session.id, - currentApp: name, - }), - ); + try { + const { name }: GetAppAndVersionResponse = + this.command.parseResponse(data); + if (name === DEVICE_OS_NAME) { + // await this.session.connectedDevice.sendApdu( + // new GetOsVersionCommand().getApdu().getRawApdu(), + // ); + } else { + this.session.setState( + new ReadyWithoutSecureChannelState({ + sessionId: this.session.id, + currentApp: name, + }), + ); + } + } catch (error) { + console.error("Error in response", error); } }) .ifLeft(() => { From fa11c16630f48b5bb906209eda14ef57c5f79a36 Mon Sep 17 00:00:00 2001 From: jz_ Date: Mon, 13 May 2024 17:02:55 +0200 Subject: [PATCH 227/253] =?UTF-8?q?=F0=9F=8E=A8=20(core):=20Feedbacks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/fresh-eels-sip.md | 2 +- .../api/command/os/GetBatteryStatusCommand.ts | 2 +- .../use-case/SendCommandUseCase.test.ts | 7 +- .../api/device-session/DeviceSessionState.ts | 162 +++++++++++------- packages/core/src/api/index.ts | 2 +- .../device-model/model/DeviceModel.ts | 2 +- .../model/DeviceSession.stub.ts | 15 +- .../device-session/model/DeviceSession.ts | 55 +++--- .../model/DeviceSessionRefresher.test.ts | 100 +++++++++++ .../model/DeviceSessionRefresher.ts | 133 ++++++++++++++ .../internal/device-session/model/Errors.ts | 10 ++ .../device-session/model/SessionRefresher.ts | 82 --------- .../service/DefaultApduSenderService.ts | 1 - .../DefaultDeviceSessionService.test.ts | 9 +- .../GetDeviceSessionStateUseCase.test.ts | 6 +- .../discovery/use-case/ConnectUseCase.ts | 7 +- .../use-case/DisconnectUseCase.test.ts | 13 +- .../send/use-case/SendApduUseCase.test.ts | 7 +- .../GetConnectedDeviceUseCase.test.ts | 10 +- 19 files changed, 429 insertions(+), 196 deletions(-) create mode 100644 packages/core/src/internal/device-session/model/DeviceSessionRefresher.test.ts create mode 100644 packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts delete mode 100644 packages/core/src/internal/device-session/model/SessionRefresher.ts diff --git a/.changeset/fresh-eels-sip.md b/.changeset/fresh-eels-sip.md index 72fe29a23..98d83ee0b 100644 --- a/.changeset/fresh-eels-sip.md +++ b/.changeset/fresh-eels-sip.md @@ -2,4 +2,4 @@ "@ledgerhq/device-sdk-core": minor --- -Polling on conncected device to get device status. +Polling on connected device to get device status. diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts index 71e8b3e17..c9f0462e3 100644 --- a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts @@ -53,7 +53,7 @@ enum FlagMasks { ISSUE_TEMPERATURE = 0x00000020, } -type BatteryStatusFlags = { +export type BatteryStatusFlags = { charging: ChargingMode; issueCharging: boolean; issueTemperature: boolean; diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts index 74c2441f6..713932625 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts @@ -7,10 +7,7 @@ import { DeviceSessionService } from "@internal/device-session/service/DeviceSes import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { - SendCommandUseCase, - // SendCommandUseCaseArgs, -} from "./SendCommandUseCase"; +import { SendCommandUseCase } from "./SendCommandUseCase"; let logger: LoggerPublisherService; let sessionService: DeviceSessionService; @@ -32,7 +29,7 @@ describe("SendCommandUseCase", () => { }); it("should send a command to a connected device", async () => { - const deviceSession = deviceSessionStubBuilder(); + const deviceSession = deviceSessionStubBuilder({}, () => logger); sessionService.addDeviceSession(deviceSession); const useCase = new SendCommandUseCase(sessionService, () => logger); diff --git a/packages/core/src/api/device-session/DeviceSessionState.ts b/packages/core/src/api/device-session/DeviceSessionState.ts index 03a807f25..8e67e1c73 100644 --- a/packages/core/src/api/device-session/DeviceSessionState.ts +++ b/packages/core/src/api/device-session/DeviceSessionState.ts @@ -1,81 +1,115 @@ +import { BatteryStatusFlags } from "@api/command/os/GetBatteryStatusCommand"; import { DeviceStatus } from "@api/device/DeviceStatus"; -import { DeviceSessionId } from "@api/device-session/types"; - -export type SessionStateConstructorArgs = { - sessionId: DeviceSessionId; - deviceStatus: DeviceStatus; -}; - -export type ConnectedStateConstructorArgs = Pick< - SessionStateConstructorArgs, - "sessionId" ->; // & {}; - -export type ReadyWithoutSecureChannelStateConstructorArgs = Pick< - ConnectedStateConstructorArgs, - "sessionId" -> & { - batteryStatus?: BatteryStatus; - firmwareVersion?: FirmwareVersion; - currentApp?: string; -}; +/** + * The battery status of a device. + */ export type BatteryStatus = { level: number; + voltage: number; + temperature: number; + current: number; + status: BatteryStatusFlags; }; +/** + * The firmware version of a device. + */ export type FirmwareVersion = { - mcu: string; // Microcontroller Unit version - bootloader: string; // Bootloader version - os: string; // Operating System version -}; + /** + * Microcontroller Unit version + */ + mcu: string; -export class DeviceSessionState { - public readonly sessionId: DeviceSessionId; - public readonly deviceStatus: DeviceStatus; + /** + * Bootloader version + */ + bootloader: string; - constructor({ sessionId, deviceStatus }: SessionStateConstructorArgs) { - this.sessionId = sessionId; - this.deviceStatus = deviceStatus; - } -} + /** + * Operating System version + */ + os: string; +}; -export class ConnectedState extends DeviceSessionState { - // private readonly _deviceName: string; // GetDeviceNameResponse - constructor({ sessionId }: ConnectedStateConstructorArgs) { - super({ sessionId, deviceStatus: DeviceStatus.CONNECTED }); - } +/** + * The state types of a device session. + */ +export enum DeviceSessionStateType { + Connected, + ReadyWithoutSecureChannel, + ReadyWithSecureChannel, } -export class ReadyWithoutSecureChannelState extends ConnectedState { - private readonly _batteryStatus: BatteryStatus | null = null; // GetBatteryStatusResponse - private readonly _firmwareVersion: FirmwareVersion | null = null; // GetOsVersionResponse - private readonly _currentApp: string | null = null; // GetAppVersionResponse - // private readonly _deviceName: string; // GetDeviceNameResponse +type DeviceSessionBaseState = { + readonly sessionStateType: DeviceSessionStateType; - constructor({ - sessionId, - currentApp, - batteryStatus, - firmwareVersion, - }: ReadyWithoutSecureChannelStateConstructorArgs) { - super({ sessionId }); - this._currentApp = currentApp ? currentApp : null; - this._batteryStatus = batteryStatus ? batteryStatus : null; - this._firmwareVersion = firmwareVersion ? firmwareVersion : null; - } + /** + * The status of the device. + */ + deviceStatus: DeviceStatus; + + /** + * The name of the device. + */ + deviceName?: string; +}; - public get batteryStatus() { - return this._batteryStatus; - } +type DeviceSessionReadyState = { + /** + * The battery status of the device. + * TODO: This should not be optional, but it is not in the current implementation. + */ + batteryStatus?: BatteryStatus; - public get firmwareVersion() { - return this._firmwareVersion; - } + /** + * The firmware version of the device. + * TODO: This should not be optional, but it is not in the current implementation. + */ + firmwareVersion?: FirmwareVersion; - public get currentApp() { - return this._currentApp; - } -} + /** + * The current application running on the device. + */ + currentApp: string; +}; + +/** + * The state of a connected device session. + */ +export type ConnectedState = DeviceSessionBaseState & { + /** + * The type of the device session state. + */ + readonly sessionStateType: DeviceSessionStateType.Connected; +}; + +/** + * The state of a device session when it is ready without a secure channel. + */ +export type ReadyWithoutSecureChannelState = DeviceSessionBaseState & + DeviceSessionReadyState & { + /** + * The type of the device session state. + */ + readonly sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel; + }; + +/** + * The state of a device session when it is ready with a secure channel. + */ +export type ReadyWithSecureChannelState = DeviceSessionBaseState & + DeviceSessionReadyState & { + /** + * The type of the device session state. + */ + readonly sessionStateType: DeviceSessionStateType.ReadyWithSecureChannel; + }; -export class ReadyWithSecureChannelState extends ReadyWithoutSecureChannelState {} +/** + * The state of a device session. + */ +export type DeviceSessionState = + | ConnectedState + | ReadyWithoutSecureChannelState + | ReadyWithSecureChannelState; diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 89cd2ca28..1931c8add 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -9,4 +9,4 @@ export { LogLevel } from "./logger-subscriber/model/LogLevel"; export { ConsoleLogger } from "./logger-subscriber/service/ConsoleLogger"; export * from "./types"; export { ConnectedDevice } from "./usb/model/ConnectedDevice"; -export { DeviceSessionState } from "@api/device-session/DeviceSessionState"; +export { type DeviceSessionState } from "@api/device-session/DeviceSessionState"; diff --git a/packages/core/src/internal/device-model/model/DeviceModel.ts b/packages/core/src/internal/device-model/model/DeviceModel.ts index 1b8f6c8b5..96dc07cc0 100644 --- a/packages/core/src/internal/device-model/model/DeviceModel.ts +++ b/packages/core/src/internal/device-model/model/DeviceModel.ts @@ -3,7 +3,7 @@ import semver from "semver"; import { DeviceModelId } from "@api/device/DeviceModel"; /** - * Represents the info of a device model + * The info of a device model */ export class InternalDeviceModel { id: DeviceModelId; diff --git a/packages/core/src/internal/device-session/model/DeviceSession.stub.ts b/packages/core/src/internal/device-session/model/DeviceSession.stub.ts index a4f9dcf76..bc9f111a9 100644 --- a/packages/core/src/internal/device-session/model/DeviceSession.stub.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.stub.ts @@ -2,13 +2,18 @@ import { DeviceSession, SessionConstructorArgs, } from "@internal/device-session/model/DeviceSession"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { connectedDeviceStubBuilder } from "@internal/usb/model/InternalConnectedDevice.stub"; export const deviceSessionStubBuilder = ( props: Partial = {}, + loggerFactory: (tag: string) => LoggerPublisherService, ) => - new DeviceSession({ - connectedDevice: connectedDeviceStubBuilder(), - id: "fakeSessionId", - ...props, - }); + new DeviceSession( + { + connectedDevice: connectedDeviceStubBuilder(), + id: "fakeSessionId", + ...props, + }, + loggerFactory, + ); diff --git a/packages/core/src/internal/device-session/model/DeviceSession.ts b/packages/core/src/internal/device-session/model/DeviceSession.ts index 708310a94..08ed98eda 100644 --- a/packages/core/src/internal/device-session/model/DeviceSession.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.ts @@ -1,4 +1,4 @@ -import { Left, Right } from "purify-ts"; +import { inject } from "inversify"; import { BehaviorSubject } from "rxjs"; import { v4 as uuidv4 } from "uuid"; @@ -6,11 +6,17 @@ import { Command } from "@api/command/Command"; import { CommandUtils } from "@api/command/utils/CommandUtils"; import { DeviceModelId } from "@api/device/DeviceModel"; import { DeviceStatus } from "@api/device/DeviceStatus"; -import { DeviceSessionState } from "@api/device-session/DeviceSessionState"; +import { + DeviceSessionState, + DeviceSessionStateType, +} from "@api/device-session/DeviceSessionState"; import { DeviceSessionId } from "@api/device-session/types"; -import { SeesionRefresher } from "@internal/device-session/model/SessionRefresher"; +import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; +import { DeviceSessionRefresher } from "./DeviceSessionRefresher"; + export type SessionConstructorArgs = { connectedDevice: InternalConnectedDevice; id?: DeviceSessionId; @@ -23,19 +29,29 @@ export class DeviceSession { private readonly _id: DeviceSessionId; private readonly _connectedDevice: InternalConnectedDevice; private readonly _deviceState: BehaviorSubject; - private readonly _refresher: SeesionRefresher; + private readonly _refresher: DeviceSessionRefresher; - constructor({ connectedDevice, id = uuidv4() }: SessionConstructorArgs) { + constructor( + { connectedDevice, id = uuidv4() }: SessionConstructorArgs, + @inject(loggerTypes.LoggerPublisherServiceFactory) + loggerModuleFactory: (tag: string) => LoggerPublisherService, + ) { this._id = id; this._connectedDevice = connectedDevice; - this._deviceState = new BehaviorSubject( - new DeviceSessionState({ - sessionId: this._id, + this._deviceState = new BehaviorSubject({ + sessionStateType: DeviceSessionStateType.Connected, + deviceStatus: DeviceStatus.CONNECTED, + }); + this._refresher = new DeviceSessionRefresher( + { + refreshInterval: 1000, deviceStatus: DeviceStatus.CONNECTED, - }), + sendApduFn: (rawApdu: Uint8Array) => this.sendApdu(rawApdu), + updateStateFn: (state: DeviceSessionState) => + this.setDeviceSessionState(state), + }, + loggerModuleFactory("device-session-refresher"), ); - this._refresher = new SeesionRefresher(this, 1000); - this._refresher.start(); } public get id() { @@ -50,18 +66,17 @@ export class DeviceSession { return this._deviceState.asObservable(); } - public setState(state: DeviceSessionState) { + public setDeviceSessionState(state: DeviceSessionState) { this._deviceState.next(state); } private updateDeviceStatus(deviceStatus: DeviceStatus) { const sessionState = this._deviceState.getValue(); - this._deviceState.next( - new DeviceSessionState({ - ...sessionState, - deviceStatus, - }), - ); + this._refresher.setDeviceStatus(deviceStatus); + this._deviceState.next({ + ...sessionState, + deviceStatus, + }); } async sendApdu(rawApdu: Uint8Array) { @@ -69,13 +84,11 @@ export class DeviceSession { const errorOrResponse = await this._connectedDevice.sendApdu(rawApdu); - return errorOrResponse.chain((response) => { + return errorOrResponse.ifRight((response) => { if (CommandUtils.isLockedDeviceResponse(response)) { this.updateDeviceStatus(DeviceStatus.LOCKED); - return Left(new Error("Device is locked")); } else { this.updateDeviceStatus(DeviceStatus.CONNECTED); - return Right(response); } }); } diff --git a/packages/core/src/internal/device-session/model/DeviceSessionRefresher.test.ts b/packages/core/src/internal/device-session/model/DeviceSessionRefresher.test.ts new file mode 100644 index 000000000..4564e475c --- /dev/null +++ b/packages/core/src/internal/device-session/model/DeviceSessionRefresher.test.ts @@ -0,0 +1,100 @@ +import { Left, Right } from "purify-ts"; + +import { + GetAppAndVersionCommand, + GetAppAndVersionResponse, +} from "@api/command/os/GetAppAndVersionCommand"; +import { ApduResponse, DeviceStatus } from "@api/index"; +import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; +import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +import { DeviceSessionRefresher } from "./DeviceSessionRefresher"; + +const mockSendApduFn = jest.fn().mockResolvedValue(Right({} as ApduResponse)); +const mockUpdateStateFn = jest.fn().mockImplementation(() => void 0); + +jest.useFakeTimers(); + +describe("DeviceSessionRefresher", () => { + let deviceSessionRefresher: DeviceSessionRefresher; + let logger: LoggerPublisherService; + + beforeEach(() => { + jest + .spyOn(GetAppAndVersionCommand.prototype, "parseResponse") + .mockReturnValueOnce({ + name: "testAppName", + } as GetAppAndVersionResponse); + logger = new DefaultLoggerPublisherService( + [], + "DeviceSessionRefresherTest", + ); + deviceSessionRefresher = new DeviceSessionRefresher( + { + refreshInterval: 1000, + deviceStatus: DeviceStatus.CONNECTED, + sendApduFn: mockSendApduFn, + updateStateFn: mockUpdateStateFn, + }, + logger, + ); + }); + + afterEach(() => { + deviceSessionRefresher.stop(); + jest.clearAllMocks(); + }); + + it("should poll by calling sendApduFn", () => { + jest.advanceTimersByTime(1000); + expect(mockSendApduFn).toHaveBeenCalledTimes(1); + + jest.advanceTimersByTime(1000); + expect(mockSendApduFn).toHaveBeenCalledTimes(2); + }); + + it("should not poll when device is busy", () => { + deviceSessionRefresher.setDeviceStatus(DeviceStatus.BUSY); + + jest.advanceTimersByTime(1000); + + expect(mockSendApduFn).not.toHaveBeenCalled(); + }); + + it("should not poll when device is disconnected", () => { + deviceSessionRefresher.setDeviceStatus(DeviceStatus.NOT_CONNECTED); + + jest.advanceTimersByTime(1000); + + expect(mockSendApduFn).not.toHaveBeenCalled(); + }); + + it("should update device session state by calling updateStateFn", async () => { + jest.advanceTimersByTime(1000); + + expect(await mockSendApduFn()).toEqual(Right({})); + expect(mockUpdateStateFn).toHaveBeenCalled(); + }); + + it("should not update device session state with failed polling response", async () => { + mockSendApduFn.mockResolvedValueOnce(Left("error")); + const spy = jest.spyOn(logger, "error"); + + jest.advanceTimersByTime(1000); + await mockSendApduFn(); + + expect(mockUpdateStateFn).not.toHaveBeenCalled(); + expect(spy).toHaveBeenCalled(); + }); + + it("should stop the refresher when device is disconnected", () => { + const spy = jest.spyOn(deviceSessionRefresher, "stop"); + deviceSessionRefresher.setDeviceStatus(DeviceStatus.NOT_CONNECTED); + expect(spy).toHaveBeenCalledTimes(1); + }); + + it("should not throw error if stop is called on a stopped refresher", () => { + deviceSessionRefresher.stop(); + expect(() => deviceSessionRefresher.stop()).not.toThrow(); + }); +}); diff --git a/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts b/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts new file mode 100644 index 000000000..58147a971 --- /dev/null +++ b/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts @@ -0,0 +1,133 @@ +import { injectable } from "inversify"; +import { Either } from "purify-ts"; +import { filter, interval, map, Subscription, switchMap } from "rxjs"; + +import { + GetAppAndVersionCommand, + GetAppAndVersionResponse, +} from "@api/command/os/GetAppAndVersionCommand"; +import { + DeviceSessionState, + DeviceSessionStateType, +} from "@api/device-session/DeviceSessionState"; +import { SdkError } from "@api/Error"; +import { ApduResponse, DeviceStatus } from "@api/index"; +import { type LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; + +import { DeviceSessionRefresherError } from "./Errors"; + +/** + * The arguments for the DeviceSessionRefresher. + */ +export type DeviceSessionRefresherArgs = { + /** + * The refresh interval in milliseconds. + */ + refreshInterval: number; + + /** + * The current device status when the refresher is created. + */ + deviceStatus: Exclude; + + /** + * The function used to send APDU commands to the device. + */ + sendApduFn: (rawApdu: Uint8Array) => Promise>; + + /** + * Callback that updates the state of the device session with + * polling response. + * @param state - The new state to update to. + */ + updateStateFn(state: DeviceSessionState): void; +}; + +/** + * The session refresher that periodically sends a command to refresh the session. + */ +@injectable() +export class DeviceSessionRefresher { + private readonly _logger: LoggerPublisherService; + private readonly _getAppAndVersionCommand = new GetAppAndVersionCommand(); + private _deviceStatus: DeviceStatus; + private _subscription: Subscription; + + constructor( + { + refreshInterval, + deviceStatus, + sendApduFn, + updateStateFn, + }: DeviceSessionRefresherArgs, + logger: LoggerPublisherService, + ) { + this._deviceStatus = deviceStatus; + this._logger = logger; + this._subscription = interval(refreshInterval) + .pipe( + filter( + () => + ![DeviceStatus.BUSY, DeviceStatus.NOT_CONNECTED].includes( + this._deviceStatus, + ), + ), + switchMap(() => { + const rawApdu = this._getAppAndVersionCommand.getApdu().getRawApdu(); + return sendApduFn(rawApdu); + }), + map((resp) => + resp.caseOf({ + Left: (error) => { + this._logger.error("Error in sending APDU when polling", { + data: { error }, + }); + throw error; + }, + Right: (data: ApduResponse) => { + return this._getAppAndVersionCommand.parseResponse(data); + }, + }), + ), + ) + .subscribe({ + next: (parsedResponse: GetAppAndVersionResponse) => { + // batteryStatus and firmwareVersion are not available in the polling response. + updateStateFn({ + sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel, + deviceStatus: this._deviceStatus, + currentApp: parsedResponse.name, + }); + }, + error: (error: Error) => { + const pollingError = new DeviceSessionRefresherError(error); + this._logger.error("Error in updating state when polling", { + data: { error: pollingError }, + }); + }, + }); + } + + /** + * Maintain a device status to prevent sending APDU when the device is busy. + * + * @param {DeviceStatus} deviceStatus - The new device status. + */ + setDeviceStatus(deviceStatus: DeviceStatus) { + if (deviceStatus === DeviceStatus.NOT_CONNECTED) { + this.stop(); + } + this._deviceStatus = deviceStatus; + } + + /** + * Stops the session refresher. + * The refresher will no longer send commands to refresh the session. + */ + stop() { + if (!this._subscription || this._subscription.closed) { + return; + } + this._subscription.unsubscribe(); + } +} diff --git a/packages/core/src/internal/device-session/model/Errors.ts b/packages/core/src/internal/device-session/model/Errors.ts index 835ac143c..651ec412d 100644 --- a/packages/core/src/internal/device-session/model/Errors.ts +++ b/packages/core/src/internal/device-session/model/Errors.ts @@ -36,3 +36,13 @@ export class DeviceSessionNotFound implements SdkError { this.originalError = originalError ?? new Error("Device session not found"); } } + +export class DeviceSessionRefresherError implements SdkError { + readonly _tag = "DeviceSessionRefresherError"; + originalError?: Error; + + constructor(originalError?: Error) { + this.originalError = + originalError ?? new Error("Device session refresher error"); + } +} diff --git a/packages/core/src/internal/device-session/model/SessionRefresher.ts b/packages/core/src/internal/device-session/model/SessionRefresher.ts deleted file mode 100644 index e70785975..000000000 --- a/packages/core/src/internal/device-session/model/SessionRefresher.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { audit, interval, skipWhile, Subscription, switchMap } from "rxjs"; - -import { - GetAppAndVersionCommand, - GetAppAndVersionResponse, -} from "@api/command/os/GetAppAndVersionCommand"; -import { DeviceStatus } from "@api/device/DeviceStatus"; -import { ReadyWithoutSecureChannelState } from "@api/session/SessionDeviceState"; - -import { Session } from "./Session"; - -export const DEVICE_OS_NAME = "BOLOS"; - -export class SeesionRefresher { - private _subscription: Subscription | null = null; - private readonly command: GetAppAndVersionCommand; - - constructor( - private readonly session: Session, - private readonly refreshInterval: number, - ) { - this.command = new GetAppAndVersionCommand(); - } - - start(): void { - this._subscription = this.session.state - .pipe( - audit(() => interval(this.refreshInterval)), - skipWhile((state) => state.deviceStatus === DeviceStatus.BUSY), - switchMap(() => { - const rawApdu = this.command.getApdu().getRawApdu(); - return this.session.sendApdu(rawApdu); - }), - ) - .subscribe({ - next: (response) => { - response - .ifRight((data) => { - try { - const { name }: GetAppAndVersionResponse = - this.command.parseResponse(data); - if (name === DEVICE_OS_NAME) { - // await this.session.connectedDevice.sendApdu( - // new GetOsVersionCommand().getApdu().getRawApdu(), - // ); - } else { - this.session.setState( - new ReadyWithoutSecureChannelState({ - sessionId: this.session.id, - currentApp: name, - }), - ); - } - } catch (error) { - console.error("Error in response", error); - } - }) - .ifLeft(() => { - console.log("Error in response"); - }); - }, - error: (error) => { - this.restart(); - console.error("Error", error); - }, - complete: () => { - console.log("Complete"); - }, - }); - } - - stop(): void { - if (this._subscription) { - this._subscription.unsubscribe(); - } - } - - restart(): void { - this.stop(); - this.start(); - } -} diff --git a/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts index 959fd55cc..b9e3a68b8 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduSenderService.ts @@ -54,7 +54,6 @@ export class DefaultApduSenderService implements ApduSenderService { channel = Maybe.zero(), padding = false, }: DefaultApduSenderServiceConstructorArgs, - @inject(loggerTypes.LoggerPublisherServiceFactory) loggerServiceFactory: (tag: string) => LoggerPublisherService, ) { diff --git a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts index 72e00258b..d3b1b380d 100644 --- a/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts +++ b/packages/core/src/internal/device-session/service/DefaultDeviceSessionService.test.ts @@ -15,11 +15,14 @@ let deviceSession: DeviceSession; describe("DefaultDeviceSessionService", () => { beforeEach(() => { jest.restoreAllMocks(); - deviceSession = new DeviceSession({ - connectedDevice: connectedDeviceStubBuilder(), - }); loggerService = new DefaultLoggerPublisherService([], "deviceSession"); sessionService = new DefaultDeviceSessionService(() => loggerService); + deviceSession = new DeviceSession( + { + connectedDevice: connectedDeviceStubBuilder(), + }, + () => loggerService, + ); }); it("should have an empty sessions list", () => { diff --git a/packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.ts b/packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.ts index 54cb73aea..bbaa1423e 100644 --- a/packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.ts +++ b/packages/core/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.ts @@ -19,9 +19,13 @@ describe("GetDeviceSessionStateUseCase", () => { ); sessionService = new DefaultDeviceSessionService(() => logger); }); + it("should retrieve deviceSession device state", () => { // given - const deviceSession = deviceSessionStubBuilder({ id: fakeSessionId }); + const deviceSession = deviceSessionStubBuilder( + { id: fakeSessionId }, + () => logger, + ); sessionService.addDeviceSession(deviceSession); const useCase = new GetDeviceSessionStateUseCase( sessionService, diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts index 21bb70438..6f7a0d175 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -25,6 +25,7 @@ export type ConnectUseCaseArgs = { export class ConnectUseCase { private readonly _usbHidTransport: UsbHidTransport; private readonly _sessionService: DeviceSessionService; + private readonly _loggerFactory: (tag: string) => LoggerPublisherService; private readonly _logger: LoggerPublisherService; constructor( @@ -37,6 +38,7 @@ export class ConnectUseCase { ) { this._sessionService = sessionService; this._usbHidTransport = usbHidTransport; + this._loggerFactory = loggerFactory; this._logger = loggerFactory("ConnectUseCase"); } @@ -62,7 +64,10 @@ export class ConnectUseCase { throw error; }, Right: (connectedDevice) => { - const deviceSession = new DeviceSession({ connectedDevice }); + const deviceSession = new DeviceSession( + { connectedDevice }, + this._loggerFactory, + ); this._sessionService.addDeviceSession(deviceSession); return deviceSession.id; }, diff --git a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts index 6b7c1ccad..42e3aceda 100644 --- a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.test.ts @@ -35,10 +35,13 @@ describe("DisconnectUseCase", () => { it("should disconnect from a device", async () => { // Given const connectedDevice = connectedDeviceStubBuilder(); - const deviceSession = deviceSessionStubBuilder({ - id: sessionId, - connectedDevice, - }); + const deviceSession = deviceSessionStubBuilder( + { + id: sessionId, + connectedDevice, + }, + loggerFactory, + ); jest .spyOn(sessionService, "getDeviceSessionById") .mockImplementation(() => Right(deviceSession)); @@ -84,7 +87,7 @@ describe("DisconnectUseCase", () => { jest .spyOn(sessionService, "getDeviceSessionById") .mockImplementation(() => - Right(deviceSessionStubBuilder({ id: sessionId })), + Right(deviceSessionStubBuilder({ id: sessionId }, loggerFactory)), ); jest .spyOn(usbHidTransport, "disconnect") diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts index cc194127f..b819fb50e 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.test.ts @@ -24,7 +24,7 @@ describe("SendApduUseCase", () => { it("should send an APDU to a connected device", async () => { // given - const deviceSession = deviceSessionStubBuilder(); + const deviceSession = deviceSessionStubBuilder({}, () => logger); sessionService.addDeviceSession(deviceSession); const useCase = new SendApduUseCase(sessionService, () => logger); @@ -60,7 +60,10 @@ describe("SendApduUseCase", () => { Promise.resolve(Left(new ReceiverApduError())), ), }); - const deviceSession = deviceSessionStubBuilder({ connectedDevice }); + const deviceSession = deviceSessionStubBuilder( + { connectedDevice }, + () => logger, + ); sessionService.addDeviceSession(deviceSession); const useCase = new SendApduUseCase(sessionService, () => logger); diff --git a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts index 776843d76..939d3bf85 100644 --- a/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts +++ b/packages/core/src/internal/usb/use-case/GetConnectedDeviceUseCase.test.ts @@ -22,7 +22,10 @@ describe("GetConnectedDevice", () => { it("should retrieve an instance of ConnectedDevice", () => { // given - const deviceSession = deviceSessionStubBuilder({ id: fakeSessionId }); + const deviceSession = deviceSessionStubBuilder( + { id: fakeSessionId }, + () => logger, + ); sessionService.addDeviceSession(deviceSession); const useCase = new GetConnectedDeviceUseCase(sessionService, () => logger); @@ -37,7 +40,10 @@ describe("GetConnectedDevice", () => { it("should retrieve correct device from session", () => { // given - const deviceSession = deviceSessionStubBuilder({ id: fakeSessionId }); + const deviceSession = deviceSessionStubBuilder( + { id: fakeSessionId }, + () => logger, + ); sessionService.addDeviceSession(deviceSession); const useCase = new GetConnectedDeviceUseCase(sessionService, () => logger); From 3160112f7dee9ddd955aa5866973d3c4ac6bd6fd Mon Sep 17 00:00:00 2001 From: jz_ Date: Tue, 28 May 2024 16:23:30 +0200 Subject: [PATCH 228/253] =?UTF-8?q?=F0=9F=94=A7=20(repo):=20Add=20dependab?= =?UTF-8?q?ot=20configuration=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/dependabot.yml | 24 ++++++++++++++++++++++++ .github/workflows/pull_request.yml | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..236fd6809 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,24 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + day: "monday" + labels: + - "github-actions" + - "dependencies" + reviewers: + - "LedgerHQ/live-devices" + # Maintain dependencies for pnpm + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "weekly" + day: "sunday" + labels: + - "pnpm" + - "dependencies" + reviewers: + - "LedgerHQ/live-devices" diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 7d01a6681..cdc16cedc 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -19,7 +19,7 @@ jobs: danger: name: Run Danger check - if: ${{ !contains(github.ref_name, 'dependabot') }} + if: ${{ !contains(github.ref_name, 'dependencies') }} runs-on: [ubuntu-latest] steps: - uses: actions/checkout@v4 From 0cf400fb7b7ba26122ec994246c0c62ff6a51592 Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Mon, 3 Jun 2024 18:40:48 +0200 Subject: [PATCH 229/253] =?UTF-8?q?=E2=9A=97=EF=B8=8F=20(poc):=20XState=20?= =?UTF-8?q?open=20app=20POC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pocs/xstate-study/.eslintrc.json | 3 + pocs/xstate-study/.gitignore | 36 + pocs/xstate-study/README.md | 36 + pocs/xstate-study/app/Machine.tsx | 36 + pocs/xstate-study/app/favicon.ico | Bin 0 -> 25931 bytes pocs/xstate-study/app/globals.css | 107 + pocs/xstate-study/app/layout.tsx | 22 + pocs/xstate-study/app/page.module.css | 230 ++ pocs/xstate-study/app/page.tsx | 17 + pocs/xstate-study/app/stateMachine.ts | 222 ++ pocs/xstate-study/next.config.mjs | 6 + pocs/xstate-study/package-lock.json | 4401 +++++++++++++++++++++++++ pocs/xstate-study/package.json | 27 + pocs/xstate-study/public/next.svg | 1 + pocs/xstate-study/public/vercel.svg | 1 + pocs/xstate-study/tsconfig.json | 26 + 16 files changed, 5171 insertions(+) create mode 100644 pocs/xstate-study/.eslintrc.json create mode 100644 pocs/xstate-study/.gitignore create mode 100644 pocs/xstate-study/README.md create mode 100644 pocs/xstate-study/app/Machine.tsx create mode 100644 pocs/xstate-study/app/favicon.ico create mode 100644 pocs/xstate-study/app/globals.css create mode 100644 pocs/xstate-study/app/layout.tsx create mode 100644 pocs/xstate-study/app/page.module.css create mode 100644 pocs/xstate-study/app/page.tsx create mode 100644 pocs/xstate-study/app/stateMachine.ts create mode 100644 pocs/xstate-study/next.config.mjs create mode 100644 pocs/xstate-study/package-lock.json create mode 100644 pocs/xstate-study/package.json create mode 100644 pocs/xstate-study/public/next.svg create mode 100644 pocs/xstate-study/public/vercel.svg create mode 100644 pocs/xstate-study/tsconfig.json diff --git a/pocs/xstate-study/.eslintrc.json b/pocs/xstate-study/.eslintrc.json new file mode 100644 index 000000000..bffb357a7 --- /dev/null +++ b/pocs/xstate-study/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/pocs/xstate-study/.gitignore b/pocs/xstate-study/.gitignore new file mode 100644 index 000000000..fd3dbb571 --- /dev/null +++ b/pocs/xstate-study/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/pocs/xstate-study/README.md b/pocs/xstate-study/README.md new file mode 100644 index 000000000..c4033664f --- /dev/null +++ b/pocs/xstate-study/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/pocs/xstate-study/app/Machine.tsx b/pocs/xstate-study/app/Machine.tsx new file mode 100644 index 000000000..1b246bdc5 --- /dev/null +++ b/pocs/xstate-study/app/Machine.tsx @@ -0,0 +1,36 @@ +"use client"; +import { useEffect, memo } from "react"; +import makeOpenAppMachine from "./stateMachine"; +import { createActor } from "xstate"; +import { createBrowserInspector } from "@statelyai/inspect"; + +const inspector = createBrowserInspector(); + +const openAppMachine = makeOpenAppMachine(); + +function Machine() { + const startMachine = () => { + console.log("machine: Hello, world!"); + const openAppMachineActor = createActor(openAppMachine, { + inspect: inspector.inspect, + input: { + requestedAppName: "Bitcoin", + deviceSessionState: { + status: "Ready", + deviceOnboarded: true, + }, + }, + }); + + openAppMachineActor.start(); + openAppMachineActor.subscribe((state) => { + if (state.status === "done") { + console.log("machine: done", state); + console.log("machine output:", state.output); + } + }); + }; + return ; +} + +export default memo(Machine); diff --git a/pocs/xstate-study/app/favicon.ico b/pocs/xstate-study/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/pocs/xstate-study/app/globals.css b/pocs/xstate-study/app/globals.css new file mode 100644 index 000000000..f4bd77c0c --- /dev/null +++ b/pocs/xstate-study/app/globals.css @@ -0,0 +1,107 @@ +:root { + --max-width: 1100px; + --border-radius: 12px; + --font-mono: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", + "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", + "Fira Mono", "Droid Sans Mono", "Courier New", monospace; + + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; + --background-end-rgb: 255, 255, 255; + + --primary-glow: conic-gradient( + from 180deg at 50% 50%, + #16abff33 0deg, + #0885ff33 55deg, + #54d6ff33 120deg, + #0071ff33 160deg, + transparent 360deg + ); + --secondary-glow: radial-gradient( + rgba(255, 255, 255, 1), + rgba(255, 255, 255, 0) + ); + + --tile-start-rgb: 239, 245, 249; + --tile-end-rgb: 228, 232, 233; + --tile-border: conic-gradient( + #00000080, + #00000040, + #00000030, + #00000020, + #00000010, + #00000010, + #00000080 + ); + + --callout-rgb: 238, 240, 241; + --callout-border-rgb: 172, 175, 176; + --card-rgb: 180, 185, 188; + --card-border-rgb: 131, 134, 135; +} + +@media (prefers-color-scheme: dark) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + + --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); + --secondary-glow: linear-gradient( + to bottom right, + rgba(1, 65, 255, 0), + rgba(1, 65, 255, 0), + rgba(1, 65, 255, 0.3) + ); + + --tile-start-rgb: 2, 13, 46; + --tile-end-rgb: 2, 5, 19; + --tile-border: conic-gradient( + #ffffff80, + #ffffff40, + #ffffff30, + #ffffff20, + #ffffff10, + #ffffff10, + #ffffff80 + ); + + --callout-rgb: 20, 20, 20; + --callout-border-rgb: 108, 108, 108; + --card-rgb: 100, 100, 100; + --card-border-rgb: 200, 200, 200; + } +} + +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} + +html, +body { + max-width: 100vw; + overflow-x: hidden; +} + +body { + color: rgb(var(--foreground-rgb)); + background: linear-gradient( + to bottom, + transparent, + rgb(var(--background-end-rgb)) + ) + rgb(var(--background-start-rgb)); +} + +a { + color: inherit; + text-decoration: none; +} + +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } +} diff --git a/pocs/xstate-study/app/layout.tsx b/pocs/xstate-study/app/layout.tsx new file mode 100644 index 000000000..3314e4780 --- /dev/null +++ b/pocs/xstate-study/app/layout.tsx @@ -0,0 +1,22 @@ +import type { Metadata } from "next"; +import { Inter } from "next/font/google"; +import "./globals.css"; + +const inter = Inter({ subsets: ["latin"] }); + +export const metadata: Metadata = { + title: "Create Next App", + description: "Generated by create next app", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + {children} + + ); +} diff --git a/pocs/xstate-study/app/page.module.css b/pocs/xstate-study/app/page.module.css new file mode 100644 index 000000000..5c4b1e6a2 --- /dev/null +++ b/pocs/xstate-study/app/page.module.css @@ -0,0 +1,230 @@ +.main { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + padding: 6rem; + min-height: 100vh; +} + +.description { + display: inherit; + justify-content: inherit; + align-items: inherit; + font-size: 0.85rem; + max-width: var(--max-width); + width: 100%; + z-index: 2; + font-family: var(--font-mono); +} + +.description a { + display: flex; + justify-content: center; + align-items: center; + gap: 0.5rem; +} + +.description p { + position: relative; + margin: 0; + padding: 1rem; + background-color: rgba(var(--callout-rgb), 0.5); + border: 1px solid rgba(var(--callout-border-rgb), 0.3); + border-radius: var(--border-radius); +} + +.code { + font-weight: 700; + font-family: var(--font-mono); +} + +.grid { + display: grid; + grid-template-columns: repeat(4, minmax(25%, auto)); + max-width: 100%; + width: var(--max-width); +} + +.card { + padding: 1rem 1.2rem; + border-radius: var(--border-radius); + background: rgba(var(--card-rgb), 0); + border: 1px solid rgba(var(--card-border-rgb), 0); + transition: background 200ms, border 200ms; +} + +.card span { + display: inline-block; + transition: transform 200ms; +} + +.card h2 { + font-weight: 600; + margin-bottom: 0.7rem; +} + +.card p { + margin: 0; + opacity: 0.6; + font-size: 0.9rem; + line-height: 1.5; + max-width: 30ch; + text-wrap: balance; +} + +.center { + display: flex; + justify-content: center; + align-items: center; + position: relative; + padding: 4rem 0; +} + +.center::before { + background: var(--secondary-glow); + border-radius: 50%; + width: 480px; + height: 360px; + margin-left: -400px; +} + +.center::after { + background: var(--primary-glow); + width: 240px; + height: 180px; + z-index: -1; +} + +.center::before, +.center::after { + content: ""; + left: 50%; + position: absolute; + filter: blur(45px); + transform: translateZ(0); +} + +.logo { + position: relative; +} +/* Enable hover only on non-touch devices */ +@media (hover: hover) and (pointer: fine) { + .card:hover { + background: rgba(var(--card-rgb), 0.1); + border: 1px solid rgba(var(--card-border-rgb), 0.15); + } + + .card:hover span { + transform: translateX(4px); + } +} + +@media (prefers-reduced-motion) { + .card:hover span { + transform: none; + } +} + +/* Mobile */ +@media (max-width: 700px) { + .content { + padding: 4rem; + } + + .grid { + grid-template-columns: 1fr; + margin-bottom: 120px; + max-width: 320px; + text-align: center; + } + + .card { + padding: 1rem 2.5rem; + } + + .card h2 { + margin-bottom: 0.5rem; + } + + .center { + padding: 8rem 0 6rem; + } + + .center::before { + transform: none; + height: 300px; + } + + .description { + font-size: 0.8rem; + } + + .description a { + padding: 1rem; + } + + .description p, + .description div { + display: flex; + justify-content: center; + position: fixed; + width: 100%; + } + + .description p { + align-items: center; + inset: 0 0 auto; + padding: 2rem 1rem 1.4rem; + border-radius: 0; + border: none; + border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); + background: linear-gradient( + to bottom, + rgba(var(--background-start-rgb), 1), + rgba(var(--callout-rgb), 0.5) + ); + background-clip: padding-box; + backdrop-filter: blur(24px); + } + + .description div { + align-items: flex-end; + pointer-events: none; + inset: auto 0 0; + padding: 2rem; + height: 200px; + background: linear-gradient( + to bottom, + transparent 0%, + rgb(var(--background-end-rgb)) 40% + ); + z-index: 1; + } +} + +/* Tablet and Smaller Desktop */ +@media (min-width: 701px) and (max-width: 1120px) { + .grid { + grid-template-columns: repeat(2, 50%); + } +} + +@media (prefers-color-scheme: dark) { + .vercelLogo { + filter: invert(1); + } + + .logo { + filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); + } +} + +@keyframes rotate { + from { + transform: rotate(360deg); + } + to { + transform: rotate(0deg); + } +} diff --git a/pocs/xstate-study/app/page.tsx b/pocs/xstate-study/app/page.tsx new file mode 100644 index 000000000..8856e1dc1 --- /dev/null +++ b/pocs/xstate-study/app/page.tsx @@ -0,0 +1,17 @@ +"use client"; + +import { useEffect } from "react"; +import Image from "next/image"; +import styles from "./page.module.css"; +import Machine from "./Machine"; + +export default function Home() { + useEffect(() => { + console.log("Hello, world!"); + }, []); + return ( +
    + +
    + ); +} diff --git a/pocs/xstate-study/app/stateMachine.ts b/pocs/xstate-study/app/stateMachine.ts new file mode 100644 index 000000000..33512aee4 --- /dev/null +++ b/pocs/xstate-study/app/stateMachine.ts @@ -0,0 +1,222 @@ +import { setup, fromPromise, assign, log } from "xstate"; + + +type DeviceSessionState = { + status: "Ready" | "Busy" | "Locked" | "NotConnected", + deviceOnboarded: boolean, +}; + +type Input = { + requestedAppName: string, + deviceSessionState: DeviceSessionState, +} + +type Context = Input & { + currentlyRunningApp: string | null; + error: Error | null; +} + +const LOCKED_DEVICE_ERROR = "Locked device"; +const APP_NOT_FOUND_ERROR = "App not installed"; +const OPEN_REJECTED_ERROR = "Open app rejected"; + +async function mockedGetAppAndVersion(): Promise<{ app: string, version: string }> { + console.log("getAppAndVersion"); + debugger; + await new Promise((resolve) => setTimeout(resolve, 1000)); + const random = Math.random(); + if (random < 0.25) return {app: "Dashboard", version: "1.0.0"}; + if (random < 0.5) return {app: "Bitcoin", version: "1.0.0"}; + if (random < 0.75) return {app: "Ethereum", version: "1.0.0"}; + throw new Error(LOCKED_DEVICE_ERROR); // 30% chance of locked device +} + +async function mockedCloseApp() { + console.log("closeApp") + debugger; + await new Promise((resolve) => setTimeout(resolve, 1000)); + return; +} + +async function mockedOpenApp(appName: string) { + console.log("openApp") + debugger; + if (!appName) throw new Error("No app name provided"); + await new Promise((resolve) => setTimeout(resolve, 1000)); + const random = Math.random(); + if (random < 0.33) throw new Error(APP_NOT_FOUND_ERROR); + if (random < 0.67) throw new Error(OPEN_REJECTED_ERROR); + return; +} + +function makeOpenAppMachine(params: { + getAppAndVersion: () => Promise<{ app: string, version: string }>, + closeApp: () => Promise, + openApp: (appName: string) => Promise, +} = { + getAppAndVersion: mockedGetAppAndVersion, + closeApp: mockedCloseApp, + openApp: mockedOpenApp, +}) { + return setup({ + types: { + context: {} as Context, + input: {} as Input, + output: {} as { currentlyRunningApp: string } | { error: Error }, + }, + actors: { + getAppAndVersion: fromPromise(params.getAppAndVersion), + closeApp: fromPromise(params.closeApp), + openApp: fromPromise((_: {input: {appName: string}}) => params.openApp(_.input.appName)), + }, + guards: { + isDeviceOnboarded: ({context}: {context: Context}) => context.deviceSessionState.deviceOnboarded, + isDeviceUnlocked: ({context}: {context: Context}) => context.deviceSessionState.status !== "Locked", + isRequestedAppOpen: ({context}: {context: Context}) => { + if (context.currentlyRunningApp === null) throw new Error("context.currentlyRunningApp === null"); + return context.currentlyRunningApp === context.requestedAppName + }, + isDashboardOpen: ({context}: {context: Context}) => { + if (context.currentlyRunningApp === null) throw new Error("context.currentlyRunningApp === null"); + return context.currentlyRunningApp === "Dashboard" + } + }, + actions: { + assignErrorDeviceNotOnboarded: assign({error: new Error("Device not onboarded")}), + assignErrorDeviceLocked: assign({error: new Error("Device locked")}) + }, + }).createMachine({ + /** @xstate-layout N4IgpgJg5mDOIC5QHkAOYB2BBVqAiYAbgJYDGYWpALsQPYYB0BJ5ASmAIYQCeAxANoAGALqJQqWrGI16YkAA9EAdgCMDAGyCVAVm3qAzAA4AnNq3bDAGhDdEKgCyGGpw4OMAmffbP37xgL7+1miYOPhEZBTUdIzIGABGtBwAThDEGFAAwgAWYKQA1gIichJSMhhyiggqggzugvbq2qr6Su7aKvr6Kta2CO5tGu7GhvrDKq4jxvaBwejYuMyRlOUMcYkpaRk5eYX8KqJIIKXSMZWI7uruDIYqKu53FtrGbYb2vRd+zg1vDuo67kasxAIQW4RYUVWABlaAV0llcgUiodxJJTrIjlUdAx7IJ9II2vj2ipjHjtB8EPpSTdLqY3B0Bn4lMDQWEluQVjEGDC4dtEXsDiU0eVzv0rjdtK1cQZLrjTBT9OonDUSZozAN7u0WfM2REOdF6AwwgAbMgccpYQgcYjGjjxY1gXgQehgBjpQi0fKu1mLPWQrkms0Wq02u0OhDu2HmmJCYSxoVlM6Y5QMQQPQzqdTGToWLOCck2RBNJQMZ4EwQNfNKSX6bWhX0QzmGwOkaP0S3W232x1gZLJWjJBioW1UABmA4AtmsdQ3lgbGC229gQ13w5HW+VY-GjicRcmxdpU117F5DO4TJLdBTLwx7lnGhX6mMVHWwez-c3cKaNzEdkjt6iiYYqAVT6N8xhGNWbSSpmKjqBShiSremiuPe7SNMyQQgjO4Jzqsi7lH+AooscwpJiBFxKGBSj2CqTSZvYwzwYWCCIWBcGCBmJLdKocGvrqjbzkwHCwNkGypERyIJuiFT7sSDBjDWEznlR7QUjUgjqBoHRKBB0pqgEWE+rh+qrHgIliUkEn8gIgo7mRwEKIgZiHppowTBB1aTOpFZaU0KhUb8NG4oY-GzqZXKZMakgUF+QYxE6LpuhgHpetO9YmR+jBRTFBExBGKVRpuIgAaRQGyRRCCOE4VIPEqtGKh5BZ9HcJgMKoHQVi0GYnmFmVNtl0WwLFw7xfQvC9v2g7Dua47JFOxnvgNDA5cNeX0AVHo-vQW7FPZ5Wiq8pZKpxSoTHiEw+f87U6F0hi6Xo1a1kZOFLUJxnfkuiUYK6kZpYtfrLR9Y0YJtRUxiVe2ATJooDNcgKaYxiqIfdSjqbi1z3HcF09SeMwvRlb2rMD20YBNfYDkOI5zQtr2A+9OGfeUYOk7tJG7uRTlVWeN2mKSJ5w2e6ndGBvi6BBhiuH46h9UTAZxaT7BcHwpUc45VSqBo5j2ISkvNMYzEtZoJbtEoNE5sYBu9cCGC0BAcByADgl7tDLtcwAtNo9jtXi9QZuouI1No7jqRo6iqAbRioRpnGy-TZl+krPDSW7VSMQhThKJopjB887gPC8cfO1y6xWVsCK7CnnNVJ4OJvF4xucW80wUg88O3M03gPBWzRF3hXI8vk8JEVX6uIK0paefougXhMaMsV0tQDNmNFGEqSqhQTb7x-Lo2kx2obdqPFUe1pSi+6dAdaPml0sZK1xvJLmmeGb+LPXMhM75+e9LiP+0w3Jb2HhJjnlaAYXS+YKRKFcDcNM-xWjnwmAFPuEVDTmVEuJCAf9XbVwuOKK4WZVCAg8kLFi0w1BUS9lRAw09TDv2wp-YuhpVojSZpzNWJ806jHaq0A2VszBtAGD5QYGZ84PGPG4LUW8BL90NCTJcx9YYWFLDoPQ4dSSWy0OpYY7F7gVgJK4LqmEP7byYQuBWS4k59BwWPfoh5g5eA6G8QE09pTqV0LUUwVFOJmwMFcfGJiZGoMYAAZQAK6kHILAeA-9U6IFxGHaUjFJaZmeO8FicEA51DuqoNoaZ8woKygwAAohTZIij9ykhLGmcYWZQFaGMOpBi2TeEdDuN0EYgRAhAA */ + id: "OpenAppDeviceAction", + initial: "DeviceReady", + context: ({input}): Context => { + return { + ...input, + currentlyRunningApp: null, + error: null, + } + }, + states: { + DeviceReady: { // check device capabilities & status known + always: { + target: "OnboardingCheck", + } + }, + + OnboardingCheck: { // check onboarding status provided by device session + always: [{ + target: "LockingCheck", + guard: { + type: "isDeviceOnboarded", + }, + }, { + target: "Error", + actions: "assignErrorDeviceNotOnboarded", + }], + }, + + LockingCheck: { // check locking status provided by device session + always: [{ + target: "ApplicationAvailable", + guard: "isDeviceUnlocked", + }, { + target: "Error", + actions: "assignErrorDeviceLocked", + }] + }, + + ApplicationAvailable: { // execute getAppAndVersion command + invoke: { + src: "getAppAndVersion", + onDone: { + target: "ApplicationCheck", + actions: assign({ + currentlyRunningApp: (_) => _.event.output.app, + }), + }, + onError: { + target: "Error", + actions: + assign({ + error: ({event}) => { + return event.error as Error + }, + }), + }, + } + }, + + ApplicationCheck: { // Is the current application the requested one + always: [{ + target: "ApplicationReady", + guard: "isRequestedAppOpen", + }, "DashboardCheck"] + }, + + DashboardCheck: { // Is the current application the dashboard + always: [{ + target: "OpenApplication", + guard: "isDashboardOpen", + }, "CloseApplication"] + }, + + CloseApplication: { + invoke: { + src: "closeApp", + onDone: { + target: "OpenApplication", + reenter: true + }, + onError: { + target: "Error", + actions: + assign({ + error: ({event}) => event.error as Error, + }), + }, + } + }, + + OpenApplication: { // execute openApp command, + invoke: { + src: "openApp", + input: ({context}) => ({appName: context.requestedAppName}), + onDone: { + target: "ApplicationReady", + actions: assign({ + currentlyRunningApp: (_) => _.context.requestedAppName, + }), + }, + onError: { + target: "Error", + actions: + assign({ + error: ({event}) => event.error as Error, + }), + }, + } + }, + + ApplicationReady: { // application is ready to be used + always: "Success" + }, + + // success state + Success: { + type: "final", + }, + + // error state + Error: { + type: "final", + }, + }, + output: ({context}) => context.error ? ({error: context.error}) : ({ + currentlyRunningApp: context.currentlyRunningApp as string, + }), + }); +} + + + +export default makeOpenAppMachine; \ No newline at end of file diff --git a/pocs/xstate-study/next.config.mjs b/pocs/xstate-study/next.config.mjs new file mode 100644 index 000000000..61cd5eddd --- /dev/null +++ b/pocs/xstate-study/next.config.mjs @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: false, +}; + +export default nextConfig; diff --git a/pocs/xstate-study/package-lock.json b/pocs/xstate-study/package-lock.json new file mode 100644 index 000000000..38cfcc2e4 --- /dev/null +++ b/pocs/xstate-study/package-lock.json @@ -0,0 +1,4401 @@ +{ + "name": "xstate-study", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "xstate-study", + "version": "0.1.0", + "dependencies": { + "@statelyai/inspect": "^0.3.1", + "next": "14.2.3", + "react": "^18", + "react-dom": "^18", + "xstate": "^5.13.1" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "eslint": "^8", + "eslint-config-next": "14.2.3", + "typescript": "^5" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", + "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@next/env": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", + "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", + "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", + "dev": true, + "dependencies": { + "glob": "10.3.10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", + "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", + "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", + "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", + "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", + "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", + "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", + "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", + "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", + "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", + "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==", + "dev": true + }, + "node_modules/@statelyai/inspect": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@statelyai/inspect/-/inspect-0.3.1.tgz", + "integrity": "sha512-KW3owf5UbPs1+/xOGJoSV4D69hP5xTX7PCzARr2R1senwfUIwyGP8yEsB8dvkMvekYvgFS0qa6lmg1eszYr2tw==", + "dependencies": { + "fast-safe-stringify": "^2.1.1", + "isomorphic-ws": "^5.0.0", + "partysocket": "^0.0.25", + "safe-stable-stringify": "^2.4.3", + "superjson": "^1.13.3", + "uuid": "^9.0.1" + }, + "peerDependencies": { + "xstate": "^5.5.1" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + }, + "node_modules/@swc/helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "dependencies": { + "@swc/counter": "^0.1.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", + "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001627", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001627.tgz", + "integrity": "sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", + "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.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.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", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz", + "integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "14.2.3", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "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" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", + "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/next": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", + "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==", + "dependencies": { + "@next/env": "14.2.3", + "@swc/helpers": "0.5.5", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.2.3", + "@next/swc-darwin-x64": "14.2.3", + "@next/swc-linux-arm64-gnu": "14.2.3", + "@next/swc-linux-arm64-musl": "14.2.3", + "@next/swc-linux-x64-gnu": "14.2.3", + "@next/swc-linux-x64-musl": "14.2.3", + "@next/swc-win32-arm64-msvc": "14.2.3", + "@next/swc-win32-ia32-msvc": "14.2.3", + "@next/swc-win32-x64-msvc": "14.2.3" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/partysocket": { + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/partysocket/-/partysocket-0.0.25.tgz", + "integrity": "sha512-1oCGA65fydX/FgdnsiBh68buOvfxuteoZVSb3Paci2kRp/7lhF0HyA8EDb5X/O6FxId1e+usPTQNRuzFEvkJbQ==", + "dependencies": { + "event-target-shim": "^6.0.2" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/superjson": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.13.3.tgz", + "integrity": "sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xstate": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/xstate/-/xstate-5.13.1.tgz", + "integrity": "sha512-saBUxsTb29Vq8bjq1TjLdGCYs2pneGMzQ7pqQyXh1nqZaSnKHkCkxf3EV+EDYbLnQioxK9HNMYPQrz4whj3RJQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/xstate" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/pocs/xstate-study/package.json b/pocs/xstate-study/package.json new file mode 100644 index 000000000..0d9ffff2c --- /dev/null +++ b/pocs/xstate-study/package.json @@ -0,0 +1,27 @@ +{ + "name": "xstate-study", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "test": "" + }, + "dependencies": { + "@statelyai/inspect": "^0.3.1", + "next": "14.2.3", + "react": "^18", + "react-dom": "^18", + "xstate": "^5.13.1" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "eslint": "^8", + "eslint-config-next": "14.2.3", + "typescript": "^5" + } +} diff --git a/pocs/xstate-study/public/next.svg b/pocs/xstate-study/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/pocs/xstate-study/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pocs/xstate-study/public/vercel.svg b/pocs/xstate-study/public/vercel.svg new file mode 100644 index 000000000..d2f842227 --- /dev/null +++ b/pocs/xstate-study/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pocs/xstate-study/tsconfig.json b/pocs/xstate-study/tsconfig.json new file mode 100644 index 000000000..e7ff90fd2 --- /dev/null +++ b/pocs/xstate-study/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} From b5ba3e42a94f0e24be3ea28ae2c7f124860ed459 Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Mon, 3 Jun 2024 19:50:18 +0200 Subject: [PATCH 230/253] =?UTF-8?q?=F0=9F=90=9B=20(poc):=20Fix=20open=20ap?= =?UTF-8?q?p=20machine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pocs/xstate-study/app/Machine.tsx | 2 +- .../app/openAppStateMachine.test.ts | 348 ++++++++++++++++++ ...stateMachine.ts => openAppStateMachine.ts} | 14 +- 3 files changed, 355 insertions(+), 9 deletions(-) create mode 100644 pocs/xstate-study/app/openAppStateMachine.test.ts rename pocs/xstate-study/app/{stateMachine.ts => openAppStateMachine.ts} (95%) diff --git a/pocs/xstate-study/app/Machine.tsx b/pocs/xstate-study/app/Machine.tsx index 1b246bdc5..2ac7c0919 100644 --- a/pocs/xstate-study/app/Machine.tsx +++ b/pocs/xstate-study/app/Machine.tsx @@ -1,6 +1,6 @@ "use client"; import { useEffect, memo } from "react"; -import makeOpenAppMachine from "./stateMachine"; +import makeOpenAppMachine from "./openAppStateMachine"; import { createActor } from "xstate"; import { createBrowserInspector } from "@statelyai/inspect"; diff --git a/pocs/xstate-study/app/openAppStateMachine.test.ts b/pocs/xstate-study/app/openAppStateMachine.test.ts new file mode 100644 index 000000000..9820aae5f --- /dev/null +++ b/pocs/xstate-study/app/openAppStateMachine.test.ts @@ -0,0 +1,348 @@ +import { describe, it, expect, beforeEach } from '@jest/globals' +import { createActor } from 'xstate'; +import makeOpenAppMachine, { APP_NOT_FOUND_ERROR, DEVICE_NOT_ONBOARDED_ERROR, OPEN_REJECTED_ERROR, LOCKED_DEVICE_ERROR} from "./openAppStateMachine"; + +jest.useFakeTimers() + +describe("openAppStateMachine", () => { + const mockedGetAppAndVersion = jest.fn(); + const mockedCloseApp = jest.fn(); + const mockedOpenApp = jest.fn(); + + const openAppMachine = makeOpenAppMachine( + { + getAppAndVersion: mockedGetAppAndVersion, + closeApp: mockedCloseApp, + openApp: mockedOpenApp, + } + ); + + beforeEach(() => { + jest.clearAllMocks(); + }) + + it("should end in an error if the device is not onboarded", (done) => { + const openAppMachineActor = createActor(openAppMachine, { + input: { + requestedAppName: "Bitcoin", + deviceSessionState: { + status: "Ready", + deviceOnboarded: false, + }, + }, + }); + + openAppMachineActor.subscribe((state) => { + try { + if (state.status === "done") { + expect(state.value).toEqual("Error"); + if ("error" in state.output) { + expect(state.output.error).toBeDefined(); + expect(state.output.error.message).toEqual(DEVICE_NOT_ONBOARDED_ERROR); + done() + } else { + done("Expected error in output") + } + } + } catch(e: any) { + done(e.message) + } + }); + + openAppMachineActor.start(); + + }) + + it("should end in an error if the device is locked", (done) => { + const openAppMachineActor = createActor(openAppMachine, { + input: { + requestedAppName: "Bitcoin", + deviceSessionState: { + status: "Locked", + deviceOnboarded: true, + }, + }, + }); + + openAppMachineActor.subscribe((state) => { + try { + if (state.status === "done") { + expect(state.value).toEqual("Error"); + if ("error" in state.output) { + expect(state.output.error).toBeDefined(); + expect(state.output.error.message).toEqual(LOCKED_DEVICE_ERROR); + done() + } else { + done("Expected error in output") + } + } + } catch(e: any) { + done(e.message) + } + }); + + openAppMachineActor.start(); + }); + + it("should end in an error if getAppAndVersion throws an error", (done) => { + const mockedErrorMessage = "Mocked error"; + + // getAppAndVersion throws an error + mockedGetAppAndVersion.mockRejectedValue(new Error(mockedErrorMessage)); + + const openAppMachineActor = createActor(openAppMachine, { + input: { + requestedAppName: "Bitcoin", + deviceSessionState: { + status: "Ready", + deviceOnboarded: true, + }, + }, + }); + + openAppMachineActor.subscribe((state) => { + try { + if (state.status === "done") { + expect(state.value).toEqual("Error"); + if ("error" in state.output) { + expect(state.output.error).toBeDefined(); + expect(state.output.error.message).toEqual("Mocked error"); + done() + } else { + done("Expected error in output") + } + } + } catch(e: any) { + done(e.message) + } + }); + + openAppMachineActor.start(); + }); + + it("should end in a success if the app is already opened", (done) => { + + // App already opened + mockedGetAppAndVersion.mockResolvedValue({app: "Bitcoin", version: "1.0.0"}); + + const openAppMachineActor = createActor(openAppMachine, { + input: { + requestedAppName: "Bitcoin", + deviceSessionState: { + status: "Ready", + deviceOnboarded: true, + }, + }, + }); + + openAppMachineActor.subscribe((state) => { + try { + if (state.status === "done") { + expect(state.value).toEqual("Success"); + if ("currentlyRunningApp" in state.output) { + expect(state.output).toBeDefined(); + expect(state.output.currentlyRunningApp).toEqual("Bitcoin"); + done() + } else { + done("Expected currentlyRunningApp in state") + } + } + } catch(e: any) { + done(e.message) + } + }); + + openAppMachineActor.start(); + }); + + it("should end in a success if the dashboard is open and open app succeeds", (done) => { + + // Dashboard is open + mockedGetAppAndVersion.mockResolvedValue({app: "Dashboard", version: "1.0.0"}); + // Open app succeeds + mockedOpenApp.mockResolvedValue(undefined); + + const openAppMachineActor = createActor(openAppMachine, { + input: { + requestedAppName: "Bitcoin", + deviceSessionState: { + status: "Ready", + deviceOnboarded: true, + }, + }, + }); + + openAppMachineActor.subscribe((state) => { + try { + if (state.status === "done") { + expect(state.value).toEqual("Success"); + if ("currentlyRunningApp" in state.output) { + expect(state.output).toBeDefined(); + expect(state.output.currentlyRunningApp).toEqual("Bitcoin"); + done() + } else { + done("Expected currentlyRunningApp in state") + } + } + } catch(e: any) { + done(e.message) + } + }); + + openAppMachineActor.start(); + + }); + + it("should end in an error if the dashboard is open and open app throws an error", (done) => { + + // Dashboard is open + mockedGetAppAndVersion.mockResolvedValue({app: "Dashboard", version: "1.0.0"}); + // Open app throws an error + mockedOpenApp.mockRejectedValue(new Error("Mocked error")); + + const openAppMachineActor = createActor(openAppMachine, { + input: { + requestedAppName: "Bitcoin", + deviceSessionState: { + status: "Ready", + deviceOnboarded: true, + }, + }, + }); + + openAppMachineActor.subscribe((state) => { + try { + if (state.status === "done") { + expect(state.value).toEqual("Error"); + if ("error" in state.output) { + expect(state.output.error).toBeDefined(); + expect(state.output.error.message).toEqual("Mocked error"); + done() + } else { + done("Expected error in output") + } + } + } catch(e: any) { + done(e.message) + } + }); + + openAppMachineActor.start(); + }); + + it("should end in an error if another app is open, and close app throws", (done) => { + + // Another app is open + mockedGetAppAndVersion.mockResolvedValue({app: "Ethereum", version: "1.0.0"}); + // Close app throws an error + mockedCloseApp.mockRejectedValue(new Error("Mocked error")); + + const openAppMachineActor = createActor(openAppMachine, { + input: { + requestedAppName: "Bitcoin", + deviceSessionState: { + status: "Ready", + deviceOnboarded: true, + }, + }, + }); + + openAppMachineActor.subscribe((state) => { + try { + if (state.status === "done") { + expect(state.value).toEqual("Error"); + if ("error" in state.output) { + expect(state.output.error).toBeDefined(); + expect(state.output.error.message).toEqual("Mocked error"); + done() + } else { + done("Expected error in output") + } + } + } catch(e: any) { + done(e.message) + } + }); + + openAppMachineActor.start(); + }); + + it("should end in an error if another app is open, close app succeeds but open app throws", (done) => { + + // Another app is open + mockedGetAppAndVersion.mockResolvedValue({app: "Ethereum", version: "1.0.0"}); + // Close app succeeds + mockedCloseApp.mockResolvedValue(undefined); + // Open app throws an error + mockedOpenApp.mockRejectedValue(new Error("Mocked error")); + + const openAppMachineActor = createActor(openAppMachine, { + input: { + requestedAppName: "Bitcoin", + deviceSessionState: { + status: "Ready", + deviceOnboarded: true, + }, + }, + }); + + openAppMachineActor.subscribe((state) => { + try { + if (state.status === "done") { + expect(state.value).toEqual("Error"); + if ("error" in state.output) { + expect(state.output.error).toBeDefined(); + expect(state.output.error.message).toEqual("Mocked error"); + done() + } else { + done("Expected error in output") + } + } + } catch(e: any) { + done(e.message) + } + }); + + openAppMachineActor.start(); + }); + + it("should end in a success if another app is open, close app succeeds and open app succeeds", (done) => { + + // Another app is open + mockedGetAppAndVersion.mockResolvedValue({app: "Ethereum", version: "1.0.0"}); + // Close app succeeds + mockedCloseApp.mockResolvedValue(undefined); + // Open app succeeds + mockedOpenApp.mockResolvedValue(undefined); + + const openAppMachineActor = createActor(openAppMachine, { + input: { + requestedAppName: "Bitcoin", + deviceSessionState: { + status: "Ready", + deviceOnboarded: true, + }, + }, + }); + + openAppMachineActor.subscribe((state) => { + try { + if (state.status === "done") { + expect(state.value).toEqual("Success"); + if ("currentlyRunningApp" in state.output) { + expect(state.output).toBeDefined(); + expect(state.output.currentlyRunningApp).toEqual("Bitcoin"); + done() + } else { + done("Expected currentlyRunningApp in state") + } + } + } catch(e: any) { + done(e.message) + } + }); + + openAppMachineActor.start(); + }); + +}) \ No newline at end of file diff --git a/pocs/xstate-study/app/stateMachine.ts b/pocs/xstate-study/app/openAppStateMachine.ts similarity index 95% rename from pocs/xstate-study/app/stateMachine.ts rename to pocs/xstate-study/app/openAppStateMachine.ts index 33512aee4..e8a97a6ee 100644 --- a/pocs/xstate-study/app/stateMachine.ts +++ b/pocs/xstate-study/app/openAppStateMachine.ts @@ -16,13 +16,13 @@ type Context = Input & { error: Error | null; } -const LOCKED_DEVICE_ERROR = "Locked device"; -const APP_NOT_FOUND_ERROR = "App not installed"; -const OPEN_REJECTED_ERROR = "Open app rejected"; +export const LOCKED_DEVICE_ERROR = "Locked device"; +export const APP_NOT_FOUND_ERROR = "App not installed"; +export const OPEN_REJECTED_ERROR = "Open app rejected"; +export const DEVICE_NOT_ONBOARDED_ERROR = "Device not onboarded"; async function mockedGetAppAndVersion(): Promise<{ app: string, version: string }> { console.log("getAppAndVersion"); - debugger; await new Promise((resolve) => setTimeout(resolve, 1000)); const random = Math.random(); if (random < 0.25) return {app: "Dashboard", version: "1.0.0"}; @@ -33,14 +33,12 @@ async function mockedGetAppAndVersion(): Promise<{ app: string, version: string async function mockedCloseApp() { console.log("closeApp") - debugger; await new Promise((resolve) => setTimeout(resolve, 1000)); return; } async function mockedOpenApp(appName: string) { console.log("openApp") - debugger; if (!appName) throw new Error("No app name provided"); await new Promise((resolve) => setTimeout(resolve, 1000)); const random = Math.random(); @@ -82,8 +80,8 @@ function makeOpenAppMachine(params: { } }, actions: { - assignErrorDeviceNotOnboarded: assign({error: new Error("Device not onboarded")}), - assignErrorDeviceLocked: assign({error: new Error("Device locked")}) + assignErrorDeviceNotOnboarded: assign({error: new Error(DEVICE_NOT_ONBOARDED_ERROR)}), + assignErrorDeviceLocked: assign({error: new Error(LOCKED_DEVICE_ERROR)}) }, }).createMachine({ /** @xstate-layout N4IgpgJg5mDOIC5QHkAOYB2BBVqAiYAbgJYDGYWpALsQPYYB0BJ5ASmAIYQCeAxANoAGALqJQqWrGI16YkAA9EAdgCMDAGyCVAVm3qAzAA4AnNq3bDAGhDdEKgCyGGpw4OMAmffbP37xgL7+1miYOPhEZBTUdIzIGABGtBwAThDEGFAAwgAWYKQA1gIichJSMhhyiggqggzugvbq2qr6Su7aKvr6Kta2CO5tGu7GhvrDKq4jxvaBwejYuMyRlOUMcYkpaRk5eYX8KqJIIKXSMZWI7uruDIYqKu53FtrGbYb2vRd+zg1vDuo67kasxAIQW4RYUVWABlaAV0llcgUiodxJJTrIjlUdAx7IJ9II2vj2ipjHjtB8EPpSTdLqY3B0Bn4lMDQWEluQVjEGDC4dtEXsDiU0eVzv0rjdtK1cQZLrjTBT9OonDUSZozAN7u0WfM2REOdF6AwwgAbMgccpYQgcYjGjjxY1gXgQehgBjpQi0fKu1mLPWQrkms0Wq02u0OhDu2HmmJCYSxoVlM6Y5QMQQPQzqdTGToWLOCck2RBNJQMZ4EwQNfNKSX6bWhX0QzmGwOkaP0S3W232x1gZLJWjJBioW1UABmA4AtmsdQ3lgbGC229gQ13w5HW+VY-GjicRcmxdpU117F5DO4TJLdBTLwx7lnGhX6mMVHWwez-c3cKaNzEdkjt6iiYYqAVT6N8xhGNWbSSpmKjqBShiSremiuPe7SNMyQQgjO4Jzqsi7lH+AooscwpJiBFxKGBSj2CqTSZvYwzwYWCCIWBcGCBmJLdKocGvrqjbzkwHCwNkGypERyIJuiFT7sSDBjDWEznlR7QUjUgjqBoHRKBB0pqgEWE+rh+qrHgIliUkEn8gIgo7mRwEKIgZiHppowTBB1aTOpFZaU0KhUb8NG4oY-GzqZXKZMakgUF+QYxE6LpuhgHpetO9YmR+jBRTFBExBGKVRpuIgAaRQGyRRCCOE4VIPEqtGKh5BZ9HcJgMKoHQVi0GYnmFmVNtl0WwLFw7xfQvC9v2g7Dua47JFOxnvgNDA5cNeX0AVHo-vQW7FPZ5Wiq8pZKpxSoTHiEw+f87U6F0hi6Xo1a1kZOFLUJxnfkuiUYK6kZpYtfrLR9Y0YJtRUxiVe2ATJooDNcgKaYxiqIfdSjqbi1z3HcF09SeMwvRlb2rMD20YBNfYDkOI5zQtr2A+9OGfeUYOk7tJG7uRTlVWeN2mKSJ5w2e6ndGBvi6BBhiuH46h9UTAZxaT7BcHwpUc45VSqBo5j2ISkvNMYzEtZoJbtEoNE5sYBu9cCGC0BAcByADgl7tDLtcwAtNo9jtXi9QZuouI1No7jqRo6iqAbRioRpnGy-TZl+krPDSW7VSMQhThKJopjB887gPC8cfO1y6xWVsCK7CnnNVJ4OJvF4xucW80wUg88O3M03gPBWzRF3hXI8vk8JEVX6uIK0paefougXhMaMsV0tQDNmNFGEqSqhQTb7x-Lo2kx2obdqPFUe1pSi+6dAdaPml0sZK1xvJLmmeGb+LPXMhM75+e9LiP+0w3Jb2HhJjnlaAYXS+YKRKFcDcNM-xWjnwmAFPuEVDTmVEuJCAf9XbVwuOKK4WZVCAg8kLFi0w1BUS9lRAw09TDv2wp-YuhpVojSZpzNWJ806jHaq0A2VszBtAGD5QYGZ84PGPG4LUW8BL90NCTJcx9YYWFLDoPQ4dSSWy0OpYY7F7gVgJK4LqmEP7byYQuBWS4k59BwWPfoh5g5eA6G8QE09pTqV0LUUwVFOJmwMFcfGJiZGoMYAAZQAK6kHILAeA-9U6IFxGHaUjFJaZmeO8FicEA51DuqoNoaZ8woKygwAAohTZIij9ykhLGmcYWZQFaGMOpBi2TeEdDuN0EYgRAhAA */ From 8817ac3a3040c1435d1b72b3e658fd563cd15c47 Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Mon, 3 Jun 2024 19:50:52 +0200 Subject: [PATCH 231/253] =?UTF-8?q?=E2=9C=85=20(poc):=20Unit=20tests=20of?= =?UTF-8?q?=20open=20app=20state=20machine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pocs/xstate-study/jest.config.js | 10 + pocs/xstate-study/package-lock.json | 6677 ++++++++++++++++++++------- pocs/xstate-study/package.json | 5 +- 3 files changed, 4929 insertions(+), 1763 deletions(-) create mode 100644 pocs/xstate-study/jest.config.js diff --git a/pocs/xstate-study/jest.config.js b/pocs/xstate-study/jest.config.js new file mode 100644 index 000000000..3414ac110 --- /dev/null +++ b/pocs/xstate-study/jest.config.js @@ -0,0 +1,10 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + testMatch: ['**/*.test.(ts|tsx)'], +}; \ No newline at end of file diff --git a/pocs/xstate-study/package-lock.json b/pocs/xstate-study/package-lock.json index 38cfcc2e4..0a6fc6322 100644 --- a/pocs/xstate-study/package-lock.json +++ b/pocs/xstate-study/package-lock.json @@ -15,1315 +15,2930 @@ "xstate": "^5.13.1" }, "devDependencies": { + "@types/jest": "^29.5.12", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.3", + "jest": "^29.7.0", + "ts-jest": "^29.1.4", "typescript": "^5" } }, - "node_modules/@babel/runtime": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", - "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.14.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@babel/code-frame": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", + "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "@babel/highlight": "^7.24.6", + "picocolors": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=6.9.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "node_modules/@babel/compat-data": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", + "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", "dev": true, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "node_modules/@babel/core": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz", + "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helpers": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/template": "^7.24.6", + "@babel/traverse": "^7.24.6", + "@babel/types": "^7.24.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz", + "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@babel/types": "^7.24.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" }, "engines": { - "node": ">=10.10.0" + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", + "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", "dev": true, - "engines": { - "node": ">=12.22" + "dependencies": { + "@babel/compat-data": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", + "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", + "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", "dev": true, "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", + "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "@babel/types": "^7.24.6" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/@babel/helper-module-imports": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz", + "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "@babel/types": "^7.24.6" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=6.9.0" } }, - "node_modules/@next/env": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", - "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", - "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz", + "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==", "dev": true, "dependencies": { - "glob": "10.3.10" + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-simple-access": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", - "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz", + "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", - "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@babel/helper-simple-access": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz", + "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.6" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", - "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", + "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.6" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", - "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/helper-string-parser": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", + "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", - "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", + "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", - "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/helper-validator-option": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz", + "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", - "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@babel/helpers": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz", + "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", - "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@babel/highlight": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", + "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.6", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", - "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">= 10" + "node": ">=4" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=0.8.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@babel/parser": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", "dev": true, - "optional": true, + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">=14" + "node": ">=6.0.0" } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", - "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==", - "dev": true - }, - "node_modules/@statelyai/inspect": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@statelyai/inspect/-/inspect-0.3.1.tgz", - "integrity": "sha512-KW3owf5UbPs1+/xOGJoSV4D69hP5xTX7PCzARr2R1senwfUIwyGP8yEsB8dvkMvekYvgFS0qa6lmg1eszYr2tw==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "dependencies": { - "fast-safe-stringify": "^2.1.1", - "isomorphic-ws": "^5.0.0", - "partysocket": "^0.0.25", - "safe-stable-stringify": "^2.4.3", - "superjson": "^1.13.3", - "uuid": "^9.0.1" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "xstate": "^5.5.1" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" - }, - "node_modules/@swc/helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", - "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "dependencies": { - "@swc/counter": "^0.1.3", - "tslib": "^2.4.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", - "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { - "@types/react": "*" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz", + "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz", + "integrity": "sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "eslint-visitor-keys": "^3.4.1" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "node_modules/@babel/runtime": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", + "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "regenerator-runtime": "^0.14.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=6.9.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@babel/template": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", + "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "dependencies": { + "@babel/code-frame": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node_modules/@babel/traverse": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz", + "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-hoist-variables": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6", + "debug": "^4.3.1", + "globals": "^11.1.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@babel/types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", + "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6.9.0" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { - "dequal": "^2.0.3" + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.10.0" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=12.22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "sprintf-js": "~1.0.2" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "possible-typed-array-names": "^1.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "dequal": "^2.0.3" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, "engines": { "node": ">=8" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, "dependencies": { - "streamsearch": "^1.1.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=10.16.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001627", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001627.tgz", - "integrity": "sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "jest-get-type": "^29.6.3" }, "engines": { - "node": ">=7.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, "dependencies": { - "is-what": "^4.1.8" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">= 8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "dependencies": { - "ms": "2.1.2" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/enhanced-resolve": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", - "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, "engines": { - "node": ">=10.13.0" + "node": ">=6.0.0" } }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.0.0" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } + "node_modules/@next/env": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", + "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "node_modules/@next/eslint-plugin-next": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", + "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, + "glob": "10.3.10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", + "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" + "node": ">= 10" } }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", + "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" + "node": ">= 10" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", + "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", + "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", + "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", + "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", + "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", + "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", + "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", + "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==", + "dev": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@statelyai/inspect": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@statelyai/inspect/-/inspect-0.3.1.tgz", + "integrity": "sha512-KW3owf5UbPs1+/xOGJoSV4D69hP5xTX7PCzARr2R1senwfUIwyGP8yEsB8dvkMvekYvgFS0qa6lmg1eszYr2tw==", + "dependencies": { + "fast-safe-stringify": "^2.1.1", + "isomorphic-ws": "^5.0.0", + "partysocket": "^0.0.25", + "safe-stable-stringify": "^2.4.3", + "superjson": "^1.13.3", + "uuid": "^9.0.1" + }, + "peerDependencies": { + "xstate": "^5.5.1" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + }, + "node_modules/@swc/helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "dependencies": { + "@swc/counter": "^0.1.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", + "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001627", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001627.tgz", + "integrity": "sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.788.tgz", + "integrity": "sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", + "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { @@ -1332,631 +2947,1203 @@ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.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.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", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz", + "integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "14.2.3", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "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" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/event-target-shim": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", + "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.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.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", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "@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" }, - "bin": { - "eslint": "bin/eslint.js" + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-config-next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz", - "integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "14.2.3", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + "to-regex-range": "^5.0.1" }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "is-callable": "^1.1.3" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "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" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=14" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "dependencies": { - "ms": "^2.1.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">=4" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "dependencies": { - "ms": "^2.1.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react": { - "version": "7.34.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", - "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.hasown": "^1.1.4", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11" - }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "node": ">=8.0.0" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { "node": ">=10" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "node_modules/get-tsconfig": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", "dev": true, "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { - "resolve": "bin/resolve" + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">=4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "engines": { - "node": ">=4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/event-target-shim": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", - "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "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" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=8.6.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "dependencies": { - "reusify": "^1.0.4" + "engines": { + "node": ">= 4" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -1965,27 +4152,38 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, "engines": { "node": ">= 0.4" }, @@ -1993,15 +4191,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2010,99 +4206,137 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-tsconfig": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", - "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "call-bind": "^1.0.2" }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=10.13.0" + "node": ">=0.10.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2111,84 +4345,53 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2196,11 +4399,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { "node": ">= 0.4" }, @@ -2208,13 +4414,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.3" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -2223,498 +4429,778 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { + "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "engines": { - "node": ">= 4" + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", "engines": { - "node": ">=0.8.19" + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/is-boolean-object": { + "node_modules/iterator.prototype": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "is-typed-array": "^1.1.13" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=0.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { - "which-typed-array": "^1.1.14" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-what": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { - "node": ">=12.13" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", - "peerDependencies": { - "ws": "*" + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "@isaacs/cliui": "^8.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/js-tokens": { @@ -2734,12 +5220,30 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2788,6 +5292,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -2806,6 +5319,15 @@ "node": ">=0.10" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2819,6 +5341,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2834,6 +5362,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2860,6 +5394,42 @@ "node": "14 || >=16.14" } }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2882,6 +5452,15 @@ "node": ">=8.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2990,6 +5569,39 @@ } } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3124,6 +5736,21 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -3171,6 +5798,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3183,6 +5819,24 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/partysocket": { "version": "0.0.25", "resolved": "https://registry.npmjs.org/partysocket/-/partysocket-0.0.25.tgz", @@ -3266,6 +5920,79 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -3311,6 +6038,51 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -3331,6 +6103,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3425,6 +6213,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -3442,6 +6239,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3460,6 +6278,15 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -3676,6 +6503,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3685,6 +6518,15 @@ "node": ">=8" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", @@ -3693,6 +6535,43 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -3701,6 +6580,19 @@ "node": ">=10.0.0" } }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -3875,6 +6767,15 @@ "node": ">=4" } }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -3953,12 +6854,62 @@ "node": ">=6" } }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3983,6 +6934,65 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-jest": { + "version": "29.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.4.tgz", + "integrity": "sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -4012,6 +7022,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -4131,6 +7150,36 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4152,6 +7201,29 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4355,6 +7427,25 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/ws": { "version": "8.17.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", @@ -4385,6 +7476,68 @@ "url": "https://opencollective.com/xstate" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/pocs/xstate-study/package.json b/pocs/xstate-study/package.json index 0d9ffff2c..59a384de6 100644 --- a/pocs/xstate-study/package.json +++ b/pocs/xstate-study/package.json @@ -7,7 +7,7 @@ "build": "next build", "start": "next start", "lint": "next lint", - "test": "" + "test": "jest" }, "dependencies": { "@statelyai/inspect": "^0.3.1", @@ -17,11 +17,14 @@ "xstate": "^5.13.1" }, "devDependencies": { + "@types/jest": "^29.5.12", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.3", + "jest": "^29.7.0", + "ts-jest": "^29.1.4", "typescript": "^5" } } From 5ad74ee6ad838f724badb2d4cc083c056b31ece4 Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Mon, 3 Jun 2024 20:10:40 +0200 Subject: [PATCH 232/253] =?UTF-8?q?=E2=9A=B0=EF=B8=8F=20(poc):=20Remove=20?= =?UTF-8?q?unused=20code=20in=20xtate-study?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pocs/xstate-study/app/favicon.ico | Bin 25931 -> 0 bytes pocs/xstate-study/app/globals.css | 107 ------------ pocs/xstate-study/app/page.module.css | 230 -------------------------- pocs/xstate-study/app/page.tsx | 10 +- pocs/xstate-study/public/next.svg | 1 - pocs/xstate-study/public/vercel.svg | 1 - 6 files changed, 1 insertion(+), 348 deletions(-) delete mode 100644 pocs/xstate-study/app/favicon.ico delete mode 100644 pocs/xstate-study/app/page.module.css delete mode 100644 pocs/xstate-study/public/next.svg delete mode 100644 pocs/xstate-study/public/vercel.svg diff --git a/pocs/xstate-study/app/favicon.ico b/pocs/xstate-study/app/favicon.ico deleted file mode 100644 index 718d6fea4835ec2d246af9800eddb7ffb276240c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/pocs/xstate-study/app/globals.css b/pocs/xstate-study/app/globals.css index f4bd77c0c..e69de29bb 100644 --- a/pocs/xstate-study/app/globals.css +++ b/pocs/xstate-study/app/globals.css @@ -1,107 +0,0 @@ -:root { - --max-width: 1100px; - --border-radius: 12px; - --font-mono: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", - "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", - "Fira Mono", "Droid Sans Mono", "Courier New", monospace; - - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; - - --primary-glow: conic-gradient( - from 180deg at 50% 50%, - #16abff33 0deg, - #0885ff33 55deg, - #54d6ff33 120deg, - #0071ff33 160deg, - transparent 360deg - ); - --secondary-glow: radial-gradient( - rgba(255, 255, 255, 1), - rgba(255, 255, 255, 0) - ); - - --tile-start-rgb: 239, 245, 249; - --tile-end-rgb: 228, 232, 233; - --tile-border: conic-gradient( - #00000080, - #00000040, - #00000030, - #00000020, - #00000010, - #00000010, - #00000080 - ); - - --callout-rgb: 238, 240, 241; - --callout-border-rgb: 172, 175, 176; - --card-rgb: 180, 185, 188; - --card-border-rgb: 131, 134, 135; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - - --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); - --secondary-glow: linear-gradient( - to bottom right, - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0.3) - ); - - --tile-start-rgb: 2, 13, 46; - --tile-end-rgb: 2, 5, 19; - --tile-border: conic-gradient( - #ffffff80, - #ffffff40, - #ffffff30, - #ffffff20, - #ffffff10, - #ffffff10, - #ffffff80 - ); - - --callout-rgb: 20, 20, 20; - --callout-border-rgb: 108, 108, 108; - --card-rgb: 100, 100, 100; - --card-border-rgb: 200, 200, 200; - } -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); -} - -a { - color: inherit; - text-decoration: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } -} diff --git a/pocs/xstate-study/app/page.module.css b/pocs/xstate-study/app/page.module.css deleted file mode 100644 index 5c4b1e6a2..000000000 --- a/pocs/xstate-study/app/page.module.css +++ /dev/null @@ -1,230 +0,0 @@ -.main { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - padding: 6rem; - min-height: 100vh; -} - -.description { - display: inherit; - justify-content: inherit; - align-items: inherit; - font-size: 0.85rem; - max-width: var(--max-width); - width: 100%; - z-index: 2; - font-family: var(--font-mono); -} - -.description a { - display: flex; - justify-content: center; - align-items: center; - gap: 0.5rem; -} - -.description p { - position: relative; - margin: 0; - padding: 1rem; - background-color: rgba(var(--callout-rgb), 0.5); - border: 1px solid rgba(var(--callout-border-rgb), 0.3); - border-radius: var(--border-radius); -} - -.code { - font-weight: 700; - font-family: var(--font-mono); -} - -.grid { - display: grid; - grid-template-columns: repeat(4, minmax(25%, auto)); - max-width: 100%; - width: var(--max-width); -} - -.card { - padding: 1rem 1.2rem; - border-radius: var(--border-radius); - background: rgba(var(--card-rgb), 0); - border: 1px solid rgba(var(--card-border-rgb), 0); - transition: background 200ms, border 200ms; -} - -.card span { - display: inline-block; - transition: transform 200ms; -} - -.card h2 { - font-weight: 600; - margin-bottom: 0.7rem; -} - -.card p { - margin: 0; - opacity: 0.6; - font-size: 0.9rem; - line-height: 1.5; - max-width: 30ch; - text-wrap: balance; -} - -.center { - display: flex; - justify-content: center; - align-items: center; - position: relative; - padding: 4rem 0; -} - -.center::before { - background: var(--secondary-glow); - border-radius: 50%; - width: 480px; - height: 360px; - margin-left: -400px; -} - -.center::after { - background: var(--primary-glow); - width: 240px; - height: 180px; - z-index: -1; -} - -.center::before, -.center::after { - content: ""; - left: 50%; - position: absolute; - filter: blur(45px); - transform: translateZ(0); -} - -.logo { - position: relative; -} -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - .card:hover { - background: rgba(var(--card-rgb), 0.1); - border: 1px solid rgba(var(--card-border-rgb), 0.15); - } - - .card:hover span { - transform: translateX(4px); - } -} - -@media (prefers-reduced-motion) { - .card:hover span { - transform: none; - } -} - -/* Mobile */ -@media (max-width: 700px) { - .content { - padding: 4rem; - } - - .grid { - grid-template-columns: 1fr; - margin-bottom: 120px; - max-width: 320px; - text-align: center; - } - - .card { - padding: 1rem 2.5rem; - } - - .card h2 { - margin-bottom: 0.5rem; - } - - .center { - padding: 8rem 0 6rem; - } - - .center::before { - transform: none; - height: 300px; - } - - .description { - font-size: 0.8rem; - } - - .description a { - padding: 1rem; - } - - .description p, - .description div { - display: flex; - justify-content: center; - position: fixed; - width: 100%; - } - - .description p { - align-items: center; - inset: 0 0 auto; - padding: 2rem 1rem 1.4rem; - border-radius: 0; - border: none; - border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); - background: linear-gradient( - to bottom, - rgba(var(--background-start-rgb), 1), - rgba(var(--callout-rgb), 0.5) - ); - background-clip: padding-box; - backdrop-filter: blur(24px); - } - - .description div { - align-items: flex-end; - pointer-events: none; - inset: auto 0 0; - padding: 2rem; - height: 200px; - background: linear-gradient( - to bottom, - transparent 0%, - rgb(var(--background-end-rgb)) 40% - ); - z-index: 1; - } -} - -/* Tablet and Smaller Desktop */ -@media (min-width: 701px) and (max-width: 1120px) { - .grid { - grid-template-columns: repeat(2, 50%); - } -} - -@media (prefers-color-scheme: dark) { - .vercelLogo { - filter: invert(1); - } - - .logo { - filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); - } -} - -@keyframes rotate { - from { - transform: rotate(360deg); - } - to { - transform: rotate(0deg); - } -} diff --git a/pocs/xstate-study/app/page.tsx b/pocs/xstate-study/app/page.tsx index 8856e1dc1..891c5d0a6 100644 --- a/pocs/xstate-study/app/page.tsx +++ b/pocs/xstate-study/app/page.tsx @@ -1,16 +1,8 @@ -"use client"; - -import { useEffect } from "react"; -import Image from "next/image"; -import styles from "./page.module.css"; import Machine from "./Machine"; export default function Home() { - useEffect(() => { - console.log("Hello, world!"); - }, []); return ( -
    +
    ); diff --git a/pocs/xstate-study/public/next.svg b/pocs/xstate-study/public/next.svg deleted file mode 100644 index 5174b28c5..000000000 --- a/pocs/xstate-study/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pocs/xstate-study/public/vercel.svg b/pocs/xstate-study/public/vercel.svg deleted file mode 100644 index d2f842227..000000000 --- a/pocs/xstate-study/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From f0a1d2249a809bf20774fbd3195ae26dd305712c Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Mon, 3 Jun 2024 20:17:52 +0200 Subject: [PATCH 233/253] =?UTF-8?q?=F0=9F=94=8A=20(poc):=20Update=20logs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pocs/xstate-study/app/Machine.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pocs/xstate-study/app/Machine.tsx b/pocs/xstate-study/app/Machine.tsx index 2ac7c0919..94e1fdee1 100644 --- a/pocs/xstate-study/app/Machine.tsx +++ b/pocs/xstate-study/app/Machine.tsx @@ -1,5 +1,5 @@ "use client"; -import { useEffect, memo } from "react"; +import { memo } from "react"; import makeOpenAppMachine from "./openAppStateMachine"; import { createActor } from "xstate"; import { createBrowserInspector } from "@statelyai/inspect"; @@ -10,7 +10,7 @@ const openAppMachine = makeOpenAppMachine(); function Machine() { const startMachine = () => { - console.log("machine: Hello, world!"); + console.log("Creating machine actor"); const openAppMachineActor = createActor(openAppMachine, { inspect: inspector.inspect, input: { From 568933b9fa260da8af4c4b5101b7ac00b2f72910 Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Mon, 3 Jun 2024 21:01:07 +0200 Subject: [PATCH 234/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(poc):=20Rename=20?= =?UTF-8?q?mocks=20in=20stubs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pocs/xstate-study/app/openAppStateMachine.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pocs/xstate-study/app/openAppStateMachine.ts b/pocs/xstate-study/app/openAppStateMachine.ts index e8a97a6ee..ed0598c45 100644 --- a/pocs/xstate-study/app/openAppStateMachine.ts +++ b/pocs/xstate-study/app/openAppStateMachine.ts @@ -21,7 +21,7 @@ export const APP_NOT_FOUND_ERROR = "App not installed"; export const OPEN_REJECTED_ERROR = "Open app rejected"; export const DEVICE_NOT_ONBOARDED_ERROR = "Device not onboarded"; -async function mockedGetAppAndVersion(): Promise<{ app: string, version: string }> { +async function getAppAndVersionStub(): Promise<{ app: string, version: string }> { console.log("getAppAndVersion"); await new Promise((resolve) => setTimeout(resolve, 1000)); const random = Math.random(); @@ -31,13 +31,13 @@ async function mockedGetAppAndVersion(): Promise<{ app: string, version: string throw new Error(LOCKED_DEVICE_ERROR); // 30% chance of locked device } -async function mockedCloseApp() { +async function closeAppStub() { console.log("closeApp") await new Promise((resolve) => setTimeout(resolve, 1000)); return; } -async function mockedOpenApp(appName: string) { +async function openAppStub(appName: string) { console.log("openApp") if (!appName) throw new Error("No app name provided"); await new Promise((resolve) => setTimeout(resolve, 1000)); @@ -52,9 +52,9 @@ function makeOpenAppMachine(params: { closeApp: () => Promise, openApp: (appName: string) => Promise, } = { - getAppAndVersion: mockedGetAppAndVersion, - closeApp: mockedCloseApp, - openApp: mockedOpenApp, + getAppAndVersion: getAppAndVersionStub, + closeApp: closeAppStub, + openApp: openAppStub, }) { return setup({ types: { From 14c60027e07db7094fa5927638d5a4793529c878 Mon Sep 17 00:00:00 2001 From: jz_ Date: Tue, 4 Jun 2024 11:25:38 +0200 Subject: [PATCH 235/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Improve=20polling?= =?UTF-8?q?=20behaviour?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device-session/model/DeviceSession.ts | 10 ++++-- .../model/DeviceSessionRefresher.ts | 36 +++++++++---------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/packages/core/src/internal/device-session/model/DeviceSession.ts b/packages/core/src/internal/device-session/model/DeviceSession.ts index 08ed98eda..8b9cb41b9 100644 --- a/packages/core/src/internal/device-session/model/DeviceSession.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.ts @@ -46,7 +46,8 @@ export class DeviceSession { { refreshInterval: 1000, deviceStatus: DeviceStatus.CONNECTED, - sendApduFn: (rawApdu: Uint8Array) => this.sendApdu(rawApdu), + sendApduFn: (rawApdu: Uint8Array) => + this.sendApdu(rawApdu, { isPolling: true }), updateStateFn: (state: DeviceSessionState) => this.setDeviceSessionState(state), }, @@ -79,8 +80,11 @@ export class DeviceSession { }); } - async sendApdu(rawApdu: Uint8Array) { - this.updateDeviceStatus(DeviceStatus.BUSY); + async sendApdu( + rawApdu: Uint8Array, + options: { isPolling: boolean } = { isPolling: false }, + ) { + if (!options.isPolling) this.updateDeviceStatus(DeviceStatus.BUSY); const errorOrResponse = await this._connectedDevice.sendApdu(rawApdu); diff --git a/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts b/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts index 58147a971..853afa607 100644 --- a/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts +++ b/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts @@ -14,8 +14,6 @@ import { SdkError } from "@api/Error"; import { ApduResponse, DeviceStatus } from "@api/index"; import { type LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { DeviceSessionRefresherError } from "./Errors"; - /** * The arguments for the DeviceSessionRefresher. */ @@ -82,29 +80,29 @@ export class DeviceSessionRefresher { this._logger.error("Error in sending APDU when polling", { data: { error }, }); - throw error; + return null; }, Right: (data: ApduResponse) => { - return this._getAppAndVersionCommand.parseResponse(data); + try { + return this._getAppAndVersionCommand.parseResponse(data); + } catch (error) { + this._logger.error("Error in parsing APDU response", { + data: { error }, + }); + return null; + } }, }), ), + filter((parsedResponse) => parsedResponse !== null), ) - .subscribe({ - next: (parsedResponse: GetAppAndVersionResponse) => { - // batteryStatus and firmwareVersion are not available in the polling response. - updateStateFn({ - sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel, - deviceStatus: this._deviceStatus, - currentApp: parsedResponse.name, - }); - }, - error: (error: Error) => { - const pollingError = new DeviceSessionRefresherError(error); - this._logger.error("Error in updating state when polling", { - data: { error: pollingError }, - }); - }, + .subscribe((parsedResponse: GetAppAndVersionResponse | null) => { + // batteryStatus and firmwareVersion are not available in the polling response. + updateStateFn({ + sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel, + deviceStatus: this._deviceStatus, + currentApp: parsedResponse!.name, + }); }); } From c761362523df7866820a1238af34e8fb17f82482 Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Tue, 4 Jun 2024 11:54:31 +0200 Subject: [PATCH 236/253] =?UTF-8?q?=E2=9C=A8=20(poc):=20Add=20userActionNe?= =?UTF-8?q?eded=20in=20context=20and=20add=20more=20logs=20on=20machine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pocs/xstate-study/app/Machine.tsx | 16 +++++++- pocs/xstate-study/app/openAppStateMachine.ts | 40 +++++++++++--------- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/pocs/xstate-study/app/Machine.tsx b/pocs/xstate-study/app/Machine.tsx index 94e1fdee1..e8c70eb6c 100644 --- a/pocs/xstate-study/app/Machine.tsx +++ b/pocs/xstate-study/app/Machine.tsx @@ -1,6 +1,6 @@ "use client"; import { memo } from "react"; -import makeOpenAppMachine from "./openAppStateMachine"; +import makeOpenAppMachine, { Context } from "./openAppStateMachine"; import { createActor } from "xstate"; import { createBrowserInspector } from "@statelyai/inspect"; @@ -22,8 +22,22 @@ function Machine() { }, }); + let previousUserActionNeeded: Context["userActionNeeded"] = null; + let previousStateValue: string | null = null; + openAppMachineActor.start(); openAppMachineActor.subscribe((state) => { + if (state.value !== previousStateValue) { + console.log("machine: new state", state.value); + previousStateValue = state.value; + } + if (state.context.userActionNeeded !== previousUserActionNeeded) { + console.log( + "machine: user action needed", + state.context.userActionNeeded + ); + previousUserActionNeeded = state.context.userActionNeeded; + } if (state.status === "done") { console.log("machine: done", state); console.log("machine output:", state.output); diff --git a/pocs/xstate-study/app/openAppStateMachine.ts b/pocs/xstate-study/app/openAppStateMachine.ts index ed0598c45..c416a8fdf 100644 --- a/pocs/xstate-study/app/openAppStateMachine.ts +++ b/pocs/xstate-study/app/openAppStateMachine.ts @@ -1,21 +1,6 @@ import { setup, fromPromise, assign, log } from "xstate"; -type DeviceSessionState = { - status: "Ready" | "Busy" | "Locked" | "NotConnected", - deviceOnboarded: boolean, -}; - -type Input = { - requestedAppName: string, - deviceSessionState: DeviceSessionState, -} - -type Context = Input & { - currentlyRunningApp: string | null; - error: Error | null; -} - export const LOCKED_DEVICE_ERROR = "Locked device"; export const APP_NOT_FOUND_ERROR = "App not installed"; export const OPEN_REJECTED_ERROR = "Open app rejected"; @@ -47,6 +32,22 @@ async function openAppStub(appName: string) { return; } +type DeviceSessionState = { + status: "Ready" | "Busy" | "Locked" | "NotConnected", + deviceOnboarded: boolean, +}; + +type Input = { + requestedAppName: string, + deviceSessionState: DeviceSessionState, +} + +export type Context = Input & { + currentlyRunningApp: string | null; + error: Error | null; + userActionNeeded: "OpenApp" | null; +} + function makeOpenAppMachine(params: { getAppAndVersion: () => Promise<{ app: string, version: string }>, closeApp: () => Promise, @@ -81,10 +82,12 @@ function makeOpenAppMachine(params: { }, actions: { assignErrorDeviceNotOnboarded: assign({error: new Error(DEVICE_NOT_ONBOARDED_ERROR)}), - assignErrorDeviceLocked: assign({error: new Error(LOCKED_DEVICE_ERROR)}) + assignErrorDeviceLocked: assign({error: new Error(LOCKED_DEVICE_ERROR)}), + assignUserActionNeededOpenApp: assign({userActionNeeded: "OpenApp"}), + assignNoUserActionNeeded: assign({userActionNeeded: null}), }, }).createMachine({ - /** @xstate-layout N4IgpgJg5mDOIC5QHkAOYB2BBVqAiYAbgJYDGYWpALsQPYYB0BJ5ASmAIYQCeAxANoAGALqJQqWrGI16YkAA9EAdgCMDAGyCVAVm3qAzAA4AnNq3bDAGhDdEKgCyGGpw4OMAmffbP37xgL7+1miYOPhEZBTUdIzIGABGtBwAThDEGFAAwgAWYKQA1gIichJSMhhyiggqggzugvbq2qr6Su7aKvr6Kta2CO5tGu7GhvrDKq4jxvaBwejYuMyRlOUMcYkpaRk5eYX8KqJIIKXSMZWI7uruDIYqKu53FtrGbYb2vRd+zg1vDuo67kasxAIQW4RYUVWABlaAV0llcgUiodxJJTrIjlUdAx7IJ9II2vj2ipjHjtB8EPpSTdLqY3B0Bn4lMDQWEluQVjEGDC4dtEXsDiU0eVzv0rjdtK1cQZLrjTBT9OonDUSZozAN7u0WfM2REOdF6AwwgAbMgccpYQgcYjGjjxY1gXgQehgBjpQi0fKu1mLPWQrkms0Wq02u0OhDu2HmmJCYSxoVlM6Y5QMQQPQzqdTGToWLOCck2RBNJQMZ4EwQNfNKSX6bWhX0QzmGwOkaP0S3W232x1gZLJWjJBioW1UABmA4AtmsdQ3lgbGC229gQ13w5HW+VY-GjicRcmxdpU117F5DO4TJLdBTLwx7lnGhX6mMVHWwez-c3cKaNzEdkjt6iiYYqAVT6N8xhGNWbSSpmKjqBShiSremiuPe7SNMyQQgjO4Jzqsi7lH+AooscwpJiBFxKGBSj2CqTSZvYwzwYWCCIWBcGCBmJLdKocGvrqjbzkwHCwNkGypERyIJuiFT7sSDBjDWEznlR7QUjUgjqBoHRKBB0pqgEWE+rh+qrHgIliUkEn8gIgo7mRwEKIgZiHppowTBB1aTOpFZaU0KhUb8NG4oY-GzqZXKZMakgUF+QYxE6LpuhgHpetO9YmR+jBRTFBExBGKVRpuIgAaRQGyRRCCOE4VIPEqtGKh5BZ9HcJgMKoHQVi0GYnmFmVNtl0WwLFw7xfQvC9v2g7Dua47JFOxnvgNDA5cNeX0AVHo-vQW7FPZ5Wiq8pZKpxSoTHiEw+f87U6F0hi6Xo1a1kZOFLUJxnfkuiUYK6kZpYtfrLR9Y0YJtRUxiVe2ATJooDNcgKaYxiqIfdSjqbi1z3HcF09SeMwvRlb2rMD20YBNfYDkOI5zQtr2A+9OGfeUYOk7tJG7uRTlVWeN2mKSJ5w2e6ndGBvi6BBhiuH46h9UTAZxaT7BcHwpUc45VSqBo5j2ISkvNMYzEtZoJbtEoNE5sYBu9cCGC0BAcByADgl7tDLtcwAtNo9jtXi9QZuouI1No7jqRo6iqAbRioRpnGy-TZl+krPDSW7VSMQhThKJopjB887gPC8cfO1y6xWVsCK7CnnNVJ4OJvF4xucW80wUg88O3M03gPBWzRF3hXI8vk8JEVX6uIK0paefougXhMaMsV0tQDNmNFGEqSqhQTb7x-Lo2kx2obdqPFUe1pSi+6dAdaPml0sZK1xvJLmmeGb+LPXMhM75+e9LiP+0w3Jb2HhJjnlaAYXS+YKRKFcDcNM-xWjnwmAFPuEVDTmVEuJCAf9XbVwuOKK4WZVCAg8kLFi0w1BUS9lRAw09TDv2wp-YuhpVojSZpzNWJ806jHaq0A2VszBtAGD5QYGZ84PGPG4LUW8BL90NCTJcx9YYWFLDoPQ4dSSWy0OpYY7F7gVgJK4LqmEP7byYQuBWS4k59BwWPfoh5g5eA6G8QE09pTqV0LUUwVFOJmwMFcfGJiZGoMYAAZQAK6kHILAeA-9U6IFxGHaUjFJaZmeO8FicEA51DuqoNoaZ8woKygwAAohTZIij9ykhLGmcYWZQFaGMOpBi2TeEdDuN0EYgRAhAA */ + /** @xstate-layout N4IgpgJg5mDOIC5QHkAOYB2BBVqAiYAbgJYDGYWpALsQPYYB0BJ5ASmAIYQCeAxANoAGALqJQqWrGI16YkAA9EAdgCMDAGyCVAVm3qAzAA4AnNq3bDAGhDdEKgCyGGpw4OMAmffbP37xgL7+1miYOPhEZBTUdIzIGABGtBwAThDEGFAAwgAWYKQA1gIichJSMhhyiggqggzugvbq2qr6Su7aKvr6Kta2CO5tGu7GhvrDKq4jxvaBwejYuMyRlOUMcYkpaRk5eYX8KqJIIKXSMZWI7uruDIYqKu53FtrGbYb2vRd+zg1vDuo67kasxAIQW4RYUVWABlaAV0llcgUiodxJJTrIjlUdAx7IJ9II2vj2ipjHjtB8EPpSTdLqY3B0Bn4lMDQWEluQVjEGDC4dtEXsDiU0eVzv0rjdtK1cQZLrjTBT9OonDUSZozAN7u0WfM2REOdF6AwwgAbMgccpYQgcYjGjjxY1gXgQehgBjpQi0fKu1mLPWQrkms0Wq02u0OhDu2HmmJCYSxoVlM6Y5QMQQPQzqdTGToWLOCck2RBNJQMZ4EwQNfNKSX6bWhX0QzmGwOkaP0S3W232x1gZLJWjJBioW1UABmA4AtmsdQ3lgbGC229gQ13w5HW+VY-GjicRcmxdpU117F5DO4TJLdBTLwx7lnGhX6mMVHWwez-c3cKaNzEdkjt6iiYYqAVT6N8xhGNWbSSpmKjqBShiSremiuPe7SNMyQQgjO4Jzqsi7lH+AooscwpJiBFxKGBSj2CqTSZvYwzwYWCCIWBcGCBmJLdKocGvrqjbzkwHCwNkGypERyIJuiFT7sSDBjDWEznlR7QUjUgjqBoHRKBB0pqgEWE+rh+qrHgIliUkEn8gIgo7mRwEKIgZiHppowTBB1aTOpFZaU0KhUb8NG4oY-GzqZXKZMakgUF+QYxE6LpuhgHpetO9YmR+jBRTFBExBGKVRpuIgAaRQGyRRCCOE4VIPEqtGKh5BZ9HcJgMKoHQVi0GYnmFmVNtl0WwLFw7xfQvC9v2g7Dua47JFOxnvgNDA5cNeX0AVHo-vQW7FPZ5Wiq8pZKpxSoTHiEw+f87U6F0hi6Xo1a1kZOFLUJxnfkuiUYK6kZpYtfrLR9Y0YJtRUxiVe2ATJooDNczzQaoEH3G06nePYClqnodxGAYL4vRlb2rMD20YBNfYDkOI5zQtr2A+9OGfeUYOk7tJG7uRTkIP8GOcYxiEElmJhWCxnT3HUwwNAZShXDMBNvvT+FxaT7BcHwpUc45VSqBo5j2IShiIbpzEtZoJbtEoNE5sYxjqL1wIYLQEBwHIAOCXu0Me1zAC02gY0oeL1BmdtaPm7jqRo6iqNWfjngMzzqH1RNcu+qs8NJXtVIxCFODL9LaO0HgPC8SeK1y6xWVsCK7BnnNVJ4OJvF4ZucW80wUg81znjoNEFxpzSl+7XI8vk8JEbXWuIK0paefougXhMSgKvidS6QFJ4ZpvoXywJeEBsrS4dqG3YTxVPtaQHYynSHNQdCLfSStcbyG5pniW-iz1zITZefqNpPj-tGGckMYeEmOeVoBhdL5gpEoVwNw0z-FaAHCYAVB570NOZUS4kIAAM9nXC44orhZlUICDyZ4KTTDUFRP2VEDBz1MJ-bC38h6GlWiNJmnNNZnyzqMdqrRba228ASdwAwfKDAzCIh4x43Bah3uFLK6UwQcMclw2GFhSw6D0FHUkNstDqWGOxe4FYCSuC6phL+CsWELgPuUNOfQ8GT36IeAuXg76MRPH7TS6ldC1FMFRTilsDCyzQRFQ0ABlAArqQcgsB4CAMzogXEkdpT82Ds8d4osGJ1DutHeo9RtAhIUQAUQpskU+opSQljTOMLM4CtDGHUlkzw-COg4xJNvQIQA */ id: "OpenAppDeviceAction", initial: "DeviceReady", context: ({input}): Context => { @@ -92,6 +95,7 @@ function makeOpenAppMachine(params: { ...input, currentlyRunningApp: null, error: null, + userActionNeeded: null, } }, states: { @@ -176,6 +180,8 @@ function makeOpenAppMachine(params: { }, OpenApplication: { // execute openApp command, + entry: "assignUserActionNeededOpenApp", + exit: "assignNoUserActionNeeded", invoke: { src: "openApp", input: ({context}) => ({appName: context.requestedAppName}), From d48beaf5f604a362e14e004c0618557dbbe6c06a Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 7 Jun 2024 17:46:25 +0200 Subject: [PATCH 237/253] =?UTF-8?q?=F0=9F=94=A5=20(pocs):=20Removed=20pocs?= =?UTF-8?q?=20folder=20from=20this=20repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pocs can be found in ledgerhq/dxp-sandbox --- pocs/ble-app/.gitignore | 23 - pocs/ble-app/README.md | 46 - pocs/ble-app/package.json | 46 - pocs/ble-app/public/favicon.ico | Bin 3870 -> 0 bytes pocs/ble-app/public/index.html | 43 - pocs/ble-app/public/logo192.png | Bin 5347 -> 0 bytes pocs/ble-app/public/logo512.png | Bin 9664 -> 0 bytes pocs/ble-app/public/manifest.json | 25 - pocs/ble-app/public/robots.txt | 3 - pocs/ble-app/src/App.css | 42 - pocs/ble-app/src/App.test.tsx | 9 - pocs/ble-app/src/App.tsx | 75 - pocs/ble-app/src/index.css | 13 - pocs/ble-app/src/index.tsx | 19 - pocs/ble-app/src/react-app-env.d.ts | 1 - pocs/ble-app/src/reportWebVitals.ts | 15 - pocs/ble-app/src/setupTests.ts | 5 - pocs/ble-app/tsconfig.json | 26 - pocs/fp-libraries/.eslintrc.json | 3 - pocs/fp-libraries/.gitignore | 36 - pocs/fp-libraries/README.md | 36 - pocs/fp-libraries/app/common/global.css | 3 - pocs/fp-libraries/app/common/page.module.css | 31 - pocs/fp-libraries/app/common/types.ts | 26 - pocs/fp-libraries/app/effect/page.tsx | 80 - pocs/fp-libraries/app/effect/utils.ts | 70 - pocs/fp-libraries/app/favicon.ico | Bin 25931 -> 0 bytes pocs/fp-libraries/app/globals.css | 107 - pocs/fp-libraries/app/layout.tsx | 22 - pocs/fp-libraries/app/page.module.css | 229 - pocs/fp-libraries/app/page.tsx | 107 - pocs/fp-libraries/app/purify-ts/page.tsx | 80 - pocs/fp-libraries/app/purify-ts/utils.ts | 69 - pocs/fp-libraries/next.config.js | 4 - pocs/fp-libraries/package-lock.json | 3728 ---------- pocs/fp-libraries/package.json | 26 - pocs/fp-libraries/public/next.svg | 1 - pocs/fp-libraries/public/vercel.svg | 1 - pocs/fp-libraries/tsconfig.json | 27 - pocs/tsyringe-sample/package-lock.json | 6334 ----------------- pocs/tsyringe-sample/package.json | 16 - pocs/tsyringe-sample/src/api/DeviceSdk.ts | 11 - .../src/api/DeviceSdkBuilder.ts | 12 - pocs/tsyringe-sample/src/api/apiModule.ts | 6 - pocs/tsyringe-sample/src/index.ts | 8 - .../src/transports/Transport.ts | 7 - .../src/transports/ble/BleTransport.ts | 9 - .../src/transports/ble/bleModule.ts | 3 - .../src/transports/model/Response.ts | 4 - .../src/transports/transportsModule.ts | 0 pocs/tsyringe-sample/tsconfig.json | 20 - pocs/web-hid-api/README.md | 15 - pocs/web-hid-api/index.html | 11 - pocs/web-hid-api/index.js | 168 - 54 files changed, 11701 deletions(-) delete mode 100644 pocs/ble-app/.gitignore delete mode 100644 pocs/ble-app/README.md delete mode 100644 pocs/ble-app/package.json delete mode 100644 pocs/ble-app/public/favicon.ico delete mode 100644 pocs/ble-app/public/index.html delete mode 100644 pocs/ble-app/public/logo192.png delete mode 100644 pocs/ble-app/public/logo512.png delete mode 100644 pocs/ble-app/public/manifest.json delete mode 100644 pocs/ble-app/public/robots.txt delete mode 100644 pocs/ble-app/src/App.css delete mode 100644 pocs/ble-app/src/App.test.tsx delete mode 100644 pocs/ble-app/src/App.tsx delete mode 100644 pocs/ble-app/src/index.css delete mode 100644 pocs/ble-app/src/index.tsx delete mode 100644 pocs/ble-app/src/react-app-env.d.ts delete mode 100644 pocs/ble-app/src/reportWebVitals.ts delete mode 100644 pocs/ble-app/src/setupTests.ts delete mode 100644 pocs/ble-app/tsconfig.json delete mode 100644 pocs/fp-libraries/.eslintrc.json delete mode 100644 pocs/fp-libraries/.gitignore delete mode 100644 pocs/fp-libraries/README.md delete mode 100644 pocs/fp-libraries/app/common/global.css delete mode 100644 pocs/fp-libraries/app/common/page.module.css delete mode 100644 pocs/fp-libraries/app/common/types.ts delete mode 100644 pocs/fp-libraries/app/effect/page.tsx delete mode 100644 pocs/fp-libraries/app/effect/utils.ts delete mode 100644 pocs/fp-libraries/app/favicon.ico delete mode 100644 pocs/fp-libraries/app/globals.css delete mode 100644 pocs/fp-libraries/app/layout.tsx delete mode 100644 pocs/fp-libraries/app/page.module.css delete mode 100644 pocs/fp-libraries/app/page.tsx delete mode 100644 pocs/fp-libraries/app/purify-ts/page.tsx delete mode 100644 pocs/fp-libraries/app/purify-ts/utils.ts delete mode 100644 pocs/fp-libraries/next.config.js delete mode 100644 pocs/fp-libraries/package-lock.json delete mode 100644 pocs/fp-libraries/package.json delete mode 100644 pocs/fp-libraries/public/next.svg delete mode 100644 pocs/fp-libraries/public/vercel.svg delete mode 100644 pocs/fp-libraries/tsconfig.json delete mode 100644 pocs/tsyringe-sample/package-lock.json delete mode 100644 pocs/tsyringe-sample/package.json delete mode 100644 pocs/tsyringe-sample/src/api/DeviceSdk.ts delete mode 100644 pocs/tsyringe-sample/src/api/DeviceSdkBuilder.ts delete mode 100644 pocs/tsyringe-sample/src/api/apiModule.ts delete mode 100644 pocs/tsyringe-sample/src/index.ts delete mode 100644 pocs/tsyringe-sample/src/transports/Transport.ts delete mode 100644 pocs/tsyringe-sample/src/transports/ble/BleTransport.ts delete mode 100644 pocs/tsyringe-sample/src/transports/ble/bleModule.ts delete mode 100644 pocs/tsyringe-sample/src/transports/model/Response.ts delete mode 100644 pocs/tsyringe-sample/src/transports/transportsModule.ts delete mode 100644 pocs/tsyringe-sample/tsconfig.json delete mode 100644 pocs/web-hid-api/README.md delete mode 100644 pocs/web-hid-api/index.html delete mode 100644 pocs/web-hid-api/index.js diff --git a/pocs/ble-app/.gitignore b/pocs/ble-app/.gitignore deleted file mode 100644 index 4d29575de..000000000 --- a/pocs/ble-app/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/pocs/ble-app/README.md b/pocs/ble-app/README.md deleted file mode 100644 index b87cb0044..000000000 --- a/pocs/ble-app/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Getting Started with Create React App - -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -## Available Scripts - -In the project directory, you can run: - -### `npm start` - -Runs the app in the development mode.\ -Open [http://localhost:3000](http://localhost:3000) to view it in the browser. - -The page will reload if you make edits.\ -You will also see any lint errors in the console. - -### `npm test` - -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `npm run build` - -Builds the app for production to the `build` folder.\ -It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.\ -Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `npm run eject` - -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** - -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. - -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/pocs/ble-app/package.json b/pocs/ble-app/package.json deleted file mode 100644 index 72aa9a3ed..000000000 --- a/pocs/ble-app/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "ble-app", - "version": "0.1.0", - "private": true, - "dependencies": { - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "@types/jest": "^27.5.2", - "@types/node": "^16.18.55", - "@types/react": "^18.2.24", - "@types/react-dom": "^18.2.8", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-scripts": "5.0.1", - "typescript": "^4.9.5", - "web-vitals": "^2.1.4" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - "@types/web-bluetooth": "^0.0.18" - } -} diff --git a/pocs/ble-app/public/favicon.ico b/pocs/ble-app/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/pocs/ble-app/public/index.html b/pocs/ble-app/public/index.html deleted file mode 100644 index aa069f27c..000000000 --- a/pocs/ble-app/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - React App - - - -
    - - - diff --git a/pocs/ble-app/public/logo192.png b/pocs/ble-app/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/pocs/ble-app/public/manifest.json b/pocs/ble-app/public/manifest.json deleted file mode 100644 index 080d6c77a..000000000 --- a/pocs/ble-app/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/pocs/ble-app/public/robots.txt b/pocs/ble-app/public/robots.txt deleted file mode 100644 index e9e57dc4d..000000000 --- a/pocs/ble-app/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/pocs/ble-app/src/App.css b/pocs/ble-app/src/App.css deleted file mode 100644 index 74ec76d7f..000000000 --- a/pocs/ble-app/src/App.css +++ /dev/null @@ -1,42 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -.error { - color: red; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/pocs/ble-app/src/App.test.tsx b/pocs/ble-app/src/App.test.tsx deleted file mode 100644 index 2a68616d9..000000000 --- a/pocs/ble-app/src/App.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/pocs/ble-app/src/App.tsx b/pocs/ble-app/src/App.tsx deleted file mode 100644 index d4845ea69..000000000 --- a/pocs/ble-app/src/App.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import './App.css'; -import {useCallback, useState} from "react"; - -function App() { - const [devices, setDevices] = useState>([]); - const [getDeviceError, setGetDeviceError] = useState(""); - const [requestDeviceError, setRequestDeviceError] = useState(""); - - const requestDevice = useCallback(async () => { - try { - setRequestDeviceError(""); - const device = await navigator.bluetooth.requestDevice({ - acceptAllDevices: true - }); - setDevices([device]) - } catch (error) { - setRequestDeviceError((error as Error).message); - setDevices([]); - console.error(error); - } - }, []) - - const getDevices = useCallback(async () => { - try { - setGetDeviceError(""); - const devices = await navigator.bluetooth.getDevices(); - setDevices(devices); - if (!devices.length) { - throw new Error("getDevices got 0 devices"); - } - } catch (error) { - setGetDeviceError((error as Error).message); - setDevices([]); - console.error(error); - await requestDevice(); - } - }, []) - return ( - - ); -} - -export default App; diff --git a/pocs/ble-app/src/index.css b/pocs/ble-app/src/index.css deleted file mode 100644 index ec2585e8c..000000000 --- a/pocs/ble-app/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/pocs/ble-app/src/index.tsx b/pocs/ble-app/src/index.tsx deleted file mode 100644 index 032464fb6..000000000 --- a/pocs/ble-app/src/index.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App'; -import reportWebVitals from './reportWebVitals'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement -); -root.render( - - - -); - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/pocs/ble-app/src/react-app-env.d.ts b/pocs/ble-app/src/react-app-env.d.ts deleted file mode 100644 index 6431bc5fc..000000000 --- a/pocs/ble-app/src/react-app-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/pocs/ble-app/src/reportWebVitals.ts b/pocs/ble-app/src/reportWebVitals.ts deleted file mode 100644 index 49a2a16e0..000000000 --- a/pocs/ble-app/src/reportWebVitals.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ReportHandler } from 'web-vitals'; - -const reportWebVitals = (onPerfEntry?: ReportHandler) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/pocs/ble-app/src/setupTests.ts b/pocs/ble-app/src/setupTests.ts deleted file mode 100644 index 8f2609b7b..000000000 --- a/pocs/ble-app/src/setupTests.ts +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/pocs/ble-app/tsconfig.json b/pocs/ble-app/tsconfig.json deleted file mode 100644 index a273b0cfc..000000000 --- a/pocs/ble-app/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx" - }, - "include": [ - "src" - ] -} diff --git a/pocs/fp-libraries/.eslintrc.json b/pocs/fp-libraries/.eslintrc.json deleted file mode 100644 index bffb357a7..000000000 --- a/pocs/fp-libraries/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/pocs/fp-libraries/.gitignore b/pocs/fp-libraries/.gitignore deleted file mode 100644 index fd3dbb571..000000000 --- a/pocs/fp-libraries/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/pocs/fp-libraries/README.md b/pocs/fp-libraries/README.md deleted file mode 100644 index c4033664f..000000000 --- a/pocs/fp-libraries/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/pocs/fp-libraries/app/common/global.css b/pocs/fp-libraries/app/common/global.css deleted file mode 100644 index 74916a9fc..000000000 --- a/pocs/fp-libraries/app/common/global.css +++ /dev/null @@ -1,3 +0,0 @@ -body { - min-height: fit-content; -} diff --git a/pocs/fp-libraries/app/common/page.module.css b/pocs/fp-libraries/app/common/page.module.css deleted file mode 100644 index ef3bde0ad..000000000 --- a/pocs/fp-libraries/app/common/page.module.css +++ /dev/null @@ -1,31 +0,0 @@ -.main, -.searchMain { - display: flex; - align-items: center; - justify-content: center; - padding: 20px; -} - -.sub { - flex-direction: column; -} - -.searchMain { - justify-content: space-around; -} - -.search { - flex-grow: 1; - padding: 5px; - outline: none; - border-radius: 5px; -} - -.button { - padding: 5px; - background-color: #f0c; - color: white; - border-color: #f0c; - margin-left: 20px; - border-radius: 5px; -} diff --git a/pocs/fp-libraries/app/common/types.ts b/pocs/fp-libraries/app/common/types.ts deleted file mode 100644 index 09c969416..000000000 --- a/pocs/fp-libraries/app/common/types.ts +++ /dev/null @@ -1,26 +0,0 @@ -export class PokeApiError { - readonly _tag = "PokeApiError"; - message: string; - constructor(message: string) { - this.message = message; - } -} - -export interface MoveMeta { - move: { - name: string; - url: string; - }; -} - -export interface Pokemon { - id: number; - name: string; - moves: MoveMeta[]; -} - -export interface Move { - name: string; - power: number; - pp: number; -} diff --git a/pocs/fp-libraries/app/effect/page.tsx b/pocs/fp-libraries/app/effect/page.tsx deleted file mode 100644 index 71d0f4e4f..000000000 --- a/pocs/fp-libraries/app/effect/page.tsx +++ /dev/null @@ -1,80 +0,0 @@ -"use client"; - -import { SyntheticEvent, useRef, useState } from "react"; -import { Move } from "../common/types"; -import "../common/global.css"; -import styles from "../common/page.module.css"; -import { findStrongestMoveGen } from "./utils"; -import { Effect } from "effect"; - -export default function Page() { - const inputRef = useRef(null); - const [result, setResult] = useState(); - const [pokemon, setPokemon] = useState(); - const [error, setError] = useState(); - - const onClick = async ( - e: SyntheticEvent - ) => { - e.preventDefault(); - if (!inputRef?.current?.value) return; - - Effect.runPromise( - findStrongestMoveGen(inputRef.current.value).pipe( - Effect.catchAll((err) => { - setResult(null); - setPokemon(""); - setError(err.message); - return Effect.fail(err); - }) - ) - ).then((move) => { - setResult(move); - setPokemon(inputRef?.current?.value); - setError(null); - }); - }; - - return ( - <> -
    -

    Effect Example

    -
    -
    - - -
    - {error ? ( -
    -

    Error

    -
    -

    {error}

    -
    -
    - ) : null} - {result ? ( -
    -

    Result

    -
    -
      -
    • - Name: {pokemon} -
    • -
    • - Move name: {result.name.split("-").join(" ")} -
    • -
    • - Power: {result.power} -
    • -
    • - PP: {result.pp} -
    • -
    -
    -
    - ) : null} - - ); -} diff --git a/pocs/fp-libraries/app/effect/utils.ts b/pocs/fp-libraries/app/effect/utils.ts deleted file mode 100644 index 7e35fbdd8..000000000 --- a/pocs/fp-libraries/app/effect/utils.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Effect, pipe } from "effect"; -import { Move, PokeApiError, Pokemon } from "../common/types"; - -const POKEAPI_BASE = "https://pokeapi.co/api/v2"; -const POKEMON_DOMAIN = "pokemon"; - -export const fetchPokemonData = (pokemon: string) => - Effect.tryPromise({ - try: async () => { - const url = `${POKEAPI_BASE}/${POKEMON_DOMAIN}/${pokemon}`; - const res = await fetch(url); - const json = await res.json(); - return json as Pokemon; - }, - catch: (err) => - new PokeApiError(`Could not find informations for ${pokemon}`), - }); - -export const fetchMove = (url: string) => - Effect.tryPromise({ - try: async () => { - const res = await fetch(url); - const json = await res.json(); - return json as Move; - }, - catch: (err) => new PokeApiError(`could not get move: ${err}`), - }); - -export const findStrongest = (moves: Move[]): Move => - moves.reduce( - (acc, { power, pp, name }) => { - if (power > acc.power) { - return { - power, - pp, - name, - }; - } - - return acc; - }, - { power: 0, pp: 0, name: "" } - ); - -export const findStrongestMove = (search: string) => - pipe( - // Fetch all the Pokemon - fetchPokemonData(search), - // Get all the moves - Effect.map((a) => a.moves), - // Using flatMap as we return another layer of Effect - Effect.flatMap((moves) => { - const seq = moves.map((m) => m.move.url); - // Like Promise.all but with better concurrency options, also handles Effect - return Effect.all(seq.map((s) => fetchMove(s))); - }), - // Find - Effect.map(findStrongest) - ); - -export const findStrongestMoveGen = (pokemon: string) => - Effect.gen(function* (_) { - const pokemons = yield* _(fetchPokemonData(pokemon)); - const movesData = pokemons.moves; - const moves = yield* _( - Effect.all(movesData.map((move) => fetchMove(move.move.url))) - ); - const move = findStrongest(moves); - return move; - }); diff --git a/pocs/fp-libraries/app/favicon.ico b/pocs/fp-libraries/app/favicon.ico deleted file mode 100644 index 718d6fea4835ec2d246af9800eddb7ffb276240c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/pocs/fp-libraries/app/globals.css b/pocs/fp-libraries/app/globals.css deleted file mode 100644 index e1b5c67fa..000000000 --- a/pocs/fp-libraries/app/globals.css +++ /dev/null @@ -1,107 +0,0 @@ -:root { - --max-width: 1100px; - --border-radius: 12px; - --font-mono: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", - "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", - "Fira Mono", "Droid Sans Mono", "Courier New", monospace; - - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; - - --primary-glow: conic-gradient( - from 180deg at 50% 50%, - #16abff33 0deg, - #0885ff33 55deg, - #54d6ff33 120deg, - #0071ff33 160deg, - transparent 360deg - ); - --secondary-glow: radial-gradient( - rgba(255, 255, 255, 1), - rgba(255, 255, 255, 0) - ); - - --tile-start-rgb: 239, 245, 249; - --tile-end-rgb: 228, 232, 233; - --tile-border: conic-gradient( - #00000080, - #00000040, - #00000030, - #00000020, - #00000010, - #00000010, - #00000080 - ); - - --callout-rgb: 238, 240, 241; - --callout-border-rgb: 172, 175, 176; - --card-rgb: 180, 185, 188; - --card-border-rgb: 131, 134, 135; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - - --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); - --secondary-glow: linear-gradient( - to bottom right, - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0.3) - ); - - --tile-start-rgb: 2, 13, 46; - --tile-end-rgb: 2, 5, 19; - --tile-border: conic-gradient( - #ffffff80, - #ffffff40, - #ffffff30, - #ffffff20, - #ffffff10, - #ffffff10, - #ffffff80 - ); - - --callout-rgb: 20, 20, 20; - --callout-border-rgb: 108, 108, 108; - --card-rgb: 100, 100, 100; - --card-border-rgb: 200, 200, 200; - } -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: rgb(var(--foreground-rgb)); - /* background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); */ -} - -a { - color: inherit; - text-decoration: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } -} diff --git a/pocs/fp-libraries/app/layout.tsx b/pocs/fp-libraries/app/layout.tsx deleted file mode 100644 index 40e027fbe..000000000 --- a/pocs/fp-libraries/app/layout.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { Metadata } from 'next' -import { Inter } from 'next/font/google' -import './globals.css' - -const inter = Inter({ subsets: ['latin'] }) - -export const metadata: Metadata = { - title: 'Create Next App', - description: 'Generated by create next app', -} - -export default function RootLayout({ - children, -}: { - children: React.ReactNode -}) { - return ( - - {children} - - ) -} diff --git a/pocs/fp-libraries/app/page.module.css b/pocs/fp-libraries/app/page.module.css deleted file mode 100644 index 6676d2c66..000000000 --- a/pocs/fp-libraries/app/page.module.css +++ /dev/null @@ -1,229 +0,0 @@ -.main { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - padding: 6rem; - min-height: 100vh; -} - -.description { - display: inherit; - justify-content: inherit; - align-items: inherit; - font-size: 0.85rem; - max-width: var(--max-width); - width: 100%; - z-index: 2; - font-family: var(--font-mono); -} - -.description a { - display: flex; - justify-content: center; - align-items: center; - gap: 0.5rem; -} - -.description p { - position: relative; - margin: 0; - padding: 1rem; - background-color: rgba(var(--callout-rgb), 0.5); - border: 1px solid rgba(var(--callout-border-rgb), 0.3); - border-radius: var(--border-radius); -} - -.code { - font-weight: 700; - font-family: var(--font-mono); -} - -.grid { - display: grid; - grid-template-columns: repeat(4, minmax(25%, auto)); - max-width: 100%; - width: var(--max-width); -} - -.card { - padding: 1rem 1.2rem; - border-radius: var(--border-radius); - background: rgba(var(--card-rgb), 0); - border: 1px solid rgba(var(--card-border-rgb), 0); - transition: background 200ms, border 200ms; -} - -.card span { - display: inline-block; - transition: transform 200ms; -} - -.card h2 { - font-weight: 600; - margin-bottom: 0.7rem; -} - -.card p { - margin: 0; - opacity: 0.6; - font-size: 0.9rem; - line-height: 1.5; - max-width: 30ch; -} - -.center { - display: flex; - justify-content: center; - align-items: center; - position: relative; - padding: 4rem 0; -} - -.center::before { - background: var(--secondary-glow); - border-radius: 50%; - width: 480px; - height: 360px; - margin-left: -400px; -} - -.center::after { - background: var(--primary-glow); - width: 240px; - height: 180px; - z-index: -1; -} - -.center::before, -.center::after { - content: ''; - left: 50%; - position: absolute; - filter: blur(45px); - transform: translateZ(0); -} - -.logo { - position: relative; -} -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - .card:hover { - background: rgba(var(--card-rgb), 0.1); - border: 1px solid rgba(var(--card-border-rgb), 0.15); - } - - .card:hover span { - transform: translateX(4px); - } -} - -@media (prefers-reduced-motion) { - .card:hover span { - transform: none; - } -} - -/* Mobile */ -@media (max-width: 700px) { - .content { - padding: 4rem; - } - - .grid { - grid-template-columns: 1fr; - margin-bottom: 120px; - max-width: 320px; - text-align: center; - } - - .card { - padding: 1rem 2.5rem; - } - - .card h2 { - margin-bottom: 0.5rem; - } - - .center { - padding: 8rem 0 6rem; - } - - .center::before { - transform: none; - height: 300px; - } - - .description { - font-size: 0.8rem; - } - - .description a { - padding: 1rem; - } - - .description p, - .description div { - display: flex; - justify-content: center; - position: fixed; - width: 100%; - } - - .description p { - align-items: center; - inset: 0 0 auto; - padding: 2rem 1rem 1.4rem; - border-radius: 0; - border: none; - border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); - background: linear-gradient( - to bottom, - rgba(var(--background-start-rgb), 1), - rgba(var(--callout-rgb), 0.5) - ); - background-clip: padding-box; - backdrop-filter: blur(24px); - } - - .description div { - align-items: flex-end; - pointer-events: none; - inset: auto 0 0; - padding: 2rem; - height: 200px; - background: linear-gradient( - to bottom, - transparent 0%, - rgb(var(--background-end-rgb)) 40% - ); - z-index: 1; - } -} - -/* Tablet and Smaller Desktop */ -@media (min-width: 701px) and (max-width: 1120px) { - .grid { - grid-template-columns: repeat(2, 50%); - } -} - -@media (prefers-color-scheme: dark) { - .vercelLogo { - filter: invert(1); - } - - .logo { - filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); - } -} - -@keyframes rotate { - from { - transform: rotate(360deg); - } - to { - transform: rotate(0deg); - } -} diff --git a/pocs/fp-libraries/app/page.tsx b/pocs/fp-libraries/app/page.tsx deleted file mode 100644 index 31066944d..000000000 --- a/pocs/fp-libraries/app/page.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import Image from "next/image"; -import styles from "./page.module.css"; - -export default function Home() { - return ( - - ); -} diff --git a/pocs/fp-libraries/app/purify-ts/page.tsx b/pocs/fp-libraries/app/purify-ts/page.tsx deleted file mode 100644 index 8f78c9351..000000000 --- a/pocs/fp-libraries/app/purify-ts/page.tsx +++ /dev/null @@ -1,80 +0,0 @@ -"use client"; - -import { SyntheticEvent, useRef, useState } from "react"; -import { Move } from "../common/types"; -import "../common/global.css"; -import styles from "../common/page.module.css"; -import { findStrongestMove } from "./utils"; - -export default function Page() { - const inputRef = useRef(null); - const [result, setResult] = useState(); - const [pokemon, setPokemon] = useState(); - const [error, setError] = useState(); - - const onClick = async ( - e: SyntheticEvent - ) => { - e.preventDefault(); - if (!inputRef?.current?.value) return; - - const p = await findStrongestMove(inputRef?.current?.value); - if (p.isLeft()) { - console.log("we got an error"); - const errorExtracted = p.extract(); - setError(errorExtracted.message); - setResult(null); - setPokemon(""); - } - - if (p.isRight()) { - const valueExtracted = p.extract(); - setResult(valueExtracted); - setPokemon(inputRef?.current?.value); - setError(null); - } - }; - - return ( - <> -
    -

    Purify Ts Example

    -
    -
    - - -
    - {error ? ( -
    -

    Error

    -
    -

    {error}

    -
    -
    - ) : null} - {result ? ( -
    -

    Result

    -
    -
      -
    • - Name: {pokemon} -
    • -
    • - Move name: {result.name.split("-").join(" ")} -
    • -
    • - Power: {result.power} -
    • -
    • - PP: {result.pp} -
    • -
    -
    -
    - ) : null} - - ); -} diff --git a/pocs/fp-libraries/app/purify-ts/utils.ts b/pocs/fp-libraries/app/purify-ts/utils.ts deleted file mode 100644 index 7835cee6e..000000000 --- a/pocs/fp-libraries/app/purify-ts/utils.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { EitherAsync } from "purify-ts/EitherAsync"; -import { Move, PokeApiError, Pokemon } from "../common/types"; - -const POKEAPI_BASE = "https://pokeapi.co/api/v2"; -const POKEMON_DOMAIN = "pokemon"; - -export const fetchPokemonData = ( - pokemon: string -): EitherAsync => - EitherAsync(async ({ throwE }) => { - const url = `${POKEAPI_BASE}/${POKEMON_DOMAIN}/${pokemon}`; - try { - const res = await fetch(url); - const json = await res.json(); - return json; - } catch (reason: unknown) { - throwE(new PokeApiError(`Could not find informations for ${pokemon}`)); - } - }); - -export const fetchMove = (url: string): EitherAsync => - EitherAsync(async ({ throwE }) => { - try { - const res = await fetch(url); - const json = res.json(); - return json; - } catch (reason: unknown) { - throwE(new PokeApiError("could not get move")); - } - }); - -export const findStrongest = (moves: Move[]) => - moves.reduce( - (acc, { power, pp, name }) => { - if (power > acc.power) { - return { - power, - pp, - name, - }; - } - - return acc; - }, - { power: 0, pp: 0, name: "" } - ); - -export const findStrongestMove = (search: string) => - // Fetch Pokemon - EitherAsync.fromPromise(() => fetchPokemonData(search)) - // Get all the moves - .map((pokemon) => pokemon.moves) - - // Using chain bebause we are returning another level of Either here, it's the `flatMap` of purify-ts - .chain(async (moves) => { - // Creating an array or URLs - const seq = moves.map((m) => m.move.url); - // Like Promise.all but handles Either - return EitherAsync.all(seq.map((s) => fetchMove(s))); - }) - - // OR - // .map(async (moves) => { - // // Like Promise.all but only returns Right (success) - // return EitherAsync.rights(moves.map((m) => fetchMove(m.move.url))); - // }) - - // Find strongest moves (reduced value) - .map(findStrongest); diff --git a/pocs/fp-libraries/next.config.js b/pocs/fp-libraries/next.config.js deleted file mode 100644 index 767719fc4..000000000 --- a/pocs/fp-libraries/next.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = {} - -module.exports = nextConfig diff --git a/pocs/fp-libraries/package-lock.json b/pocs/fp-libraries/package-lock.json deleted file mode 100644 index 4dfdfcf88..000000000 --- a/pocs/fp-libraries/package-lock.json +++ /dev/null @@ -1,3728 +0,0 @@ -{ - "name": "poc-fp-libs", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "poc-fp-libs", - "version": "0.1.0", - "dependencies": { - "effect": "^2.0.3", - "next": "14.0.4", - "purify-ts": "^2.0.3", - "react": "^18", - "react-dom": "^18" - }, - "devDependencies": { - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.0.4", - "typescript": "^5" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", - "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true - }, - "node_modules/@next/env": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.4.tgz", - "integrity": "sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.4.tgz", - "integrity": "sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==", - "dev": true, - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.4.tgz", - "integrity": "sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.4.tgz", - "integrity": "sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.4.tgz", - "integrity": "sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.4.tgz", - "integrity": "sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.4.tgz", - "integrity": "sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.4.tgz", - "integrity": "sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.4.tgz", - "integrity": "sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.4.tgz", - "integrity": "sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.4.tgz", - "integrity": "sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz", - "integrity": "sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==", - "dev": true - }, - "node_modules/@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", - "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.2.47", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", - "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.18", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", - "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.1.tgz", - "integrity": "sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.18.1", - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/typescript-estree": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.1.tgz", - "integrity": "sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.1.tgz", - "integrity": "sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.1.tgz", - "integrity": "sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz", - "integrity": "sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.18.1", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", - "dev": true, - "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" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true - }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001576", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", - "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/effect": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/effect/-/effect-2.0.3.tgz", - "integrity": "sha512-I/XvcbHypegNFWCr/arbfIR6pA+8JpSqv9wS4xOrgXypQMRj8H3wRorTcUiPmcQ0e6Ko67CdI2XZpjx7z0Ev/A==" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "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.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "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.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", - "dev": true, - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.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.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", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.4.tgz", - "integrity": "sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==", - "dev": true, - "dependencies": { - "@next/eslint-plugin-next": "14.0.4", - "@rushstack/eslint-patch": "^1.3.3", - "@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.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", - "dev": true, - "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" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/next": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/next/-/next-14.0.4.tgz", - "integrity": "sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==", - "dependencies": { - "@next/env": "14.0.4", - "@swc/helpers": "0.5.2", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "graceful-fs": "^4.2.11", - "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=18.17.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "14.0.4", - "@next/swc-darwin-x64": "14.0.4", - "@next/swc-linux-arm64-gnu": "14.0.4", - "@next/swc-linux-arm64-musl": "14.0.4", - "@next/swc-linux-x64-gnu": "14.0.4", - "@next/swc-linux-x64-musl": "14.0.4", - "@next/swc-win32-arm64-msvc": "14.0.4", - "@next/swc-win32-ia32-msvc": "14.0.4", - "@next/swc-win32-x64-msvc": "14.0.4" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/purify-ts": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/purify-ts/-/purify-ts-2.0.3.tgz", - "integrity": "sha512-RiPOlX4L+eggnbEdwGV34t7iRSPK5d37nKPZXSu8G5mTUhxbEjPpThRFuEV4GL/T6zEJQ+ZeiuNoBk61VJvszg==", - "dependencies": { - "@types/json-schema": "7.0.15" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", - "dev": true, - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/pocs/fp-libraries/package.json b/pocs/fp-libraries/package.json deleted file mode 100644 index 5626da65e..000000000 --- a/pocs/fp-libraries/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "poc-fp-libs", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "effect": "^2.0.3", - "next": "14.0.4", - "purify-ts": "^2.0.3", - "react": "^18", - "react-dom": "^18" - }, - "devDependencies": { - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.0.4", - "typescript": "^5" - } -} diff --git a/pocs/fp-libraries/public/next.svg b/pocs/fp-libraries/public/next.svg deleted file mode 100644 index 5174b28c5..000000000 --- a/pocs/fp-libraries/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pocs/fp-libraries/public/vercel.svg b/pocs/fp-libraries/public/vercel.svg deleted file mode 100644 index d2f842227..000000000 --- a/pocs/fp-libraries/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pocs/fp-libraries/tsconfig.json b/pocs/fp-libraries/tsconfig.json deleted file mode 100644 index 204de1d85..000000000 --- a/pocs/fp-libraries/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "target": "es2015", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/pocs/tsyringe-sample/package-lock.json b/pocs/tsyringe-sample/package-lock.json deleted file mode 100644 index aede0cc28..000000000 --- a/pocs/tsyringe-sample/package-lock.json +++ /dev/null @@ -1,6334 +0,0 @@ -{ - "name": "ledger-live", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "ledger-live", - "version": "0.0.0", - "license": "MIT", - "dependencies": { - "reflect-metadata": "^0.1.13", - "tsyringe": "^4.8.0" - }, - "devDependencies": { - "@types/jest": "^29.5.3", - "jest": "^29.6.2", - "ts-jest": "^29.1.1", - "typescript": "^5.1.6" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/generator": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", - "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", - "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", - "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", - "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.2", - "@jest/reporters": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-resolve-dependencies": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "jest-watcher": "^29.6.2", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", - "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", - "dev": true, - "dependencies": { - "expect": "^29.6.2", - "jest-snapshot": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", - "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", - "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", - "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", - "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", - "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", - "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.2", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", - "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.1", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz", - "integrity": "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/node": { - "version": "20.4.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.8.tgz", - "integrity": "sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/babel-jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", - "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.6.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001519", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", - "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.485", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.485.tgz", - "integrity": "sha512-1ndQ5IBNEnFirPwvyud69GHL+31FkE09gH/CJ6m3KCbkx3i0EVOrjwz4UNxRmN9H8OVHbC6vMRZGN1yCvjSs9w==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.6.2", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", - "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.2", - "@jest/types": "^29.6.1", - "import-local": "^3.0.2", - "jest-cli": "^29.6.2" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", - "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.2", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.2", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", - "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", - "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.2", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.2", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.2", - "jest-environment-node": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", - "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", - "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.2", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", - "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", - "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", - "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", - "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", - "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", - "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", - "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", - "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", - "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.2", - "@jest/environment": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-leak-detector": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-resolve": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-util": "^29.6.2", - "jest-watcher": "^29.6.2", - "jest-worker": "^29.6.2", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", - "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/globals": "^29.6.2", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", - "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.2", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.2", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", - "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", - "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", - "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", - "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.2", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tsyringe": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.8.0.tgz", - "integrity": "sha512-YB1FG+axdxADa3ncEtRnQCFq/M0lALGLxSZeVNbTU8NqhOVc51nnv2CISTcvc1kyv6EGPtXVr0v6lWeDxiijOA==", - "dependencies": { - "tslib": "^1.9.3" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dev": true, - "requires": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - } - }, - "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true - }, - "@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", - "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", - "dev": true, - "requires": { - "@babel/types": "^7.24.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", - "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - } - }, - "@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", - "debug": "^4.3.1", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", - "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", - "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", - "dev": true, - "requires": { - "@jest/console": "^29.6.2", - "@jest/reporters": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-resolve-dependencies": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "jest-watcher": "^29.6.2", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", - "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2" - } - }, - "@jest/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", - "dev": true, - "requires": { - "expect": "^29.6.2", - "jest-snapshot": "^29.6.2" - } - }, - "@jest/expect-utils": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", - "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3" - } - }, - "@jest/fake-timers": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", - "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - } - }, - "@jest/globals": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", - "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", - "dev": true, - "requires": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.2" - } - }, - "@jest/reporters": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", - "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - } - }, - "@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", - "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", - "dev": true, - "requires": { - "@jest/console": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", - "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", - "dev": true, - "requires": { - "@jest/test-result": "^29.6.2", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", - "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.1", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - } - }, - "@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "29.5.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz", - "integrity": "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==", - "dev": true, - "requires": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "@types/node": { - "version": "20.4.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.8.tgz", - "integrity": "sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "babel-jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", - "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", - "dev": true, - "requires": { - "@jest/transform": "^29.6.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001519", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", - "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "requires": {} - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.485", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.485.tgz", - "integrity": "sha512-1ndQ5IBNEnFirPwvyud69GHL+31FkE09gH/CJ6m3KCbkx3i0EVOrjwz4UNxRmN9H8OVHbC6vMRZGN1yCvjSs9w==", - "dev": true - }, - "emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.6.2", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", - "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", - "dev": true, - "requires": { - "@jest/core": "^29.6.2", - "@jest/types": "^29.6.1", - "import-local": "^3.0.2", - "jest-cli": "^29.6.2" - } - }, - "jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", - "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", - "dev": true, - "requires": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.2", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.2", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-cli": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", - "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", - "dev": true, - "requires": { - "@jest/core": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", - "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.2", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.2", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.2", - "jest-environment-node": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, - "jest-diff": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", - "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" - } - }, - "jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", - "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.2", - "pretty-format": "^29.6.2" - } - }, - "jest-environment-node": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", - "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - } - }, - "jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true - }, - "jest-haste-map": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", - "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", - "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" - } - }, - "jest-matcher-utils": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", - "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" - } - }, - "jest-message-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", - "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", - "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-util": "^29.6.2" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true - }, - "jest-resolve": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", - "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", - "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", - "dev": true, - "requires": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.2" - } - }, - "jest-runner": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", - "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", - "dev": true, - "requires": { - "@jest/console": "^29.6.2", - "@jest/environment": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-leak-detector": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-resolve": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-util": "^29.6.2", - "jest-watcher": "^29.6.2", - "jest-worker": "^29.6.2", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - } - }, - "jest-runtime": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", - "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", - "dev": true, - "requires": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/globals": "^29.6.2", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", - "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.2", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.2", - "semver": "^7.5.3" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "jest-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", - "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", - "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.2" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", - "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", - "dev": true, - "requires": { - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.2", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", - "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.6.2", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "requires": { - "semver": "^7.5.3" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "tsyringe": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.8.0.tgz", - "integrity": "sha512-YB1FG+axdxADa3ncEtRnQCFq/M0lALGLxSZeVNbTU8NqhOVc51nnv2CISTcvc1kyv6EGPtXVr0v6lWeDxiijOA==", - "requires": { - "tslib": "^1.9.3" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - } - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/pocs/tsyringe-sample/package.json b/pocs/tsyringe-sample/package.json deleted file mode 100644 index e00c193f2..000000000 --- a/pocs/tsyringe-sample/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "ledger-live", - "version": "0.0.0", - "license": "MIT", - "private": true, - "devDependencies": { - "@types/jest": "^29.5.3", - "jest": "^29.6.2", - "ts-jest": "^29.1.1", - "typescript": "^5.1.6" - }, - "dependencies": { - "reflect-metadata": "^0.1.13", - "tsyringe": "^4.8.0" - } -} diff --git a/pocs/tsyringe-sample/src/api/DeviceSdk.ts b/pocs/tsyringe-sample/src/api/DeviceSdk.ts deleted file mode 100644 index 071faf2ee..000000000 --- a/pocs/tsyringe-sample/src/api/DeviceSdk.ts +++ /dev/null @@ -1,11 +0,0 @@ -export default class DeviceSdk { - - /** @internal */ - constructor(){ - - } - - scan() { - - } -} \ No newline at end of file diff --git a/pocs/tsyringe-sample/src/api/DeviceSdkBuilder.ts b/pocs/tsyringe-sample/src/api/DeviceSdkBuilder.ts deleted file mode 100644 index f21e46d1a..000000000 --- a/pocs/tsyringe-sample/src/api/DeviceSdkBuilder.ts +++ /dev/null @@ -1,12 +0,0 @@ -import DeviceSdk from "./DeviceSdk" - -export default class LedgerDeviceSdkBuilder { - - //props - constructor() { - } - - build(): DeviceSdk { - return new DeviceSdk() - } -} \ No newline at end of file diff --git a/pocs/tsyringe-sample/src/api/apiModule.ts b/pocs/tsyringe-sample/src/api/apiModule.ts deleted file mode 100644 index 91e26164e..000000000 --- a/pocs/tsyringe-sample/src/api/apiModule.ts +++ /dev/null @@ -1,6 +0,0 @@ -'use strict' - -import DeviceSdkBuilder from "./DeviceSdkBuilder" -import DeviceSdk from "./DeviceSdk" - -export { DeviceSdkBuilder, DeviceSdk } \ No newline at end of file diff --git a/pocs/tsyringe-sample/src/index.ts b/pocs/tsyringe-sample/src/index.ts deleted file mode 100644 index 15f98b8ea..000000000 --- a/pocs/tsyringe-sample/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { DeviceSdkBuilder, DeviceSdk} from "./api/apiModule" - -export default DeviceSdkBuilder - -let builder = new DeviceSdkBuilder() -let sdk = new DeviceSdk() - -sdk.scan() diff --git a/pocs/tsyringe-sample/src/transports/Transport.ts b/pocs/tsyringe-sample/src/transports/Transport.ts deleted file mode 100644 index 6930c4a71..000000000 --- a/pocs/tsyringe-sample/src/transports/Transport.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {Response} from "./model/Response" -import { bletransport } from "./ble/bleModule" - - -export interface Transport { - send(apduHex: String): Response | undefined; -} \ No newline at end of file diff --git a/pocs/tsyringe-sample/src/transports/ble/BleTransport.ts b/pocs/tsyringe-sample/src/transports/ble/BleTransport.ts deleted file mode 100644 index 5a5146e56..000000000 --- a/pocs/tsyringe-sample/src/transports/ble/BleTransport.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Transport } from "../Transport" -import { Response } from "../model/Response" - - -export default class BleTransport implements Transport { - send(apduHex: String): Response| undefined { - return undefined - } -} diff --git a/pocs/tsyringe-sample/src/transports/ble/bleModule.ts b/pocs/tsyringe-sample/src/transports/ble/bleModule.ts deleted file mode 100644 index f0c05f360..000000000 --- a/pocs/tsyringe-sample/src/transports/ble/bleModule.ts +++ /dev/null @@ -1,3 +0,0 @@ -import BleTransport from "./BleTransport" - -export { BleTransport } \ No newline at end of file diff --git a/pocs/tsyringe-sample/src/transports/model/Response.ts b/pocs/tsyringe-sample/src/transports/model/Response.ts deleted file mode 100644 index 3644e8373..000000000 --- a/pocs/tsyringe-sample/src/transports/model/Response.ts +++ /dev/null @@ -1,4 +0,0 @@ - -export class Response { - -} \ No newline at end of file diff --git a/pocs/tsyringe-sample/src/transports/transportsModule.ts b/pocs/tsyringe-sample/src/transports/transportsModule.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/pocs/tsyringe-sample/tsconfig.json b/pocs/tsyringe-sample/tsconfig.json deleted file mode 100644 index 0cf8130a5..000000000 --- a/pocs/tsyringe-sample/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "allowJs": false, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "moduleResolution": "node", - "pretty": true, - "resolveJsonModule": true, - "stripInternal": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "target": "ES6" - } - } - \ No newline at end of file diff --git a/pocs/web-hid-api/README.md b/pocs/web-hid-api/README.md deleted file mode 100644 index 734f7eb89..000000000 --- a/pocs/web-hid-api/README.md +++ /dev/null @@ -1,15 +0,0 @@ -## Overview - -This is a simple JavaScript script to try the different features of the WebHID API. -See the following documentation: [WebHID API Overview](https://ledgerhq.atlassian.net/l/cp/t2NVkQYN) - -## Run POC - -To run, just open `index.html` on your browser ✨, and click on the `start` button -You can also serve the page with: -``` -pnpm dlx serve . -``` - -Some actions (described in comments in `index.js`) can be done to try different error scenarios. - diff --git a/pocs/web-hid-api/index.html b/pocs/web-hid-api/index.html deleted file mode 100644 index bf1fb5d5a..000000000 --- a/pocs/web-hid-api/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - WebHID Tester - - - - - - - diff --git a/pocs/web-hid-api/index.js b/pocs/web-hid-api/index.js deleted file mode 100644 index da2a5ee41..000000000 --- a/pocs/web-hid-api/index.js +++ /dev/null @@ -1,168 +0,0 @@ -console.info('WebHID API tester'); - -// Action: try to uncomment the following and see the error you get -// A `requestDevice` can only be called in the context of a user interaction. -// startWebHid(); - -document.getElementById('startButton').addEventListener('click', function () { - console.info("--- startButton button clicked ---"); - startWebHid(); -}); - -async function startWebHid() { - if (!("hid" in navigator)) { - console.warn("WebHID API not supported :'("); - return; - } - - console.info("WebHID API supported !"); - - // Get all devices the user has previously granted the website access to. - const prevGrantedDevices = await navigator.hid.getDevices(); - console.info(`Devices previously granted access: ${prevGrantedDevices.length} devices\n: ${prevGrantedDevices.map(d => d.productName).join(', ')}`); - - // Prompt user to select a device - console.info("Requesting user to select a device..."); - let devices; - - // Action: try to set on Chrome "Don't allow sites to connect to HID devices" - // and remove any permission access to `file:///` (this website) and see what happens - // -> on my MacOS with Chrome no error is thrown and the `devices` array is empty - try { - devices = await navigator.hid.requestDevice({ filters: [{ vendorId: 0x2c97 }] }); - } catch (error) { - console.error(`Error requesting device: ${error}`, error); - return; - } - - if (devices.length === 0) { - console.warn("User didn't select any device."); - return; - } - - const device = devices[0]; - console.info(`User selected: ${device.productName}. Product id: 0x${(device.productId >> 8).toString(16)}.`); - console.info(`Collections attributes: ${device.collections.length}`) - - for (let collection of device.collections) { - console.log(`Collection:`); - // An HID collection includes usage, usage page, reports, and subcollections. - console.log(`--- Usage: ${collection.usage}`); - console.log(`--- Usage page: ${collection.usagePage}`); - - console.log(`--- Input reports: ${collection.inputReports.length}`); - for (let inputReport of collection.inputReports) { - console.log(`--- Input report id: ${inputReport.reportId}`); - } - - console.log(`--- Output reports: ${collection.outputReports.length}`); - for (let outputReport of collection.outputReports) { - console.log(`--- Output report id: ${outputReport.reportId}`); - } - - console.log(`--- Feature reports: ${collection.featureReports.length}`); - for (let featureReport of collection.featureReports) { - console.log(`--- Feature report id: ${featureReport.reportId}`); - } - } - - console.log(`Opening device ${device.productName} ...`); - try { - await device.open(); - } catch (error) { - if (error instanceof DOMException && error.name === "InvalidStateError") { - console.info(`Device ${device.productName} is already open`); - } else { - console.error(`Error while opening device: ${error}`, error); - return - } - } - - device.addEventListener("inputreport", event => { - const { data, device, reportId } = event; - const response = (new Uint8Array(data.buffer)).map(x => x.toString(16)).join(' '); - console.log(`Received an input report on ${reportId}: ${response}`); - }); - - console.log(`Sending getVersion to device ${device.productName} ...`); - try { - await device.sendReport(0, new Uint8Array([0xAA, 0xAA, 0x05, 0x00, 0x00, 0x00, 0x05, 0xE0, 0x01, 0x00, 0x00, 0x00])); - console.log("getVersion sent"); - } catch (error) { - console.error(`Error while sending getVersion: ${error}`, error); - return; - } -} - -// Action: try to unplug and plug back the device and see the events in the console -if ("hid" in navigator) { - navigator.hid.addEventListener("connect", event => { - const { device } = event - console.log(`📡 Received a connect event on ${device.productName}`); - }); - - navigator.hid.addEventListener("disconnect", event => { - const { device } = event - console.log(`📡 Received a disconnect event on ${device.productName}`); - }); -} - - -/** - * Example to demonstrate that once a device of model/productId A is granted access, any other model/productId A device is also granted access, - * even if plugged in another USB port. - * - * You can test this by: - * - plugging a device 1 (model A) and grant access via the `startButton` button - * - unplug the device 1 - * - plug a device 2 (model A) in another USB port - * - click the `alreadyAccessibleDevice` button - * And you should see the device 2 being opened and the getVersion sent successfully. - * - * You can also test with a device from another model and see what happens. - */ -document.getElementById('alreadyAccessibleDevice').addEventListener('click', async function () { - console.info("--- alreadyAccessibleDevice button clicked ---"); - - if (!("hid" in navigator)) { - console.warn("WebHID API not supported :'("); - return; - } - - console.info("WebHID API supported !"); - - // Get all devices the user has previously granted the website access to. - const prevGrantedDevices = await navigator.hid.getDevices(); - console.info(`Devices previously granted access: ${prevGrantedDevices.length} devices\n: ${prevGrantedDevices.map(d => d.productName).join(', ')}`); - - if (prevGrantedDevices.length > 0) { - const [device] = prevGrantedDevices; - console.log(`Opening the first device: ${device.productName}, product id: 0x${(device.productId >> 8).toString(16)} ...`); - - try { - await device.open(); - } catch (error) { - if (error instanceof DOMException && error.name === "InvalidStateError") { - console.info(`Device ${device.productName} is already open`); - } else { - console.error(`Error while opening device: ${error}`, error); - return - } - } - - device.addEventListener("inputreport", event => { - const { data, reportId } = event; - const response = (new Uint8Array(data.buffer)).map(x => x.toString(16)).join(' '); - console.log(`Received an input report on ${reportId}: ${response}`); - }); - - console.log(`Sending getVersion to device ${device.productName} ...`); - try { - await device.sendReport(0, new Uint8Array([0xAA, 0xAA, 0x05, 0x00, 0x00, 0x00, 0x05, 0xE0, 0x01, 0x00, 0x00, 0x00])); - console.log("getVersion sent"); - } catch (error) { - console.error(`Error while sending getVersion: ${error}`, error); - return; - } - } -}); From 544495237de773019cc38e18e362c3f259965539 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Fri, 7 Jun 2024 17:46:25 +0200 Subject: [PATCH 238/253] =?UTF-8?q?=F0=9F=94=A5=20(pocs):=20Removed=20pocs?= =?UTF-8?q?=20folder=20from=20this=20repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pocs can be found in ledgerhq/dxp-sandbox --- pocs/xstate-study/.eslintrc.json | 3 - pocs/xstate-study/.gitignore | 36 - pocs/xstate-study/README.md | 36 - pocs/xstate-study/app/Machine.tsx | 50 - pocs/xstate-study/app/globals.css | 0 pocs/xstate-study/app/layout.tsx | 22 - .../app/openAppStateMachine.test.ts | 348 - pocs/xstate-study/app/openAppStateMachine.ts | 226 - pocs/xstate-study/app/page.tsx | 9 - pocs/xstate-study/jest.config.js | 10 - pocs/xstate-study/next.config.mjs | 6 - pocs/xstate-study/package-lock.json | 7554 ----------------- pocs/xstate-study/package.json | 30 - pocs/xstate-study/tsconfig.json | 26 - 14 files changed, 8356 deletions(-) delete mode 100644 pocs/xstate-study/.eslintrc.json delete mode 100644 pocs/xstate-study/.gitignore delete mode 100644 pocs/xstate-study/README.md delete mode 100644 pocs/xstate-study/app/Machine.tsx delete mode 100644 pocs/xstate-study/app/globals.css delete mode 100644 pocs/xstate-study/app/layout.tsx delete mode 100644 pocs/xstate-study/app/openAppStateMachine.test.ts delete mode 100644 pocs/xstate-study/app/openAppStateMachine.ts delete mode 100644 pocs/xstate-study/app/page.tsx delete mode 100644 pocs/xstate-study/jest.config.js delete mode 100644 pocs/xstate-study/next.config.mjs delete mode 100644 pocs/xstate-study/package-lock.json delete mode 100644 pocs/xstate-study/package.json delete mode 100644 pocs/xstate-study/tsconfig.json diff --git a/pocs/xstate-study/.eslintrc.json b/pocs/xstate-study/.eslintrc.json deleted file mode 100644 index bffb357a7..000000000 --- a/pocs/xstate-study/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/pocs/xstate-study/.gitignore b/pocs/xstate-study/.gitignore deleted file mode 100644 index fd3dbb571..000000000 --- a/pocs/xstate-study/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/pocs/xstate-study/README.md b/pocs/xstate-study/README.md deleted file mode 100644 index c4033664f..000000000 --- a/pocs/xstate-study/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/pocs/xstate-study/app/Machine.tsx b/pocs/xstate-study/app/Machine.tsx deleted file mode 100644 index e8c70eb6c..000000000 --- a/pocs/xstate-study/app/Machine.tsx +++ /dev/null @@ -1,50 +0,0 @@ -"use client"; -import { memo } from "react"; -import makeOpenAppMachine, { Context } from "./openAppStateMachine"; -import { createActor } from "xstate"; -import { createBrowserInspector } from "@statelyai/inspect"; - -const inspector = createBrowserInspector(); - -const openAppMachine = makeOpenAppMachine(); - -function Machine() { - const startMachine = () => { - console.log("Creating machine actor"); - const openAppMachineActor = createActor(openAppMachine, { - inspect: inspector.inspect, - input: { - requestedAppName: "Bitcoin", - deviceSessionState: { - status: "Ready", - deviceOnboarded: true, - }, - }, - }); - - let previousUserActionNeeded: Context["userActionNeeded"] = null; - let previousStateValue: string | null = null; - - openAppMachineActor.start(); - openAppMachineActor.subscribe((state) => { - if (state.value !== previousStateValue) { - console.log("machine: new state", state.value); - previousStateValue = state.value; - } - if (state.context.userActionNeeded !== previousUserActionNeeded) { - console.log( - "machine: user action needed", - state.context.userActionNeeded - ); - previousUserActionNeeded = state.context.userActionNeeded; - } - if (state.status === "done") { - console.log("machine: done", state); - console.log("machine output:", state.output); - } - }); - }; - return ; -} - -export default memo(Machine); diff --git a/pocs/xstate-study/app/globals.css b/pocs/xstate-study/app/globals.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/pocs/xstate-study/app/layout.tsx b/pocs/xstate-study/app/layout.tsx deleted file mode 100644 index 3314e4780..000000000 --- a/pocs/xstate-study/app/layout.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { Metadata } from "next"; -import { Inter } from "next/font/google"; -import "./globals.css"; - -const inter = Inter({ subsets: ["latin"] }); - -export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - {children} - - ); -} diff --git a/pocs/xstate-study/app/openAppStateMachine.test.ts b/pocs/xstate-study/app/openAppStateMachine.test.ts deleted file mode 100644 index 9820aae5f..000000000 --- a/pocs/xstate-study/app/openAppStateMachine.test.ts +++ /dev/null @@ -1,348 +0,0 @@ -import { describe, it, expect, beforeEach } from '@jest/globals' -import { createActor } from 'xstate'; -import makeOpenAppMachine, { APP_NOT_FOUND_ERROR, DEVICE_NOT_ONBOARDED_ERROR, OPEN_REJECTED_ERROR, LOCKED_DEVICE_ERROR} from "./openAppStateMachine"; - -jest.useFakeTimers() - -describe("openAppStateMachine", () => { - const mockedGetAppAndVersion = jest.fn(); - const mockedCloseApp = jest.fn(); - const mockedOpenApp = jest.fn(); - - const openAppMachine = makeOpenAppMachine( - { - getAppAndVersion: mockedGetAppAndVersion, - closeApp: mockedCloseApp, - openApp: mockedOpenApp, - } - ); - - beforeEach(() => { - jest.clearAllMocks(); - }) - - it("should end in an error if the device is not onboarded", (done) => { - const openAppMachineActor = createActor(openAppMachine, { - input: { - requestedAppName: "Bitcoin", - deviceSessionState: { - status: "Ready", - deviceOnboarded: false, - }, - }, - }); - - openAppMachineActor.subscribe((state) => { - try { - if (state.status === "done") { - expect(state.value).toEqual("Error"); - if ("error" in state.output) { - expect(state.output.error).toBeDefined(); - expect(state.output.error.message).toEqual(DEVICE_NOT_ONBOARDED_ERROR); - done() - } else { - done("Expected error in output") - } - } - } catch(e: any) { - done(e.message) - } - }); - - openAppMachineActor.start(); - - }) - - it("should end in an error if the device is locked", (done) => { - const openAppMachineActor = createActor(openAppMachine, { - input: { - requestedAppName: "Bitcoin", - deviceSessionState: { - status: "Locked", - deviceOnboarded: true, - }, - }, - }); - - openAppMachineActor.subscribe((state) => { - try { - if (state.status === "done") { - expect(state.value).toEqual("Error"); - if ("error" in state.output) { - expect(state.output.error).toBeDefined(); - expect(state.output.error.message).toEqual(LOCKED_DEVICE_ERROR); - done() - } else { - done("Expected error in output") - } - } - } catch(e: any) { - done(e.message) - } - }); - - openAppMachineActor.start(); - }); - - it("should end in an error if getAppAndVersion throws an error", (done) => { - const mockedErrorMessage = "Mocked error"; - - // getAppAndVersion throws an error - mockedGetAppAndVersion.mockRejectedValue(new Error(mockedErrorMessage)); - - const openAppMachineActor = createActor(openAppMachine, { - input: { - requestedAppName: "Bitcoin", - deviceSessionState: { - status: "Ready", - deviceOnboarded: true, - }, - }, - }); - - openAppMachineActor.subscribe((state) => { - try { - if (state.status === "done") { - expect(state.value).toEqual("Error"); - if ("error" in state.output) { - expect(state.output.error).toBeDefined(); - expect(state.output.error.message).toEqual("Mocked error"); - done() - } else { - done("Expected error in output") - } - } - } catch(e: any) { - done(e.message) - } - }); - - openAppMachineActor.start(); - }); - - it("should end in a success if the app is already opened", (done) => { - - // App already opened - mockedGetAppAndVersion.mockResolvedValue({app: "Bitcoin", version: "1.0.0"}); - - const openAppMachineActor = createActor(openAppMachine, { - input: { - requestedAppName: "Bitcoin", - deviceSessionState: { - status: "Ready", - deviceOnboarded: true, - }, - }, - }); - - openAppMachineActor.subscribe((state) => { - try { - if (state.status === "done") { - expect(state.value).toEqual("Success"); - if ("currentlyRunningApp" in state.output) { - expect(state.output).toBeDefined(); - expect(state.output.currentlyRunningApp).toEqual("Bitcoin"); - done() - } else { - done("Expected currentlyRunningApp in state") - } - } - } catch(e: any) { - done(e.message) - } - }); - - openAppMachineActor.start(); - }); - - it("should end in a success if the dashboard is open and open app succeeds", (done) => { - - // Dashboard is open - mockedGetAppAndVersion.mockResolvedValue({app: "Dashboard", version: "1.0.0"}); - // Open app succeeds - mockedOpenApp.mockResolvedValue(undefined); - - const openAppMachineActor = createActor(openAppMachine, { - input: { - requestedAppName: "Bitcoin", - deviceSessionState: { - status: "Ready", - deviceOnboarded: true, - }, - }, - }); - - openAppMachineActor.subscribe((state) => { - try { - if (state.status === "done") { - expect(state.value).toEqual("Success"); - if ("currentlyRunningApp" in state.output) { - expect(state.output).toBeDefined(); - expect(state.output.currentlyRunningApp).toEqual("Bitcoin"); - done() - } else { - done("Expected currentlyRunningApp in state") - } - } - } catch(e: any) { - done(e.message) - } - }); - - openAppMachineActor.start(); - - }); - - it("should end in an error if the dashboard is open and open app throws an error", (done) => { - - // Dashboard is open - mockedGetAppAndVersion.mockResolvedValue({app: "Dashboard", version: "1.0.0"}); - // Open app throws an error - mockedOpenApp.mockRejectedValue(new Error("Mocked error")); - - const openAppMachineActor = createActor(openAppMachine, { - input: { - requestedAppName: "Bitcoin", - deviceSessionState: { - status: "Ready", - deviceOnboarded: true, - }, - }, - }); - - openAppMachineActor.subscribe((state) => { - try { - if (state.status === "done") { - expect(state.value).toEqual("Error"); - if ("error" in state.output) { - expect(state.output.error).toBeDefined(); - expect(state.output.error.message).toEqual("Mocked error"); - done() - } else { - done("Expected error in output") - } - } - } catch(e: any) { - done(e.message) - } - }); - - openAppMachineActor.start(); - }); - - it("should end in an error if another app is open, and close app throws", (done) => { - - // Another app is open - mockedGetAppAndVersion.mockResolvedValue({app: "Ethereum", version: "1.0.0"}); - // Close app throws an error - mockedCloseApp.mockRejectedValue(new Error("Mocked error")); - - const openAppMachineActor = createActor(openAppMachine, { - input: { - requestedAppName: "Bitcoin", - deviceSessionState: { - status: "Ready", - deviceOnboarded: true, - }, - }, - }); - - openAppMachineActor.subscribe((state) => { - try { - if (state.status === "done") { - expect(state.value).toEqual("Error"); - if ("error" in state.output) { - expect(state.output.error).toBeDefined(); - expect(state.output.error.message).toEqual("Mocked error"); - done() - } else { - done("Expected error in output") - } - } - } catch(e: any) { - done(e.message) - } - }); - - openAppMachineActor.start(); - }); - - it("should end in an error if another app is open, close app succeeds but open app throws", (done) => { - - // Another app is open - mockedGetAppAndVersion.mockResolvedValue({app: "Ethereum", version: "1.0.0"}); - // Close app succeeds - mockedCloseApp.mockResolvedValue(undefined); - // Open app throws an error - mockedOpenApp.mockRejectedValue(new Error("Mocked error")); - - const openAppMachineActor = createActor(openAppMachine, { - input: { - requestedAppName: "Bitcoin", - deviceSessionState: { - status: "Ready", - deviceOnboarded: true, - }, - }, - }); - - openAppMachineActor.subscribe((state) => { - try { - if (state.status === "done") { - expect(state.value).toEqual("Error"); - if ("error" in state.output) { - expect(state.output.error).toBeDefined(); - expect(state.output.error.message).toEqual("Mocked error"); - done() - } else { - done("Expected error in output") - } - } - } catch(e: any) { - done(e.message) - } - }); - - openAppMachineActor.start(); - }); - - it("should end in a success if another app is open, close app succeeds and open app succeeds", (done) => { - - // Another app is open - mockedGetAppAndVersion.mockResolvedValue({app: "Ethereum", version: "1.0.0"}); - // Close app succeeds - mockedCloseApp.mockResolvedValue(undefined); - // Open app succeeds - mockedOpenApp.mockResolvedValue(undefined); - - const openAppMachineActor = createActor(openAppMachine, { - input: { - requestedAppName: "Bitcoin", - deviceSessionState: { - status: "Ready", - deviceOnboarded: true, - }, - }, - }); - - openAppMachineActor.subscribe((state) => { - try { - if (state.status === "done") { - expect(state.value).toEqual("Success"); - if ("currentlyRunningApp" in state.output) { - expect(state.output).toBeDefined(); - expect(state.output.currentlyRunningApp).toEqual("Bitcoin"); - done() - } else { - done("Expected currentlyRunningApp in state") - } - } - } catch(e: any) { - done(e.message) - } - }); - - openAppMachineActor.start(); - }); - -}) \ No newline at end of file diff --git a/pocs/xstate-study/app/openAppStateMachine.ts b/pocs/xstate-study/app/openAppStateMachine.ts deleted file mode 100644 index c416a8fdf..000000000 --- a/pocs/xstate-study/app/openAppStateMachine.ts +++ /dev/null @@ -1,226 +0,0 @@ -import { setup, fromPromise, assign, log } from "xstate"; - - -export const LOCKED_DEVICE_ERROR = "Locked device"; -export const APP_NOT_FOUND_ERROR = "App not installed"; -export const OPEN_REJECTED_ERROR = "Open app rejected"; -export const DEVICE_NOT_ONBOARDED_ERROR = "Device not onboarded"; - -async function getAppAndVersionStub(): Promise<{ app: string, version: string }> { - console.log("getAppAndVersion"); - await new Promise((resolve) => setTimeout(resolve, 1000)); - const random = Math.random(); - if (random < 0.25) return {app: "Dashboard", version: "1.0.0"}; - if (random < 0.5) return {app: "Bitcoin", version: "1.0.0"}; - if (random < 0.75) return {app: "Ethereum", version: "1.0.0"}; - throw new Error(LOCKED_DEVICE_ERROR); // 30% chance of locked device -} - -async function closeAppStub() { - console.log("closeApp") - await new Promise((resolve) => setTimeout(resolve, 1000)); - return; -} - -async function openAppStub(appName: string) { - console.log("openApp") - if (!appName) throw new Error("No app name provided"); - await new Promise((resolve) => setTimeout(resolve, 1000)); - const random = Math.random(); - if (random < 0.33) throw new Error(APP_NOT_FOUND_ERROR); - if (random < 0.67) throw new Error(OPEN_REJECTED_ERROR); - return; -} - -type DeviceSessionState = { - status: "Ready" | "Busy" | "Locked" | "NotConnected", - deviceOnboarded: boolean, -}; - -type Input = { - requestedAppName: string, - deviceSessionState: DeviceSessionState, -} - -export type Context = Input & { - currentlyRunningApp: string | null; - error: Error | null; - userActionNeeded: "OpenApp" | null; -} - -function makeOpenAppMachine(params: { - getAppAndVersion: () => Promise<{ app: string, version: string }>, - closeApp: () => Promise, - openApp: (appName: string) => Promise, -} = { - getAppAndVersion: getAppAndVersionStub, - closeApp: closeAppStub, - openApp: openAppStub, -}) { - return setup({ - types: { - context: {} as Context, - input: {} as Input, - output: {} as { currentlyRunningApp: string } | { error: Error }, - }, - actors: { - getAppAndVersion: fromPromise(params.getAppAndVersion), - closeApp: fromPromise(params.closeApp), - openApp: fromPromise((_: {input: {appName: string}}) => params.openApp(_.input.appName)), - }, - guards: { - isDeviceOnboarded: ({context}: {context: Context}) => context.deviceSessionState.deviceOnboarded, - isDeviceUnlocked: ({context}: {context: Context}) => context.deviceSessionState.status !== "Locked", - isRequestedAppOpen: ({context}: {context: Context}) => { - if (context.currentlyRunningApp === null) throw new Error("context.currentlyRunningApp === null"); - return context.currentlyRunningApp === context.requestedAppName - }, - isDashboardOpen: ({context}: {context: Context}) => { - if (context.currentlyRunningApp === null) throw new Error("context.currentlyRunningApp === null"); - return context.currentlyRunningApp === "Dashboard" - } - }, - actions: { - assignErrorDeviceNotOnboarded: assign({error: new Error(DEVICE_NOT_ONBOARDED_ERROR)}), - assignErrorDeviceLocked: assign({error: new Error(LOCKED_DEVICE_ERROR)}), - assignUserActionNeededOpenApp: assign({userActionNeeded: "OpenApp"}), - assignNoUserActionNeeded: assign({userActionNeeded: null}), - }, - }).createMachine({ - /** @xstate-layout N4IgpgJg5mDOIC5QHkAOYB2BBVqAiYAbgJYDGYWpALsQPYYB0BJ5ASmAIYQCeAxANoAGALqJQqWrGI16YkAA9EAdgCMDAGyCVAVm3qAzAA4AnNq3bDAGhDdEKgCyGGpw4OMAmffbP37xgL7+1miYOPhEZBTUdIzIGABGtBwAThDEGFAAwgAWYKQA1gIichJSMhhyiggqggzugvbq2qr6Su7aKvr6Kta2CO5tGu7GhvrDKq4jxvaBwejYuMyRlOUMcYkpaRk5eYX8KqJIIKXSMZWI7uruDIYqKu53FtrGbYb2vRd+zg1vDuo67kasxAIQW4RYUVWABlaAV0llcgUiodxJJTrIjlUdAx7IJ9II2vj2ipjHjtB8EPpSTdLqY3B0Bn4lMDQWEluQVjEGDC4dtEXsDiU0eVzv0rjdtK1cQZLrjTBT9OonDUSZozAN7u0WfM2REOdF6AwwgAbMgccpYQgcYjGjjxY1gXgQehgBjpQi0fKu1mLPWQrkms0Wq02u0OhDu2HmmJCYSxoVlM6Y5QMQQPQzqdTGToWLOCck2RBNJQMZ4EwQNfNKSX6bWhX0QzmGwOkaP0S3W232x1gZLJWjJBioW1UABmA4AtmsdQ3lgbGC229gQ13w5HW+VY-GjicRcmxdpU117F5DO4TJLdBTLwx7lnGhX6mMVHWwez-c3cKaNzEdkjt6iiYYqAVT6N8xhGNWbSSpmKjqBShiSremiuPe7SNMyQQgjO4Jzqsi7lH+AooscwpJiBFxKGBSj2CqTSZvYwzwYWCCIWBcGCBmJLdKocGvrqjbzkwHCwNkGypERyIJuiFT7sSDBjDWEznlR7QUjUgjqBoHRKBB0pqgEWE+rh+qrHgIliUkEn8gIgo7mRwEKIgZiHppowTBB1aTOpFZaU0KhUb8NG4oY-GzqZXKZMakgUF+QYxE6LpuhgHpetO9YmR+jBRTFBExBGKVRpuIgAaRQGyRRCCOE4VIPEqtGKh5BZ9HcJgMKoHQVi0GYnmFmVNtl0WwLFw7xfQvC9v2g7Dua47JFOxnvgNDA5cNeX0AVHo-vQW7FPZ5Wiq8pZKpxSoTHiEw+f87U6F0hi6Xo1a1kZOFLUJxnfkuiUYK6kZpYtfrLR9Y0YJtRUxiVe2ATJooDNczzQaoEH3G06nePYClqnodxGAYL4vRlb2rMD20YBNfYDkOI5zQtr2A+9OGfeUYOk7tJG7uRTkIP8GOcYxiEElmJhWCxnT3HUwwNAZShXDMBNvvT+FxaT7BcHwpUc45VSqBo5j2IShiIbpzEtZoJbtEoNE5sYxjqL1wIYLQEBwHIAOCXu0Me1zAC02gY0oeL1BmdtaPm7jqRo6iqNWfjngMzzqH1RNcu+qs8NJXtVIxCFODL9LaO0HgPC8SeK1y6xWVsCK7BnnNVJ4OJvF4ZucW80wUg81znjoNEFxpzSl+7XI8vk8JEbXWuIK0paefougXhMSgKvidS6QFJ4ZpvoXywJeEBsrS4dqG3YTxVPtaQHYynSHNQdCLfSStcbyG5pniW-iz1zITZefqNpPj-tGGckMYeEmOeVoBhdL5gpEoVwNw0z-FaAHCYAVB570NOZUS4kIAAM9nXC44orhZlUICDyZ4KTTDUFRP2VEDBz1MJ-bC38h6GlWiNJmnNNZnyzqMdqrRba228ASdwAwfKDAzCIh4x43Bah3uFLK6UwQcMclw2GFhSw6D0FHUkNstDqWGOxe4FYCSuC6phL+CsWELgPuUNOfQ8GT36IeAuXg76MRPH7TS6ldC1FMFRTilsDCyzQRFQ0ABlAArqQcgsB4CAMzogXEkdpT82Ds8d4osGJ1DutHeo9RtAhIUQAUQpskU+opSQljTOMLM4CtDGHUlkzw-COg4xJNvQIQA */ - id: "OpenAppDeviceAction", - initial: "DeviceReady", - context: ({input}): Context => { - return { - ...input, - currentlyRunningApp: null, - error: null, - userActionNeeded: null, - } - }, - states: { - DeviceReady: { // check device capabilities & status known - always: { - target: "OnboardingCheck", - } - }, - - OnboardingCheck: { // check onboarding status provided by device session - always: [{ - target: "LockingCheck", - guard: { - type: "isDeviceOnboarded", - }, - }, { - target: "Error", - actions: "assignErrorDeviceNotOnboarded", - }], - }, - - LockingCheck: { // check locking status provided by device session - always: [{ - target: "ApplicationAvailable", - guard: "isDeviceUnlocked", - }, { - target: "Error", - actions: "assignErrorDeviceLocked", - }] - }, - - ApplicationAvailable: { // execute getAppAndVersion command - invoke: { - src: "getAppAndVersion", - onDone: { - target: "ApplicationCheck", - actions: assign({ - currentlyRunningApp: (_) => _.event.output.app, - }), - }, - onError: { - target: "Error", - actions: - assign({ - error: ({event}) => { - return event.error as Error - }, - }), - }, - } - }, - - ApplicationCheck: { // Is the current application the requested one - always: [{ - target: "ApplicationReady", - guard: "isRequestedAppOpen", - }, "DashboardCheck"] - }, - - DashboardCheck: { // Is the current application the dashboard - always: [{ - target: "OpenApplication", - guard: "isDashboardOpen", - }, "CloseApplication"] - }, - - CloseApplication: { - invoke: { - src: "closeApp", - onDone: { - target: "OpenApplication", - reenter: true - }, - onError: { - target: "Error", - actions: - assign({ - error: ({event}) => event.error as Error, - }), - }, - } - }, - - OpenApplication: { // execute openApp command, - entry: "assignUserActionNeededOpenApp", - exit: "assignNoUserActionNeeded", - invoke: { - src: "openApp", - input: ({context}) => ({appName: context.requestedAppName}), - onDone: { - target: "ApplicationReady", - actions: assign({ - currentlyRunningApp: (_) => _.context.requestedAppName, - }), - }, - onError: { - target: "Error", - actions: - assign({ - error: ({event}) => event.error as Error, - }), - }, - } - }, - - ApplicationReady: { // application is ready to be used - always: "Success" - }, - - // success state - Success: { - type: "final", - }, - - // error state - Error: { - type: "final", - }, - }, - output: ({context}) => context.error ? ({error: context.error}) : ({ - currentlyRunningApp: context.currentlyRunningApp as string, - }), - }); -} - - - -export default makeOpenAppMachine; \ No newline at end of file diff --git a/pocs/xstate-study/app/page.tsx b/pocs/xstate-study/app/page.tsx deleted file mode 100644 index 891c5d0a6..000000000 --- a/pocs/xstate-study/app/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import Machine from "./Machine"; - -export default function Home() { - return ( -
    - -
    - ); -} diff --git a/pocs/xstate-study/jest.config.js b/pocs/xstate-study/jest.config.js deleted file mode 100644 index 3414ac110..000000000 --- a/pocs/xstate-study/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} */ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - transform: { - '^.+\\.(ts|tsx)$': 'ts-jest', - }, - testMatch: ['**/*.test.(ts|tsx)'], -}; \ No newline at end of file diff --git a/pocs/xstate-study/next.config.mjs b/pocs/xstate-study/next.config.mjs deleted file mode 100644 index 61cd5eddd..000000000 --- a/pocs/xstate-study/next.config.mjs +++ /dev/null @@ -1,6 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - reactStrictMode: false, -}; - -export default nextConfig; diff --git a/pocs/xstate-study/package-lock.json b/pocs/xstate-study/package-lock.json deleted file mode 100644 index 0a6fc6322..000000000 --- a/pocs/xstate-study/package-lock.json +++ /dev/null @@ -1,7554 +0,0 @@ -{ - "name": "xstate-study", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "xstate-study", - "version": "0.1.0", - "dependencies": { - "@statelyai/inspect": "^0.3.1", - "next": "14.2.3", - "react": "^18", - "react-dom": "^18", - "xstate": "^5.13.1" - }, - "devDependencies": { - "@types/jest": "^29.5.12", - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.2.3", - "jest": "^29.7.0", - "ts-jest": "^29.1.4", - "typescript": "^5" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", - "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.6", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", - "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz", - "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.6", - "@babel/generator": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helpers": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/template": "^7.24.6", - "@babel/traverse": "^7.24.6", - "@babel/types": "^7.24.6", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz", - "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.6", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", - "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", - "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", - "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", - "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz", - "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz", - "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-simple-access": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz", - "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz", - "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", - "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", - "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", - "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz", - "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz", - "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", - "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.6", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", - "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz", - "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz", - "integrity": "sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", - "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", - "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz", - "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.6", - "@babel/generator": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-hoist-variables": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/types": "^7.24.6", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", - "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@next/env": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", - "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", - "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", - "dev": true, - "dependencies": { - "glob": "10.3.10" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", - "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", - "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", - "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", - "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", - "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", - "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", - "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", - "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", - "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", - "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==", - "dev": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@statelyai/inspect": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@statelyai/inspect/-/inspect-0.3.1.tgz", - "integrity": "sha512-KW3owf5UbPs1+/xOGJoSV4D69hP5xTX7PCzARr2R1senwfUIwyGP8yEsB8dvkMvekYvgFS0qa6lmg1eszYr2tw==", - "dependencies": { - "fast-safe-stringify": "^2.1.1", - "isomorphic-ws": "^5.0.0", - "partysocket": "^0.0.25", - "safe-stable-stringify": "^2.4.3", - "superjson": "^1.13.3", - "uuid": "^9.0.1" - }, - "peerDependencies": { - "xstate": "^5.5.1" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" - }, - "node_modules/@swc/helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", - "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", - "dependencies": { - "@swc/counter": "^0.1.3", - "tslib": "^2.4.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", - "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001627", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001627.tgz", - "integrity": "sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", - "dev": true - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", - "dependencies": { - "is-what": "^4.1.8" - }, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.788.tgz", - "integrity": "sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/enhanced-resolve": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", - "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.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.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", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz", - "integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==", - "dev": true, - "dependencies": { - "@next/eslint-plugin-next": "14.2.3", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", - "dev": true, - "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" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.34.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", - "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.hasown": "^1.1.4", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", - "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", - "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-what": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", - "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==", - "dependencies": { - "@next/env": "14.2.3", - "@swc/helpers": "0.5.5", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001579", - "graceful-fs": "^4.2.11", - "postcss": "8.4.31", - "styled-jsx": "5.1.1" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=18.17.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.3", - "@next/swc-darwin-x64": "14.2.3", - "@next/swc-linux-arm64-gnu": "14.2.3", - "@next/swc-linux-arm64-musl": "14.2.3", - "@next/swc-linux-x64-gnu": "14.2.3", - "@next/swc-linux-x64-musl": "14.2.3", - "@next/swc-win32-arm64-msvc": "14.2.3", - "@next/swc-win32-ia32-msvc": "14.2.3", - "@next/swc-win32-x64-msvc": "14.2.3" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/partysocket": { - "version": "0.0.25", - "resolved": "https://registry.npmjs.org/partysocket/-/partysocket-0.0.25.tgz", - "integrity": "sha512-1oCGA65fydX/FgdnsiBh68buOvfxuteoZVSb3Paci2kRp/7lhF0HyA8EDb5X/O6FxId1e+usPTQNRuzFEvkJbQ==", - "dependencies": { - "event-target-shim": "^6.0.2" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/superjson": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.13.3.tgz", - "integrity": "sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==", - "dependencies": { - "copy-anything": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-jest": { - "version": "29.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.4.tgz", - "integrity": "sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xstate": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/xstate/-/xstate-5.13.1.tgz", - "integrity": "sha512-saBUxsTb29Vq8bjq1TjLdGCYs2pneGMzQ7pqQyXh1nqZaSnKHkCkxf3EV+EDYbLnQioxK9HNMYPQrz4whj3RJQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/xstate" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/pocs/xstate-study/package.json b/pocs/xstate-study/package.json deleted file mode 100644 index 59a384de6..000000000 --- a/pocs/xstate-study/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "xstate-study", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "test": "jest" - }, - "dependencies": { - "@statelyai/inspect": "^0.3.1", - "next": "14.2.3", - "react": "^18", - "react-dom": "^18", - "xstate": "^5.13.1" - }, - "devDependencies": { - "@types/jest": "^29.5.12", - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.2.3", - "jest": "^29.7.0", - "ts-jest": "^29.1.4", - "typescript": "^5" - } -} diff --git a/pocs/xstate-study/tsconfig.json b/pocs/xstate-study/tsconfig.json deleted file mode 100644 index e7ff90fd2..000000000 --- a/pocs/xstate-study/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} From 0b5f7a66459c63a0847a25a13ea26c4cb35a3cb9 Mon Sep 17 00:00:00 2001 From: jz_ Date: Tue, 4 Jun 2024 15:54:29 +0200 Subject: [PATCH 239/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Rename=20generic?= =?UTF-8?q?=20types?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/DeviceSdk.ts | 6 ++++-- packages/core/src/api/command/Command.ts | 10 +++++----- .../src/api/command/use-case/SendCommandUseCase.ts | 12 ++++++------ .../internal/device-session/model/DeviceSession.ts | 7 +++++-- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index d2d585df7..34938d683 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -127,10 +127,12 @@ export class DeviceSdk { /** * Sends a command to a device through a device session. * - * @param {SendCommandUseCaseArgs} - The device session ID, command and command parameters to send. + * @param {SendCommandUseCaseArgs} args - The device session ID, command and command parameters to send. * @returns A promise resolving with the response from the command. */ - sendCommand(args: SendCommandUseCaseArgs): Promise { + sendCommand( + args: SendCommandUseCaseArgs, + ): Promise { return this.container .get(commandTypes.SendCommandUseCase) .execute(args); diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index 16970fee3..84c281607 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -5,17 +5,17 @@ import { ApduResponse } from "@api/device-session/ApduResponse"; /** * A command that can be sent to a device. * - * @template T - The type of the response returned by the device. - * @template U - The type of the arguments passed to the command (optional). + * @template Response - The type of the response returned by the device. + * @template Args - The type of the arguments passed to the command (optional). */ -export interface Command { +export interface Command { /** * Gets the APDU (Application Protocol Data Unit) for the command. * * @param args - The arguments passed to the command (optional). * @returns The APDU for the command. */ - getApdu(args?: U): Apdu; + getApdu(args?: Args): Apdu; /** * Parses the response received from the device. @@ -27,5 +27,5 @@ export interface Command { parseResponse( apduResponse: ApduResponse, deviceModelId: DeviceModelId | void, - ): T; + ): Response; } diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.ts index 19ce38102..7a16f32e6 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.ts @@ -6,7 +6,7 @@ import type { DeviceSessionService } from "@internal/device-session/service/Devi import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -export type SendCommandUseCaseArgs = { +export type SendCommandUseCaseArgs = { /** * The device session id. */ @@ -14,11 +14,11 @@ export type SendCommandUseCaseArgs = { /** * The command to send. */ - command: Command; + command: Command; /** * The parameters of the command. */ - params: U; + params: Args; }; /** @@ -46,11 +46,11 @@ export class SendCommandUseCase { * @param params - The parameters of the command. * @returns The response from the command. */ - async execute({ + async execute({ sessionId, command, params, - }: SendCommandUseCaseArgs): Promise { + }: SendCommandUseCaseArgs): Promise { const deviceSessionOrError = this._sessionService.getDeviceSessionById(sessionId); @@ -58,7 +58,7 @@ export class SendCommandUseCase { // Case device session found Right: async (deviceSession) => { const deviceModelId = deviceSession.connectedDevice.deviceModel.id; - const action = deviceSession.getCommand(command); + const action = deviceSession.sendCommand(command); return await action(deviceModelId, params); }, // Case device session not found diff --git a/packages/core/src/internal/device-session/model/DeviceSession.ts b/packages/core/src/internal/device-session/model/DeviceSession.ts index 8b9cb41b9..1806e8d10 100644 --- a/packages/core/src/internal/device-session/model/DeviceSession.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.ts @@ -97,8 +97,11 @@ export class DeviceSession { }); } - getCommand(command: Command) { - return async (deviceModelId: DeviceModelId, getApduArgs: U): Promise => { + sendCommand(command: Command) { + return async ( + deviceModelId: DeviceModelId, + getApduArgs: Args, + ): Promise => { const apdu = command.getApdu(getApduArgs); const response = await this.sendApdu(apdu.getRawApdu()); From 64a2b240fb727c00fd3cf1573e5ed7d23f66da0e Mon Sep 17 00:00:00 2001 From: jz_ Date: Tue, 4 Jun 2024 17:16:25 +0200 Subject: [PATCH 240/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Move=20exported?= =?UTF-8?q?=20types=20to=20@api=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/DeviceSdk.ts | 22 ++++++-------- packages/core/src/api/apdu/model/Apdu.ts | 2 +- .../use-case/SendCommandUseCase.test.ts | 2 +- .../discovery}/DiscoveredDevice.ts | 0 packages/core/src/api/types.ts | 30 +++++++++++++++++++ .../discovery/use-case/ConnectUseCase.ts | 9 +----- .../discovery/use-case/DisconnectUseCase.ts | 6 +--- .../use-case/StartDiscoveringUseCase.test.ts | 2 +- .../use-case/StartDiscoveringUseCase.ts | 2 +- .../internal/send/use-case/SendApduUseCase.ts | 13 +------- .../usb/model/InternalConnectedDevice.ts | 2 +- .../internal/usb/transport/UsbHidTransport.ts | 2 +- .../usb/transport/WebUsbHidTransport.ts | 2 +- 13 files changed, 49 insertions(+), 45 deletions(-) rename packages/core/src/{internal/usb/model => api/discovery}/DiscoveredDevice.ts (100%) diff --git a/packages/core/src/api/DeviceSdk.ts b/packages/core/src/api/DeviceSdk.ts index 34938d683..589072948 100644 --- a/packages/core/src/api/DeviceSdk.ts +++ b/packages/core/src/api/DeviceSdk.ts @@ -9,29 +9,25 @@ import { import { ApduResponse } from "@api/device-session/ApduResponse"; import { DeviceSessionState } from "@api/device-session/DeviceSessionState"; import { DeviceSessionId } from "@api/device-session/types"; +import { + ConnectUseCaseArgs, + DisconnectUseCaseArgs, + DiscoveredDevice, + SendApduUseCaseArgs, +} from "@api/types"; import { ConnectedDevice } from "@api/usb/model/ConnectedDevice"; import { configTypes } from "@internal/config/di/configTypes"; import { GetSdkVersionUseCase } from "@internal/config/use-case/GetSdkVersionUseCase"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { GetDeviceSessionStateUseCase } from "@internal/device-session/use-case/GetDeviceSessionStateUseCase"; import { discoveryTypes } from "@internal/discovery/di/discoveryTypes"; -import { - ConnectUseCase, - ConnectUseCaseArgs, -} from "@internal/discovery/use-case/ConnectUseCase"; -import { - DisconnectUseCase, - DisconnectUseCaseArgs, -} from "@internal/discovery/use-case/DisconnectUseCase"; +import { ConnectUseCase } from "@internal/discovery/use-case/ConnectUseCase"; +import { DisconnectUseCase } from "@internal/discovery/use-case/DisconnectUseCase"; import type { StartDiscoveringUseCase } from "@internal/discovery/use-case/StartDiscoveringUseCase"; import type { StopDiscoveringUseCase } from "@internal/discovery/use-case/StopDiscoveringUseCase"; import { sendTypes } from "@internal/send/di/sendTypes"; -import { - SendApduUseCase, - SendApduUseCaseArgs, -} from "@internal/send/use-case/SendApduUseCase"; +import { SendApduUseCase } from "@internal/send/use-case/SendApduUseCase"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; -import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { GetConnectedDeviceUseCase, GetConnectedDeviceUseCaseArgs, diff --git a/packages/core/src/api/apdu/model/Apdu.ts b/packages/core/src/api/apdu/model/Apdu.ts index 4482cb23c..1e12988ac 100644 --- a/packages/core/src/api/apdu/model/Apdu.ts +++ b/packages/core/src/api/apdu/model/Apdu.ts @@ -1,5 +1,5 @@ /** - * Represents an APDU command that can be sent to a device. + * An APDU command that can be sent to a device. * DO NOT USE THIS CLASS DIRECTLY, use ApduBuilder instead. */ export class Apdu { diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts index 713932625..9c0b04f60 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts @@ -34,7 +34,7 @@ describe("SendCommandUseCase", () => { const useCase = new SendCommandUseCase(sessionService, () => logger); jest - .spyOn(deviceSession, "getCommand") + .spyOn(deviceSession, "sendCommand") .mockReturnValue(async () => Promise.resolve({ status: "success" })); const response = await useCase.execute<{ status: string }>({ diff --git a/packages/core/src/internal/usb/model/DiscoveredDevice.ts b/packages/core/src/api/discovery/DiscoveredDevice.ts similarity index 100% rename from packages/core/src/internal/usb/model/DiscoveredDevice.ts rename to packages/core/src/api/discovery/DiscoveredDevice.ts diff --git a/packages/core/src/api/types.ts b/packages/core/src/api/types.ts index c8180c92e..0918bfc6d 100644 --- a/packages/core/src/api/types.ts +++ b/packages/core/src/api/types.ts @@ -1,4 +1,34 @@ +import type { DeviceId } from "@api/device/DeviceModel"; +import type { DeviceSessionId } from "@api/device-session/types"; + export type { DeviceId } from "./device/DeviceModel"; export type { ConnectionType } from "./discovery/ConnectionType"; +export type { DiscoveredDevice } from "./discovery/DiscoveredDevice"; export type { LogSubscriberOptions } from "./logger-subscriber/model/LogSubscriberOptions"; +export type { DeviceModelId } from "@api/device/DeviceModel"; export type { DeviceSessionId } from "@api/device-session/types"; + +export type ConnectUseCaseArgs = { + /** + * UUID of the device got from device discovery `StartDiscoveringUseCase` + */ + deviceId: DeviceId; +}; + +/** + * The arguments for the DisconnectUseCase. + */ +export type DisconnectUseCaseArgs = { + sessionId: DeviceSessionId; +}; + +export type SendApduUseCaseArgs = { + /** + * Device session identifier from `DeviceSdk.connect`. + */ + sessionId: DeviceSessionId; + /** + * Raw APDU to send to the device. + */ + apdu: Uint8Array; +}; diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts index 6f7a0d175..3c9a424b2 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -1,7 +1,7 @@ import { inject, injectable } from "inversify"; -import { DeviceId } from "@api/device/DeviceModel"; import { DeviceSessionId } from "@api/device-session/types"; +import type { ConnectUseCaseArgs } from "@api/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { DeviceSession } from "@internal/device-session/model/DeviceSession"; import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; @@ -11,13 +11,6 @@ import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; import type { DisconnectHandler } from "@internal/usb/transport/WebUsbHidTransport"; -export type ConnectUseCaseArgs = { - /** - * UUID of the device obtained through device discovery `StartDiscoveringUseCase` - */ - deviceId: DeviceId; -}; - /** * Connects to a discovered device via USB HID (and later BLE). */ diff --git a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts index 05cb9ab93..30041d718 100644 --- a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts @@ -1,6 +1,6 @@ import { inject, injectable } from "inversify"; -import { DeviceSessionId } from "@api/device-session/types"; +import type { DisconnectUseCaseArgs } from "@api/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; @@ -8,10 +8,6 @@ import { LoggerPublisherService } from "@internal/logger-publisher/service/Logge import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; -export type DisconnectUseCaseArgs = { - sessionId: DeviceSessionId; -}; - /** * Disconnects to a discovered device via USB HID (and later BLE). */ diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts index 1e14232fb..c3d8a90df 100644 --- a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts @@ -1,10 +1,10 @@ import { of } from "rxjs"; +import { DiscoveredDevice } from "@api/types"; import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { usbHidDeviceConnectionFactoryStubBuilder } from "@internal/usb/service/UsbHidDeviceConnectionFactory.stub"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts index b0a133642..c8cc76217 100644 --- a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts @@ -1,8 +1,8 @@ import { inject, injectable } from "inversify"; import { Observable } from "rxjs"; +import { DiscoveredDevice } from "@api/types"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; -import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; /** diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.ts index ce0905387..0ccb68e94 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.ts @@ -1,23 +1,12 @@ import { inject, injectable } from "inversify"; import { ApduResponse } from "@api/device-session/ApduResponse"; -import { DeviceSessionId } from "@api/device-session/types"; +import { SendApduUseCaseArgs } from "@api/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; -export type SendApduUseCaseArgs = { - /** - * Device session identifier obtained through `DeviceSdk.connect` - */ - sessionId: DeviceSessionId; - /** - * APDU to send to the device - */ - apdu: Uint8Array; -}; - /** * Sends an APDU to a connected device. */ diff --git a/packages/core/src/internal/usb/model/InternalConnectedDevice.ts b/packages/core/src/internal/usb/model/InternalConnectedDevice.ts index c457d4e80..a333e6544 100644 --- a/packages/core/src/internal/usb/model/InternalConnectedDevice.ts +++ b/packages/core/src/internal/usb/model/InternalConnectedDevice.ts @@ -4,7 +4,7 @@ import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; import { SendApduFnType } from "@internal/usb/transport/DeviceConnection"; /** - * Represents an internal connected device. + * The internal connected device. */ export type ConnectedDeviceConstructorArgs = { id: DeviceId; diff --git a/packages/core/src/internal/usb/transport/UsbHidTransport.ts b/packages/core/src/internal/usb/transport/UsbHidTransport.ts index 5e62aceae..fd145f844 100644 --- a/packages/core/src/internal/usb/transport/UsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/UsbHidTransport.ts @@ -3,7 +3,7 @@ import { Observable } from "rxjs"; import { DeviceId } from "@api/device/DeviceModel"; import { SdkError } from "@api/Error"; -import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; +import { DiscoveredDevice } from "@api/types"; import { ConnectError } from "@internal/usb/model/Errors"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; import type { DisconnectHandler } from "@internal/usb/transport/WebUsbHidTransport"; diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 3304e0da5..0f919fcf2 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -6,13 +6,13 @@ import { v4 as uuid } from "uuid"; import { DeviceId } from "@api/device/DeviceModel"; import { SdkError } from "@api/Error"; +import { DiscoveredDevice } from "@api/types"; import type { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { deviceModelTypes } from "@internal/device-model/di/deviceModelTypes"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import type { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; import { LEDGER_VENDOR_ID } from "@internal/usb/data/UsbHidConfig"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; -import { DiscoveredDevice } from "@internal/usb/model/DiscoveredDevice"; import { ConnectError, DeviceNotRecognizedError, From 34f4a5981f120f81a22854d06cd68910a36d0866 Mon Sep 17 00:00:00 2001 From: jz_ Date: Thu, 6 Jun 2024 11:30:13 +0200 Subject: [PATCH 241/253] =?UTF-8?q?=F0=9F=94=A7=20(repo):=20Update=20condi?= =?UTF-8?q?tion=20for=20dependabot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pull_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index cdc16cedc..c4b0316b4 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -19,7 +19,7 @@ jobs: danger: name: Run Danger check - if: ${{ !contains(github.ref_name, 'dependencies') }} + if: ${{ github.actor != 'dependabot[bot]' }} runs-on: [ubuntu-latest] steps: - uses: actions/checkout@v4 From 44e3c805d1a08fdd09347153e0c8676e7e2227f5 Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Tue, 11 Jun 2024 11:05:15 +0200 Subject: [PATCH 242/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Add=20mo?= =?UTF-8?q?re=20exports=20in=20barrel=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/index.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 1931c8add..3d3f93fea 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -1,5 +1,12 @@ "use strict"; +export { ApduBuilder } from "./apdu/utils/ApduBuilder"; +export { ApduParser } from "./apdu/utils/ApduParser"; +export { CloseAppCommand } from "./command/os/CloseAppCommand"; +export { GetAppAndVersionCommand } from "./command/os/GetAppAndVersionCommand"; +export { GetOsVersionCommand } from "./command/os/GetOsVersionCommand"; +export { OpenAppCommand } from "./command/os/OpenAppCommand"; +export { CommandUtils } from "./command/utils/CommandUtils"; export { DeviceModel, DeviceModelId } from "./device/DeviceModel"; export { DeviceStatus } from "./device/DeviceStatus"; export { ApduResponse } from "./device-session/ApduResponse"; From d710fac486660798dc1960a053d81ea9dbacebec Mon Sep 17 00:00:00 2001 From: jz_ Date: Tue, 11 Jun 2024 11:09:16 +0200 Subject: [PATCH 243/253] =?UTF-8?q?=E2=9C=A8=20(core):=20Separate=20Device?= =?UTF-8?q?Model=20definition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/device/DeviceModel.ts | 20 ++++++++--- packages/core/src/api/types.ts | 33 +++---------------- .../src/api/usb/model/DiscoveredDevice.ts | 9 +++++ .../discovery/use-case/ConnectUseCase.ts | 12 ++++++- .../discovery/use-case/DisconnectUseCase.ts | 12 ++++++- .../use-case/StartDiscoveringUseCase.test.ts | 22 ++++++++++--- .../use-case/StartDiscoveringUseCase.ts | 18 ++++++++-- .../internal/send/use-case/SendApduUseCase.ts | 16 ++++++++- .../usb/model/InternalDiscoveredDevice.ts} | 4 +-- .../internal/usb/transport/UsbHidTransport.ts | 4 +-- .../usb/transport/WebUsbHidTransport.ts | 6 ++-- 11 files changed, 105 insertions(+), 51 deletions(-) create mode 100644 packages/core/src/api/usb/model/DiscoveredDevice.ts rename packages/core/src/{api/discovery/DiscoveredDevice.ts => internal/usb/model/InternalDiscoveredDevice.ts} (86%) diff --git a/packages/core/src/api/device/DeviceModel.ts b/packages/core/src/api/device/DeviceModel.ts index b4f60e01c..50432be29 100644 --- a/packages/core/src/api/device/DeviceModel.ts +++ b/packages/core/src/api/device/DeviceModel.ts @@ -15,10 +15,20 @@ export enum DeviceModelId { */ export type DeviceId = string; +export type DeviceModelArgs = { + id: DeviceId; + model: DeviceModelId; + name: string; +}; + export class DeviceModel { - constructor( - public id: DeviceId, - public model: DeviceModelId, - public name: string, - ) {} + public id: DeviceId; + public model: DeviceModelId; + public name: string; + + constructor({ id, model, name }: DeviceModelArgs) { + this.id = id; + this.model = model; + this.name = name; + } } diff --git a/packages/core/src/api/types.ts b/packages/core/src/api/types.ts index 0918bfc6d..554fd97f1 100644 --- a/packages/core/src/api/types.ts +++ b/packages/core/src/api/types.ts @@ -1,34 +1,9 @@ -import type { DeviceId } from "@api/device/DeviceModel"; -import type { DeviceSessionId } from "@api/device-session/types"; - export type { DeviceId } from "./device/DeviceModel"; export type { ConnectionType } from "./discovery/ConnectionType"; -export type { DiscoveredDevice } from "./discovery/DiscoveredDevice"; export type { LogSubscriberOptions } from "./logger-subscriber/model/LogSubscriberOptions"; +export type { DiscoveredDevice } from "./usb/model/DiscoveredDevice"; export type { DeviceModelId } from "@api/device/DeviceModel"; export type { DeviceSessionId } from "@api/device-session/types"; - -export type ConnectUseCaseArgs = { - /** - * UUID of the device got from device discovery `StartDiscoveringUseCase` - */ - deviceId: DeviceId; -}; - -/** - * The arguments for the DisconnectUseCase. - */ -export type DisconnectUseCaseArgs = { - sessionId: DeviceSessionId; -}; - -export type SendApduUseCaseArgs = { - /** - * Device session identifier from `DeviceSdk.connect`. - */ - sessionId: DeviceSessionId; - /** - * Raw APDU to send to the device. - */ - apdu: Uint8Array; -}; +export type { ConnectUseCaseArgs } from "@internal/discovery/use-case/ConnectUseCase"; +export type { DisconnectUseCaseArgs } from "@internal/discovery/use-case/DisconnectUseCase"; +export type { SendApduUseCaseArgs } from "@internal/send/use-case/SendApduUseCase"; diff --git a/packages/core/src/api/usb/model/DiscoveredDevice.ts b/packages/core/src/api/usb/model/DiscoveredDevice.ts new file mode 100644 index 000000000..c78b2ae58 --- /dev/null +++ b/packages/core/src/api/usb/model/DiscoveredDevice.ts @@ -0,0 +1,9 @@ +import { DeviceId, DeviceModel } from "@api/device/DeviceModel"; + +/** + * A discovered device. + */ +export type DiscoveredDevice = { + id: DeviceId; + deviceModel: DeviceModel; +}; diff --git a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts index 3c9a424b2..e0f4c24d6 100644 --- a/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/ConnectUseCase.ts @@ -1,7 +1,7 @@ import { inject, injectable } from "inversify"; import { DeviceSessionId } from "@api/device-session/types"; -import type { ConnectUseCaseArgs } from "@api/types"; +import { DeviceId } from "@api/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import { DeviceSession } from "@internal/device-session/model/DeviceSession"; import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; @@ -11,6 +11,16 @@ import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; import type { DisconnectHandler } from "@internal/usb/transport/WebUsbHidTransport"; +/** + * The arguments for the ConnectUseCase. + */ +export type ConnectUseCaseArgs = { + /** + * UUID of the device got from device discovery `StartDiscoveringUseCase` + */ + deviceId: DeviceId; +}; + /** * Connects to a discovered device via USB HID (and later BLE). */ diff --git a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts index 30041d718..143df7036 100644 --- a/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/DisconnectUseCase.ts @@ -1,6 +1,6 @@ import { inject, injectable } from "inversify"; -import type { DisconnectUseCaseArgs } from "@api/types"; +import type { DeviceSessionId } from "@api/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; @@ -8,6 +8,16 @@ import { LoggerPublisherService } from "@internal/logger-publisher/service/Logge import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; +/** + * The arguments for the DisconnectUseCase. + */ +export type DisconnectUseCaseArgs = { + /** + * Device session identifier from `DeviceSdk.connect`. + */ + sessionId: DeviceSessionId; +}; + /** * Disconnects to a discovered device via USB HID (and later BLE). */ diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts index c3d8a90df..6d1521cfb 100644 --- a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts @@ -1,10 +1,12 @@ import { of } from "rxjs"; -import { DiscoveredDevice } from "@api/types"; +import { DeviceModel } from "@api/index"; +import { DeviceModelId, DiscoveredDevice } from "@api/types"; import { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; import { DefaultLoggerPublisherService } from "@internal/logger-publisher/service/DefaultLoggerPublisherService"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +import { InternalDiscoveredDevice } from "@internal/usb/model/InternalDiscoveredDevice"; import { usbHidDeviceConnectionFactoryStubBuilder } from "@internal/usb/service/UsbHidDeviceConnectionFactory.stub"; import { WebUsbHidTransport } from "@internal/usb/transport/WebUsbHidTransport"; @@ -14,9 +16,12 @@ let transport: WebUsbHidTransport; let logger: LoggerPublisherService; describe("StartDiscoveringUseCase", () => { - const stubDiscoveredDevice: DiscoveredDevice = { - id: "", - deviceModel: {} as InternalDeviceModel, + const stubDiscoveredDevice: InternalDiscoveredDevice = { + id: "internal-discovered-device-id", + deviceModel: { + id: "nanoSP" as DeviceModelId, + productName: "productName", + } as InternalDeviceModel, }; const tag = "logger-tag"; @@ -47,7 +52,14 @@ describe("StartDiscoveringUseCase", () => { expect(mockedStartDiscovering).toHaveBeenCalled(); discover.subscribe({ next: (discoveredDevice) => { - expect(discoveredDevice).toBe(stubDiscoveredDevice); + expect(discoveredDevice).toStrictEqual({ + id: "internal-discovered-device-id", + deviceModel: new DeviceModel({ + id: "internal-discovered-device-id", + model: "nanoSP" as DeviceModelId, + name: "productName", + }), + } as DiscoveredDevice); done(); }, error: (error) => { diff --git a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts index c8cc76217..f3d935b87 100644 --- a/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts +++ b/packages/core/src/internal/discovery/use-case/StartDiscoveringUseCase.ts @@ -1,8 +1,10 @@ import { inject, injectable } from "inversify"; -import { Observable } from "rxjs"; +import { map, Observable } from "rxjs"; +import { DeviceModel } from "@api/index"; import { DiscoveredDevice } from "@api/types"; import { usbDiTypes } from "@internal/usb/di/usbDiTypes"; +import { InternalDiscoveredDevice } from "@internal/usb/model/InternalDiscoveredDevice"; import type { UsbHidTransport } from "@internal/usb/transport/UsbHidTransport"; /** @@ -19,6 +21,18 @@ export class StartDiscoveringUseCase { ) {} execute(): Observable { - return this.usbHidTransport.startDiscovering(); + return this.usbHidTransport.startDiscovering().pipe( + map((data: InternalDiscoveredDevice) => { + const deviceModel = new DeviceModel({ + id: data.id, + model: data.deviceModel.id, + name: data.deviceModel.productName, + }); + return { + id: data.id, + deviceModel, + }; + }), + ); } } diff --git a/packages/core/src/internal/send/use-case/SendApduUseCase.ts b/packages/core/src/internal/send/use-case/SendApduUseCase.ts index 0ccb68e94..84ff963d0 100644 --- a/packages/core/src/internal/send/use-case/SendApduUseCase.ts +++ b/packages/core/src/internal/send/use-case/SendApduUseCase.ts @@ -1,12 +1,26 @@ import { inject, injectable } from "inversify"; import { ApduResponse } from "@api/device-session/ApduResponse"; -import { SendApduUseCaseArgs } from "@api/types"; +import { DeviceSessionId } from "@api/types"; import { deviceSessionTypes } from "@internal/device-session/di/deviceSessionTypes"; import type { DeviceSessionService } from "@internal/device-session/service/DeviceSessionService"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; import { LoggerPublisherService } from "@internal/logger-publisher/service/LoggerPublisherService"; +/** + * The arguments for the SendApduUseCase. + */ +export type SendApduUseCaseArgs = { + /** + * Device session identifier from `DeviceSdk.connect`. + */ + sessionId: DeviceSessionId; + /** + * Raw APDU to send to the device. + */ + apdu: Uint8Array; +}; + /** * Sends an APDU to a connected device. */ diff --git a/packages/core/src/api/discovery/DiscoveredDevice.ts b/packages/core/src/internal/usb/model/InternalDiscoveredDevice.ts similarity index 86% rename from packages/core/src/api/discovery/DiscoveredDevice.ts rename to packages/core/src/internal/usb/model/InternalDiscoveredDevice.ts index 5dc6a39a1..560bfb469 100644 --- a/packages/core/src/api/discovery/DiscoveredDevice.ts +++ b/packages/core/src/internal/usb/model/InternalDiscoveredDevice.ts @@ -2,9 +2,9 @@ import { DeviceId } from "@api/device/DeviceModel"; import { InternalDeviceModel } from "@internal/device-model/model/DeviceModel"; /** - * Represents a discovered/scanned (not yet connected to) device. + * A discovered / scanned (not yet connected to) device. */ -export type DiscoveredDevice = { +export type InternalDiscoveredDevice = { // type: "web-hid", // "node-hid" in the future -> no need as we will only have 1 USB transport implementation running /** diff --git a/packages/core/src/internal/usb/transport/UsbHidTransport.ts b/packages/core/src/internal/usb/transport/UsbHidTransport.ts index fd145f844..9808443bd 100644 --- a/packages/core/src/internal/usb/transport/UsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/UsbHidTransport.ts @@ -3,9 +3,9 @@ import { Observable } from "rxjs"; import { DeviceId } from "@api/device/DeviceModel"; import { SdkError } from "@api/Error"; -import { DiscoveredDevice } from "@api/types"; import { ConnectError } from "@internal/usb/model/Errors"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; +import { InternalDiscoveredDevice } from "@internal/usb/model/InternalDiscoveredDevice"; import type { DisconnectHandler } from "@internal/usb/transport/WebUsbHidTransport"; /** @@ -14,7 +14,7 @@ import type { DisconnectHandler } from "@internal/usb/transport/WebUsbHidTranspo export interface UsbHidTransport { isSupported(): boolean; - startDiscovering(): Observable; + startDiscovering(): Observable; stopDiscovering(): void; diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 0f919fcf2..42a5683d4 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -6,7 +6,6 @@ import { v4 as uuid } from "uuid"; import { DeviceId } from "@api/device/DeviceModel"; import { SdkError } from "@api/Error"; -import { DiscoveredDevice } from "@api/types"; import type { DeviceModelDataSource } from "@internal/device-model/data/DeviceModelDataSource"; import { deviceModelTypes } from "@internal/device-model/di/deviceModelTypes"; import { loggerTypes } from "@internal/logger-publisher/di/loggerTypes"; @@ -24,6 +23,7 @@ import { UsbHidTransportNotSupportedError, } from "@internal/usb/model/Errors"; import { InternalConnectedDevice } from "@internal/usb/model/InternalConnectedDevice"; +import { InternalDiscoveredDevice } from "@internal/usb/model/InternalDiscoveredDevice"; import { UsbHidDeviceConnectionFactory } from "@internal/usb/service/UsbHidDeviceConnectionFactory"; import { UsbHidTransport } from "./UsbHidTransport"; @@ -32,7 +32,7 @@ import { UsbHidTransport } from "./UsbHidTransport"; type WebHidInternalDevice = { id: DeviceId; hidDevice: HIDDevice; - discoveredDevice: DiscoveredDevice; + discoveredDevice: InternalDiscoveredDevice; }; export type DisconnectHandler = (deviceId: DeviceId) => void; @@ -163,7 +163,7 @@ export class WebUsbHidTransport implements UsbHidTransport { * [ASK] For the 2nd option: the DiscoveredDevice could have a `isSelected` property ? * So the consumer can directly select this device. */ - startDiscovering(): Observable { + startDiscovering(): Observable { this._logger.debug("startDiscovering"); // Logs the connection and disconnection events From 1da2c21ab77f6eb6f6adf9ce76811869a9fe98ab Mon Sep 17 00:00:00 2001 From: Olivier Freyssinet Date: Tue, 11 Jun 2024 10:50:55 +0200 Subject: [PATCH 244/253] =?UTF-8?q?=F0=9F=93=9D=20(core):=20Getting=20star?= =?UTF-8?q?ted=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/README.md | 246 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 236 insertions(+), 10 deletions(-) diff --git a/packages/core/README.md b/packages/core/README.md index 89b3387b4..b35649978 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -1,16 +1,242 @@ -# Description +# Device SDK Core Library Documentation -The core package contains the core of the Device SDK. -It provides a simple interface to handle ledger Devices. -It features the SDK's entry points, classes, types, structures and models. +- [Device SDK Core Library Documentation](#device-sdk-core-library-documentation) + - [Description](#description) + - [Installation](#installation) + - [Usage](#usage) + - [Compatibility](#compatibility) + - [Pre-requisites](#pre-requisites) + - [Main Features](#main-features) + - [Setting up the SDK](#setting-up-the-sdk) + - [Connecting to a Device](#connecting-to-a-device) + - [Sending an APDU](#sending-an-apdu) + - [Sending a Pre-defined Command](#sending-a-pre-defined-command) + - [Open App](#open-app) + - [Close App](#close-app) + - [Get OS Version](#get-os-version) + - [Get App and Version](#get-app-and-version) + - [Building a Custom Command](#building-a-custom-command) + - [Example in React](#example-in-react) -# Installation +## Description -To install the package please execute the following command at the root of the clone repository: -`npm install @ledgerhq/device-sdk-core` +The core package contains the core of the Device SDK. It provides a simple interface to handle Ledger devices and features the SDK's entry points, classes, types, structures, and models. -# Usage +## Installation -# Testing +To install the core package, run the following command: -# References API +```sh +npm install @ledgerhq/device-sdk-core +``` + +## Usage + +### Compatibility + +This library works in [any browser supporting the WebHID API](https://developer.mozilla.org/en-US/docs/Web/API/WebHID_API#browser_compatibility). + +### Pre-requisites + +Some of the APIs exposed return objects of type `Observable` from RxJS. Ensure you are familiar with the basics of the Observer pattern and RxJS before using this SDK. You can refer to [RxJS documentation](https://rxjs.dev/guide/overview) for more information. + +### Main Features + +- Discovering and connecting to Ledger devices via USB, through [WebHID](https://developer.mozilla.org/en-US/docs/Web/API/WebHID_API). +- Observing the state of a connected device. +- Sending custom APDU commands to Ledger devices. +- Sending a set of pre-defined commands to Ledger devices. + - Get OS version + - Get app and version + - Open app + - Close app + - Get battery status + +### Setting up the SDK + +The core package exposes an SDK builder `DeviceSdkBuilder` which will be used to initialise the SDK with your configuration. + +For now it allows you to add one or more custom loggers. + +In the following example, we add a console logger (`.addLogger(new ConsoleLogger())`). Then we build the SDK with `.build()`. + +**The returned object will be the entrypoint for all your interactions with the SDK.** + +The SDK should be built only once in your application runtime so keep a reference of this object somewhere. + +```ts +import { + ConsoleLogger, + DeviceSdk, + DeviceSdkBuilder, +} from "@ledgerhq/device-sdk-core"; + +export const sdk = new DeviceSdkBuilder() + .addLogger(new ConsoleLogger()) + .build(); +``` + +### Connecting to a Device + +There are two steps to connecting to a device: + +- **Discovery**: `sdk.startDiscovering()` + - Returns an observable which will emit a new `DiscoveredDevice` for every scanned device. + - The `DiscoveredDevice` objects contain information about the device model. + - Use one of these values to connect to a given discovered device. +- **Connection**: `sdk.connect({ deviceId: device.id })` + - Returns a Promise resolving in a device session identifier `DeviceSessionId`. + - **Keep this device session identifier to further interact with the device.** + - Then, `sdk.getConnectedDevice({ sessionId })` returns the `ConnectedDevice`, which contains information about the device model and its name. + +```ts +sdk.startDiscovering().subscribe({ + next: (device) => { + sdk.connect({ deviceId: device.id }).then((sessionId) => { + const connectedDevice = sdk.getConnectedDevice({ sessionId }); + }); + }, + error: (error) => { + console.error(error); + }, +}); +``` + +Then once a device is connected: + +- **Disconnection**: `sdk.disconnect({ sessionId })` +- **Observe the device session state**: `sdk.getDeviceSessionState({ sessionId })` + - This will return an `Observable` to listen to the known information about the device: + - device status: + - ready to process a command + - busy + - locked + - disconnected + - device name + - information on the OS + - battery status + - currently opened app + +### Sending an APDU + +Once you have a connected device, you can send it APDU commands. + +> ℹ️ It is recommended to use the [pre-defined commands](#sending-a-pre-defined-command) when possible, or [build your own command](#building-a-new-command), to avoid dealing with the APDU directly. It will make your code more reusable. + +```ts +import { + ApduBuilder, + ApduParser, + CommandUtils, +} from "@ledgerhq/device-sdk-core"; + +// ### 1. Building the APDU +// Use `ApduBuilder` to easily build the APDU and add data to its data field. + +// Build the APDU to open the Bitcoin app +const openAppApduArgs = { + cla: 0xe0, + ins: 0xd8, + p1: 0x00, + p2: 0x00, +}; +const apdu = new ApduBuilder(openAppApduArgs) + .addAsciiStringToData("Bitcoin") + .build(); + +// ### 2. Sending the APDU + +const apduResponse = await sdk.sendApdu({ sessionId, apdu }); + +// ### 3. Parsing the result + +const parser = new ApduParser(apduResponse); + +if (!CommandUtils.isSuccessResponse(apduResponse)) { + throw new Error( + `Unexpected status word: ${parser.encodeToHexaString( + apduResponse.statusCode, + )}`, + ); +} +``` + +### Sending a Pre-defined Command + +There are some pre-defined commands that you can send to a connected device. + +The `sendCommand` method will take care of building the APDU, sending it to the device and returning the parsed response. + +> ### ❗️ Error Responses +> +> Most of the commands will reject with an error if the device is locked. +> Ensure that the device is unlocked before sending commands. You can check the device session state (`sdk.getDeviceSessionState`) to know if the device is locked. +> +> Most of the commands will reject with an error if the response status word is not `0x9000` (success response from the device). + +#### Open App + +This command will open the app with the given name. If the device is unlocked, it will not resolve/reject until the user has confirmed or denied the app opening on the device. + +```ts +import { OpenAppCommand } from "@ledgerhq/device-sdk-core"; + +const command = new OpenAppCommand("Bitcoin"); // Open the Bitcoin app + +await sdk.sendCommand({ sessionId, command }); +``` + +#### Close App + +This command will close the currently opened app. + +```ts +import { CloseAppCommand } from "@ledgerhq/device-sdk-core"; + +const command = new CloseAppCommand(); + +await sdk.sendCommand({ sessionId, command }); +``` + +#### Get OS Version + +This command will return information about the currently installed OS on the device. + +> ℹ️ If you want this information you can simply get it from the device session state by observing it with `sdk.getDeviceSessionState({ sessionId })`. + +```ts +import { GetOsVersionCommand } from "@ledgerhq/device-sdk-core"; + +const command = new GetOsVersionCommand(); + +const { seVersion, mcuSephVersion, mcuBootloaderVersion } = + await sdk.sendCommand({ sessionId, command }); +``` + +#### Get App and Version + +This command will return the name and version of the currently running app on the device. + +> ℹ️ If you want this information you can simply get it from the device session state by observing it with `sdk.getDeviceSessionState({ sessionId })`. + +```ts +import { GetAppAndVersionCommand } from "@ledgerhq/device-sdk-core"; + +const command = new GetAppAndVersionCommand(); + +const { name, version } = await sdk.sendCommand({ sessionId, command }); +``` + +### Building a Custom Command + +You can build your own command simply by extending the `Command` class and implementing the `getApdu` and `parseResponse` methods. + +Then you can use the `sendCommand` method to send it to a connected device. + +This is strongly recommended over direct usage of `sendApdu`. + +Check the existing commands for a variety of examples. + +### Example in React + +Check [the sample app](https://github.com/LedgerHQ/device-sdk-ts/tree/develop/apps/sample) for an advanced example showcasing all possible usages of the device SDK in a React app. From a397fca88004df35f58b1e4c9b989765cf09aa3e Mon Sep 17 00:00:00 2001 From: jz_ Date: Thu, 6 Jun 2024 10:53:34 +0200 Subject: [PATCH 245/253] =?UTF-8?q?=F0=9F=94=A7=20(repo):=20Limit=20the=20?= =?UTF-8?q?usage=20of=20`as`=20keyword=20for=20type=20assertion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sample/src/components/ApduView/index.tsx | 2 +- apps/sample/src/components/Sidebar/index.tsx | 2 +- apps/sample/src/hooks/useApduForm.ts | 2 +- packages/config/eslint/index.js | 9 +- packages/config/eslint/package.json | 1 + packages/core/src/api/Error.ts | 2 +- .../core/src/api/apdu/utils/ApduParser.ts | 6 +- .../api/command/os/GetAppAndVersionCommand.ts | 4 +- .../config/data/LocalConfigDataSource.ts | 23 +- .../core/src/internal/config/model/Config.ts | 16 ++ .../data/StaticDeviceModelDataSource.ts | 1 + .../model/DeviceSessionRefresher.ts | 8 +- .../service/DefaultApduReceiverService.ts | 6 +- .../core/src/internal/usb/model/Errors.ts | 74 ++--- .../src/internal/usb/model/HIDDevice.stub.ts | 4 +- .../transport/UsbHidDeviceConnection.test.ts | 4 +- .../usb/transport/WebUsbHidTransport.test.ts | 10 +- .../usb/transport/WebUsbHidTransport.ts | 51 ++-- pnpm-lock.yaml | 263 +++++++++++------- 19 files changed, 288 insertions(+), 200 deletions(-) diff --git a/apps/sample/src/components/ApduView/index.tsx b/apps/sample/src/components/ApduView/index.tsx index 5e01972d1..7aad24771 100644 --- a/apps/sample/src/components/ApduView/index.tsx +++ b/apps/sample/src/components/ApduView/index.tsx @@ -78,7 +78,7 @@ export const ApduView: React.FC = () => { try { rawApduResponse = await sdk.sendApdu({ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion - sessionId: selectedSessionId!, + sessionId: selectedSessionId ?? "", apdu: getRawApdu(values), }); setApduResponse(rawApduResponse); diff --git a/apps/sample/src/components/Sidebar/index.tsx b/apps/sample/src/components/Sidebar/index.tsx index 6d2a15a6b..75ecbef58 100644 --- a/apps/sample/src/components/Sidebar/index.tsx +++ b/apps/sample/src/components/Sidebar/index.tsx @@ -53,7 +53,7 @@ export const Sidebar: React.FC = () => { .getVersion() .then((v) => setVersion(v)) .catch((error: unknown) => { - console.error(error as Error); + console.error(new Error(String(error))); setVersion(""); }); }, [sdk]); diff --git a/apps/sample/src/hooks/useApduForm.ts b/apps/sample/src/hooks/useApduForm.ts index 999c9506a..72ba4e601 100644 --- a/apps/sample/src/hooks/useApduForm.ts +++ b/apps/sample/src/hooks/useApduForm.ts @@ -37,7 +37,7 @@ export function useApduForm() { .map((char) => Number(`0x${char}`)) .filter((nbr) => !Number.isNaN(nbr)), ], - [] as number[], + Array(), ), ), [], diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index a95d570e4..7f790ad61 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -5,7 +5,7 @@ const project = resolve(process.cwd(), "tsconfig.json"); /** @type {import("eslint").Linter.Config} */ module.exports = { extends: ["eslint:recommended", "prettier", "turbo"], - plugins: ["simple-import-sort"], + plugins: ["no-type-assertion", "simple-import-sort"], globals: { React: true, JSX: true, @@ -82,6 +82,13 @@ module.exports = { "error", { argsIgnorePattern: "^_" }, ], + "no-type-assertion/no-type-assertion": "error", + }, + }, + { + files: ["**/*.test.ts", "**/*.stub.ts"], + rules: { + "no-type-assertion/no-type-assertion": "off", }, }, ], diff --git a/packages/config/eslint/package.json b/packages/config/eslint/package.json index c7a359d75..a0cde1d78 100644 --- a/packages/config/eslint/package.json +++ b/packages/config/eslint/package.json @@ -12,6 +12,7 @@ "@vercel/style-guide": "^6.0.0", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^1.13.2", + "eslint-plugin-no-type-assertion": "^1.3.0", "eslint-plugin-simple-import-sort": "^12.0.0" } } diff --git a/packages/core/src/api/Error.ts b/packages/core/src/api/Error.ts index 3ea5b8ef9..7231ae967 100644 --- a/packages/core/src/api/Error.ts +++ b/packages/core/src/api/Error.ts @@ -1,5 +1,5 @@ export interface SdkError { readonly _tag: string; - originalError?: Error; + originalError?: unknown; // [could] message?: string; } diff --git a/packages/core/src/api/apdu/utils/ApduParser.ts b/packages/core/src/api/apdu/utils/ApduParser.ts index 783ebd633..15661e773 100644 --- a/packages/core/src/api/apdu/utils/ApduParser.ts +++ b/packages/core/src/api/apdu/utils/ApduParser.ts @@ -111,16 +111,14 @@ export class ApduParser { extractFieldTLVEncoded(): TaggedField | undefined { if (this._outOfRange(2)) return; - // extract the tag field const tag = this.extract8BitUint(); const value = this.extractFieldLVEncoded(); - // if the field is inconsistent then roll back to the initial point - if (!value) { + if (!tag || !value) { this._index--; return; } - return { tag, value } as TaggedField; + return { tag, value }; } /** diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts index 9990a7799..c1d55333d 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts @@ -58,10 +58,10 @@ export class GetAppAndVersionCommand const version = parser.encodeToString(parser.extractFieldLVEncoded()); if (parser.getUnparsedRemainingLength() === 0) { - return { name, version } as GetAppAndVersionResponse; + return { name, version }; } const flags = parser.extractFieldLVEncoded(); - return { name, version, flags } as GetAppAndVersionResponse; + return { name, version, flags }; } } diff --git a/packages/core/src/internal/config/data/LocalConfigDataSource.ts b/packages/core/src/internal/config/data/LocalConfigDataSource.ts index 14a114c4c..a0d3fbdd3 100644 --- a/packages/core/src/internal/config/data/LocalConfigDataSource.ts +++ b/packages/core/src/internal/config/data/LocalConfigDataSource.ts @@ -1,7 +1,7 @@ import { injectable } from "inversify"; import { Either } from "purify-ts"; -import { Config } from "@internal/config/model/Config"; +import { Config, isConfig } from "@internal/config/model/Config"; import { JSONParseError, LocalConfigFailure, @@ -18,21 +18,26 @@ const version = { export const stubFsReadFile = () => JSON.stringify(version); +@injectable() /** - * - * class FileLocalConfigDataSource - * This is a local data source that reads the config from a local file. - * + * The data source for retrieving local configuration. */ -@injectable() export class FileLocalConfigDataSource implements LocalConfigDataSource { + /** + * Retrieves the local configuration. + * @returns An `Either` containing either a `LocalConfigFailure` or a `Config` object. + */ getConfig(): Either { return Either.encase(() => stubFsReadFile()) .mapLeft((error) => new ReadFileError(error)) .chain((str) => { - return Either.encase(() => JSON.parse(str) as Config).mapLeft( - (error) => new JSONParseError(error), - ); + return Either.encase(() => { + const config: unknown = JSON.parse(str); + if (isConfig(config)) { + return config; + } + throw new Error("Invalid config file"); + }).mapLeft((error) => new JSONParseError(error)); }); } } diff --git a/packages/core/src/internal/config/model/Config.ts b/packages/core/src/internal/config/model/Config.ts index 8f537fcdc..53eae3f8e 100644 --- a/packages/core/src/internal/config/model/Config.ts +++ b/packages/core/src/internal/config/model/Config.ts @@ -4,3 +4,19 @@ export type Config = { version: string; name: string; }; + +/** + * Checks if the provided object is a valid Config object. + * @param obj - The object to be checked. + * @returns A boolean indicating whether the object is a Config object. + */ +export function isConfig(obj: unknown): obj is Config { + return ( + typeof obj === "object" && + obj !== null && + "version" in obj && + "name" in obj && + typeof obj.version === "string" && + typeof obj.name === "string" + ); +} diff --git a/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts index b02c8fc70..62f07ba4d 100644 --- a/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts +++ b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts @@ -83,6 +83,7 @@ export class StaticDeviceModelDataSource implements DeviceModelDataSource { ): InternalDeviceModel[] { return this.getAllDeviceModels().filter((deviceModel) => { return Object.entries(params).every(([key, value]) => { + // eslint-disable-next-line no-type-assertion/no-type-assertion return deviceModel[key as keyof InternalDeviceModel] === value; }); }); diff --git a/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts b/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts index 853afa607..bec0873ae 100644 --- a/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts +++ b/packages/core/src/internal/device-session/model/DeviceSessionRefresher.ts @@ -97,11 +97,15 @@ export class DeviceSessionRefresher { filter((parsedResponse) => parsedResponse !== null), ) .subscribe((parsedResponse: GetAppAndVersionResponse | null) => { - // batteryStatus and firmwareVersion are not available in the polling response. + // This should never happen and it should be abled to handle in next version of TypeScript. + if (parsedResponse === null) { + return; + } + // `batteryStatus` and `firmwareVersion` are not available in the polling response. updateStateFn({ sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel, deviceStatus: this._deviceStatus, - currentApp: parsedResponse!.name, + currentApp: parsedResponse.name, }); }); } diff --git a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts index 805e21a68..b3eae1a66 100644 --- a/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts +++ b/packages/core/src/internal/device-session/service/DefaultApduReceiverService.ts @@ -57,8 +57,10 @@ export class DefaultApduReceiverService implements ApduReceiverService { data: { frame: value.getRawData() }, }); this._pendingFrames.push(value); - - const dataSize = this._pendingFrames[0]!.getHeader().getDataLength(); + if (!this._pendingFrames[0]) { + return Nothing; + } + const dataSize = this._pendingFrames[0].getHeader().getDataLength(); return this.getCompleteFrame(dataSize); }); } diff --git a/packages/core/src/internal/usb/model/Errors.ts b/packages/core/src/internal/usb/model/Errors.ts index 8bd947382..2ae48ab6f 100644 --- a/packages/core/src/internal/usb/model/Errors.ts +++ b/packages/core/src/internal/usb/model/Errors.ts @@ -6,59 +6,63 @@ export type PromptDeviceAccessError = export type ConnectError = UnknownDeviceError | OpeningConnectionError; -export class DeviceNotRecognizedError implements SdkError { - readonly _tag = "DeviceNotRecognizedError"; - originalError?: Error; - constructor(readonly err?: Error) { - this.originalError = err; +class GeneralSdkError implements SdkError { + _tag = "GeneralSdkError"; + originalError?: unknown; + constructor(err?: unknown) { + if (err instanceof Error) { + this.originalError = err; + } else { + this.originalError = new Error(String(err)); + } } } -export class NoAccessibleDeviceError implements SdkError { - readonly _tag = "NoAccessibleDeviceError"; - originalError?: Error; - constructor(readonly err?: Error) { - this.originalError = err; +export class DeviceNotRecognizedError extends GeneralSdkError { + override readonly _tag = "DeviceNotRecognizedError"; + constructor(readonly err?: unknown) { + super(err); } } -export class OpeningConnectionError implements SdkError { - readonly _tag = "ConnectionOpeningError"; - originalError?: Error; - constructor(readonly err?: Error) { - this.originalError = err; +export class NoAccessibleDeviceError extends GeneralSdkError { + override readonly _tag = "NoAccessibleDeviceError"; + constructor(readonly err?: unknown) { + super(err); } } -export class UnknownDeviceError implements SdkError { - readonly _tag = "UnknownDeviceError"; - originalError?: Error; - constructor(readonly err?: Error) { - this.originalError = err; +export class OpeningConnectionError extends GeneralSdkError { + override readonly _tag = "ConnectionOpeningError"; + constructor(readonly err?: unknown) { + super(err); } } -export class UsbHidTransportNotSupportedError implements SdkError { - readonly _tag = "UsbHidTransportNotSupportedError"; - originalError?: Error; - constructor(readonly err?: Error) { - this.originalError = err; +export class UnknownDeviceError extends GeneralSdkError { + override readonly _tag = "UnknownDeviceError"; + constructor(readonly err?: unknown) { + super(err); } } -export class SendApduConcurrencyError implements SdkError { - readonly _tag = "SendApduConcurrencyError"; - originalError?: Error; - constructor(readonly err?: Error) { - this.originalError = err; +export class UsbHidTransportNotSupportedError extends GeneralSdkError { + override readonly _tag = "UsbHidTransportNotSupportedError"; + constructor(readonly err?: unknown) { + super(err); } } -export class DisconnectError implements SdkError { - readonly _tag = "DisconnectError"; - originalError?: Error; +export class SendApduConcurrencyError extends GeneralSdkError { + override readonly _tag = "SendApduConcurrencyError"; + constructor(readonly err?: unknown) { + super(err); + } +} - constructor(readonly err?: Error) { - this.originalError = err; +export class DisconnectError extends GeneralSdkError { + override readonly _tag = "DisconnectError"; + constructor(readonly err?: unknown) { + super(err); } } diff --git a/packages/core/src/internal/usb/model/HIDDevice.stub.ts b/packages/core/src/internal/usb/model/HIDDevice.stub.ts index 25a686b0f..47dd1b141 100644 --- a/packages/core/src/internal/usb/model/HIDDevice.stub.ts +++ b/packages/core/src/internal/usb/model/HIDDevice.stub.ts @@ -1,4 +1,4 @@ -const oninputreport = jest.fn(); +const oninputreport = jest.fn().mockResolvedValue(void 0); export const hidDeviceStubBuilder = ( props: Partial = {}, ): HIDDevice => ({ @@ -10,7 +10,7 @@ export const hidDeviceStubBuilder = ( open: jest.fn(), oninputreport, close: jest.fn(), - sendReport: jest.fn(async () => oninputreport()), + sendReport: jest.fn().mockImplementation(() => oninputreport()), sendFeatureReport: jest.fn(), forget: jest.fn(), receiveFeatureReport: jest.fn(), diff --git a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts index 62eb03f77..23d11aec5 100644 --- a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts +++ b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts @@ -38,7 +38,7 @@ describe("UsbHidDeviceConnection", () => { expect(cDevice).toStrictEqual(device); }); - it("should send APDU through hid report", async () => { + it("should send APDU through hid report", () => { // given const connection = new UsbHidDeviceConnection( { device, apduSender, apduReceiver }, @@ -50,7 +50,7 @@ describe("UsbHidDeviceConnection", () => { expect(device.sendReport).toHaveBeenCalled(); }); - it("should receive APDU through hid report", async () => { + it("should receive APDU through hid report", () => { // given device.sendReport = jest.fn(() => Promise.resolve( diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index 4bf91357b..15e57909c 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -244,7 +244,7 @@ describe("WebUsbHidTransport", () => { const connect = await transport.connect(connectParams); expect(connect).toStrictEqual( - Left(new UnknownDeviceError(new Error("Unknown device fake"))), + Left(new UnknownDeviceError("Unknown device fake")), ); }); @@ -254,7 +254,7 @@ describe("WebUsbHidTransport", () => { const connect = await transport.connect(device); expect(connect).toStrictEqual( - Left(new UnknownDeviceError(new Error("Unknown device fake"))), + Left(new UnknownDeviceError("Unknown device fake")), ); }); @@ -376,11 +376,7 @@ describe("WebUsbHidTransport", () => { }); expect(disconnect).toStrictEqual( - Left( - new UnknownDeviceError( - new Error(`Unknown device ${connectedDevice.id}`), - ), - ), + Left(new UnknownDeviceError(`Unknown device ${connectedDevice.id}`)), ); }); diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts index 3304e0da5..df63f7bcd 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.ts @@ -74,9 +74,7 @@ export class WebUsbHidTransport implements UsbHidTransport { return Right(navigator.hid); } - return Left( - new UsbHidTransportNotSupportedError(new Error("WebHID not supported")), - ); + return Left(new UsbHidTransportNotSupportedError("WebHID not supported")); } isSupported() { @@ -111,7 +109,7 @@ export class WebUsbHidTransport implements UsbHidTransport { filters: [{ vendorId: LEDGER_VENDOR_ID }], }); } catch (error) { - const deviceError = new NoAccessibleDeviceError(error as Error); + const deviceError = new NoAccessibleDeviceError(error); this._logger.error(`promptDeviceAccess: error requesting device`, { data: { error }, }); @@ -126,7 +124,7 @@ export class WebUsbHidTransport implements UsbHidTransport { // Granted access to 0 device (by clicking on cancel for ex) results in an error if (hidDevices.length === 0) { this._logger.warn("No device was selected"); - throw new NoAccessibleDeviceError(new Error("No selected device")); + throw new NoAccessibleDeviceError("No selected device"); } const discoveredHidDevices: HIDDevice[] = []; @@ -217,9 +215,7 @@ export class WebUsbHidTransport implements UsbHidTransport { `Device not recognized: 0x${usbProductId.toString(16)}`, ); throw new DeviceNotRecognizedError( - new Error( - `Device not recognized: 0x${usbProductId.toString(16)}`, - ), + `Device not recognized: 0x${usbProductId.toString(16)}`, ); } }); @@ -282,9 +278,7 @@ export class WebUsbHidTransport implements UsbHidTransport { if (!internalDevice) { this._logger.error(`Unknown device ${deviceId}`); - return Left( - new UnknownDeviceError(new Error(`Unknown device ${deviceId}`)), - ); + return Left(new UnknownDeviceError(`Unknown device ${deviceId}`)); } try { @@ -293,7 +287,7 @@ export class WebUsbHidTransport implements UsbHidTransport { if (error instanceof DOMException && error.name === "InvalidStateError") { this._logger.debug(`Device ${deviceId} is already opened`); } else { - const connectionError = new OpeningConnectionError(error as Error); + const connectionError = new OpeningConnectionError(error); this._logger.debug(`Error while opening device: ${deviceId}`, { data: { error }, }); @@ -341,9 +335,7 @@ export class WebUsbHidTransport implements UsbHidTransport { if (!internalDevice) { this._logger.error(`Unknown device ${params.connectedDevice.id}`); return Left( - new UnknownDeviceError( - new Error(`Unknown device ${params.connectedDevice.id}`), - ), + new UnknownDeviceError(`Unknown device ${params.connectedDevice.id}`), ); } @@ -352,13 +344,30 @@ export class WebUsbHidTransport implements UsbHidTransport { this._internalDevicesById.delete(internalDevice.id); return Right(void 0); } catch (error) { - return Left(new DisconnectError(error as Error)); + return Left(new DisconnectError(error)); } } private handleDeviceDisconnectionEvent = (event: Event) => { + if ( + !( + "device" in event && + typeof event.device === "object" && + event.device !== null && + "productId" in event.device && + typeof event.device.productId === "number" + ) + ) { + this._logger.error("Invalid event", { data: { event } }); + return; + } + this._logger.info("handleDeviceDisconnectionEvent", { data: { event } }); - const hidDevice = (event as HIDConnectionEvent).device; + + const hidDevice = event.device; + // This is temporary, it should be correctly inferred after updating TypeScript + const productId = event.device.productId; + const maybeInternalDevice = Maybe.fromFalsy( Array.from(this._internalDevicesById.values()).find( (iDevice) => iDevice.hidDevice.productId === hidDevice.productId, @@ -376,15 +385,11 @@ export class WebUsbHidTransport implements UsbHidTransport { } }); const maybeDisconnectHandler = Maybe.fromNullable( - this._internalDisconnectionHandlersByHidId.get( - hidDevice.productId.toString(), - ), + this._internalDisconnectionHandlersByHidId.get(productId.toString()), ); maybeDisconnectHandler.map((handler) => { handler(); - this._internalDisconnectionHandlersByHidId.delete( - hidDevice.productId.toString(), - ); + this._internalDisconnectionHandlersByHidId.delete(productId.toString()); }); }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 275383a2b..cd3df739b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 6.2.11 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.12.7) + version: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) prettier: specifier: ^3.2.5 version: 3.2.5 @@ -46,7 +46,7 @@ importers: version: 5.0.5 ts-jest: specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.24.4)(jest@29.7.0)(typescript@5.4.4) + version: 29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4) tsc-alias: specifier: ^1.8.8 version: 1.8.8 @@ -67,13 +67,13 @@ importers: version: link:../../packages/core '@ledgerhq/react-ui': specifier: ^0.14.16 - version: 0.14.16(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11) + version: 0.14.16(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)) '@sentry/nextjs': specifier: ^7.109.0 - version: 7.109.0(next@14.1.4)(react@18.2.0) + version: 7.109.0(next@14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) next: specifier: 14.1.4 - version: 14.1.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0) + version: 14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: specifier: ^18 version: 18.2.0 @@ -82,7 +82,7 @@ importers: version: 18.2.0(react@18.2.0) styled-components: specifier: ^5.3.11 - version: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + version: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -113,19 +113,22 @@ importers: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.6.0 - version: 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4) + version: 7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4) '@typescript-eslint/parser': specifier: ^7.6.0 version: 7.6.0(eslint@9.0.0)(typescript@5.4.4) '@vercel/style-guide': specifier: ^6.0.0 - version: 6.0.0(eslint@9.0.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4) + version: 6.0.0(@next/eslint-plugin-next@14.1.4)(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(prettier@3.2.5)(typescript@5.4.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@9.0.0) eslint-config-turbo: specifier: ^1.13.2 version: 1.13.2(eslint@9.0.0) + eslint-plugin-no-type-assertion: + specifier: ^1.3.0 + version: 1.3.0(eslint@9.0.0) eslint-plugin-simple-import-sort: specifier: ^12.0.0 version: 12.0.0(eslint@9.0.0) @@ -2375,6 +2378,12 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-no-type-assertion@1.3.0: + resolution: {integrity: sha512-04wuuIP5ptNzp969tTt0gf/Jsw4G0T5md2/nbgv3dRL/HySSNU7H4vIKNjkuno9T+6h2daj1T9Aki6bDgmXDEw==} + engines: {node: '>=12.0.0', yarn: ^1.13.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + eslint-plugin-playwright@1.5.4: resolution: {integrity: sha512-J38Wy3Vc2f9y73J+KRmgXgbYI8TZ3zbz6qBbTj3PhpFndUS572jZ7kqQ3rJ9si5BaMHT7lmZzraO+3UjwIDV4Q==} engines: {node: '>=16.6.0'} @@ -5546,9 +5555,10 @@ snapshots: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.2.75 hoist-non-react-statics: 3.3.2 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.75 '@emotion/serialize@1.1.3': dependencies: @@ -5633,7 +5643,7 @@ snapshots: '@floating-ui/core': 1.5.3 '@floating-ui/utils': 0.2.1 - '@floating-ui/react-dom@0.4.3(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0)': + '@floating-ui/react-dom@0.4.3(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/dom': 0.1.10 react: 18.2.0 @@ -5715,7 +5725,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -5729,7 +5739,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.12.7) + jest-config: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -5890,28 +5900,29 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@ledgerhq/crypto-icons-ui@1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5)': + '@ledgerhq/crypto-icons-ui@1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(styled-system@5.1.5)': dependencies: - '@types/react': 18.2.75 react: 18.2.0 - styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 + optionalDependencies: + '@types/react': 18.2.75 - '@ledgerhq/icons-ui@0.6.3(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5)': + '@ledgerhq/icons-ui@0.6.3(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(styled-system@5.1.5)': dependencies: - '@types/react': 18.2.75 react: 18.2.0 - styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 + optionalDependencies: + '@types/react': 18.2.75 - '@ledgerhq/react-ui@0.14.16(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.11)': + '@ledgerhq/react-ui@0.14.16(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))': dependencies: - '@floating-ui/react-dom': 0.4.3(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0) - '@ledgerhq/crypto-icons-ui': 1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) - '@ledgerhq/icons-ui': 0.6.3(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11)(styled-system@5.1.5) + '@floating-ui/react-dom': 0.4.3(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@ledgerhq/crypto-icons-ui': 1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(styled-system@5.1.5) + '@ledgerhq/icons-ui': 0.6.3(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(styled-system@5.1.5) '@ledgerhq/ui-shared': 0.2.1 - '@tippyjs/react': 4.2.6(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.75 + '@tippyjs/react': 4.2.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) chart.js: 3.9.1 chartjs-adapter-moment: 1.0.1(chart.js@3.9.1)(moment@2.30.1) color: 4.2.3 @@ -5921,12 +5932,14 @@ snapshots: react-chartjs-2: 3.3.0(chart.js@3.9.1)(react@18.2.0) react-dom: 18.2.0(react@18.2.0) react-is: 17.0.2 - react-select: 5.8.0(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0) - react-spring: 8.0.27(react-dom@18.2.0)(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) - react-window: 1.8.10(react-dom@18.2.0)(react@18.2.0) - styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + react-select: 5.8.0(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-spring: 8.0.27(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-window: 1.8.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) styled-system: 5.1.5 + optionalDependencies: + '@types/react': 18.2.75 '@ledgerhq/ui-shared@0.2.1': {} @@ -6112,6 +6125,7 @@ snapshots: glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.27.0 + optionalDependencies: rollup: 2.78.0 '@rollup/pluginutils@5.1.0(rollup@2.78.0)': @@ -6119,6 +6133,7 @@ snapshots: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 + optionalDependencies: rollup: 2.78.0 '@rushstack/eslint-patch@1.10.1': {} @@ -6188,7 +6203,7 @@ snapshots: '@sentry/types': 6.19.7 tslib: 1.14.1 - '@sentry/nextjs@7.109.0(next@14.1.4)(react@18.2.0)': + '@sentry/nextjs@7.109.0(next@14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0)': dependencies: '@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0) '@sentry/core': 7.109.0 @@ -6200,7 +6215,7 @@ snapshots: '@sentry/vercel-edge': 7.109.0 '@sentry/webpack-plugin': 1.21.0 chalk: 3.0.0 - next: 14.1.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 resolve: 1.22.8 rollup: 2.78.0 @@ -6337,7 +6352,7 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tippyjs/react@4.2.6(react-dom@18.2.0)(react@18.2.0)': + '@tippyjs/react@4.2.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -6490,7 +6505,7 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4)': + '@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) @@ -6505,6 +6520,7 @@ snapshots: natural-compare: 1.4.0 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.4) + optionalDependencies: typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6517,6 +6533,7 @@ snapshots: '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@5.5.0) eslint: 9.0.0 + optionalDependencies: typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6529,6 +6546,7 @@ snapshots: '@typescript-eslint/visitor-keys': 7.6.0 debug: 4.3.4(supports-color@5.5.0) eslint: 9.0.0 + optionalDependencies: typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6560,6 +6578,7 @@ snapshots: debug: 4.3.4(supports-color@5.5.0) eslint: 9.0.0 ts-api-utils: 1.3.0(typescript@5.4.4) + optionalDependencies: typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6581,6 +6600,7 @@ snapshots: is-glob: 4.0.3 semver: 7.6.0 tsutils: 3.21.0(typescript@5.4.4) + optionalDependencies: typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6595,6 +6615,7 @@ snapshots: minimatch: 9.0.3 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.4) + optionalDependencies: typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6609,6 +6630,7 @@ snapshots: minimatch: 9.0.3 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.4) + optionalDependencies: typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6623,6 +6645,7 @@ snapshots: minimatch: 9.0.4 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.4) + optionalDependencies: typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6692,30 +6715,32 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vercel/style-guide@6.0.0(eslint@9.0.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.4)': + '@vercel/style-guide@6.0.0(@next/eslint-plugin-next@14.1.4)(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(prettier@3.2.5)(typescript@5.4.4)': dependencies: '@babel/core': 7.24.4 '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@9.0.0) '@rushstack/eslint-patch': 1.10.1 - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4) + '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4) '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) - eslint: 9.0.0 eslint-config-prettier: 9.1.0(eslint@9.0.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0) eslint-plugin-eslint-comments: 3.2.0(eslint@9.0.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(jest@29.7.0)(typescript@5.4.4) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4) eslint-plugin-jsx-a11y: 6.8.0(eslint@9.0.0) - eslint-plugin-playwright: 1.5.4(eslint-plugin-jest@27.9.0)(eslint@9.0.0) + eslint-plugin-playwright: 1.5.4(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4))(eslint@9.0.0) eslint-plugin-react: 7.34.1(eslint@9.0.0) eslint-plugin-react-hooks: 4.6.0(eslint@9.0.0) eslint-plugin-testing-library: 6.2.0(eslint@9.0.0)(typescript@5.4.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 51.0.1(eslint@9.0.0) - eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(typescript@5.4.4) - prettier: 3.2.5 + eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4) prettier-plugin-packagejson: 2.4.14(prettier@3.2.5) + optionalDependencies: + '@next/eslint-plugin-next': 14.1.4 + eslint: 9.0.0 + prettier: 3.2.5 typescript: 5.4.4 transitivePeerDependencies: - eslint-import-resolver-node @@ -6751,7 +6776,7 @@ snapshots: - supports-color ajv-formats@2.1.1(ajv@8.12.0): - dependencies: + optionalDependencies: ajv: 8.12.0 ajv@6.12.6: @@ -6974,14 +6999,14 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.8 - babel-plugin-styled-components@2.1.4(@babel/core@7.24.4)(styled-components@5.3.11): + babel-plugin-styled-components@2.1.4(@babel/core@7.24.4)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)): dependencies: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.15 '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.4) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) transitivePeerDependencies: - '@babel/core' @@ -7354,13 +7379,13 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - create-jest@29.7.0(@types/node@20.12.7): + create-jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.12.7) + jest-config: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -7495,6 +7520,7 @@ snapshots: debug@4.3.4(supports-color@5.5.0): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 5.5.0 decamelize-keys@1.1.1: @@ -7510,7 +7536,9 @@ snapshots: dependencies: mimic-response: 3.1.0 - dedent@1.5.1: {} + dedent@1.5.1(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 deep-extend@0.6.0: {} @@ -7768,11 +7796,12 @@ snapshots: '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) eslint: 9.0.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@9.0.0) eslint-plugin-react: 7.34.1(eslint@9.0.0) eslint-plugin-react-hooks: 4.6.0(eslint@9.0.0) + optionalDependencies: typescript: 5.4.4 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -7787,9 +7816,9 @@ snapshots: eslint: 9.0.0 eslint-plugin-turbo: 1.13.2(eslint@9.0.0) - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)): dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) eslint-import-resolver-node@0.3.9: dependencies: @@ -7799,13 +7828,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0): dependencies: debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.16.0 eslint: 9.0.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -7816,13 +7845,13 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0): dependencies: debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.16.0 eslint: 9.0.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -7833,23 +7862,25 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0): dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) eslint: 9.0.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0): dependencies: - '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) eslint: 9.0.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0) transitivePeerDependencies: - supports-color @@ -7859,9 +7890,8 @@ snapshots: eslint: 9.0.0 ignore: 5.3.0 - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -7870,7 +7900,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.0.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -7880,14 +7910,15 @@ snapshots: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): dependencies: - '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -7896,7 +7927,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.0.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -7906,17 +7937,20 @@ snapshots: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(jest@29.7.0)(typescript@5.4.4): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4): dependencies: - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4) '@typescript-eslint/utils': 5.62.0(eslint@9.0.0)(typescript@5.4.4) eslint: 9.0.0 - jest: 29.7.0(@types/node@20.12.7) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4) + jest: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) transitivePeerDependencies: - supports-color - typescript @@ -7941,11 +7975,16 @@ snapshots: object.entries: 1.1.8 object.fromentries: 2.0.8 - eslint-plugin-playwright@1.5.4(eslint-plugin-jest@27.9.0)(eslint@9.0.0): + eslint-plugin-no-type-assertion@1.3.0(eslint@9.0.0): + dependencies: + eslint: 9.0.0 + + eslint-plugin-playwright@1.5.4(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4))(eslint@9.0.0): dependencies: eslint: 9.0.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(jest@29.7.0)(typescript@5.4.4) globals: 13.24.0 + optionalDependencies: + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4) eslint-plugin-react-hooks@4.6.0(eslint@9.0.0): dependencies: @@ -8017,11 +8056,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.6.0)(eslint@9.0.0)(typescript@5.4.4): + eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4): dependencies: - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.4.4) '@typescript-eslint/utils': 7.5.0(eslint@9.0.0)(typescript@5.4.4) eslint: 9.0.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4) transitivePeerDependencies: - supports-color - typescript @@ -8980,7 +9020,7 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 - jest-circus@29.7.0: + jest-circus@29.7.0(babel-plugin-macros@3.1.0): dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -8989,7 +9029,7 @@ snapshots: '@types/node': 20.12.7 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.1 + dedent: 1.5.1(babel-plugin-macros@3.1.0) is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -9006,16 +9046,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.12.7): + jest-cli@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)): dependencies: - '@jest/core': 29.7.0 + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.12.7) + create-jest: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.12.7) + jest-config: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -9025,19 +9065,18 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.12.7): + jest-config@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)): dependencies: '@babel/core': 7.24.4 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.7 babel-jest: 29.7.0(@babel/core@7.24.4) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 @@ -9050,6 +9089,9 @@ snapshots: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.12.7 + ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.4) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -9131,7 +9173,7 @@ snapshots: jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - dependencies: + optionalDependencies: jest-resolve: 29.7.0 jest-regex-util@29.6.3: {} @@ -9269,12 +9311,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.12.7): + jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)): dependencies: - '@jest/core': 29.7.0 + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.12.7) + jest-cli: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -9609,7 +9651,7 @@ snapshots: netmask@2.0.2: {} - next@14.1.4(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0): + next@14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@next/env': 14.1.4 '@swc/helpers': 0.5.2 @@ -9619,7 +9661,7 @@ snapshots: postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.24.4)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react@18.2.0) optionalDependencies: '@next/swc-darwin-arm64': 14.1.4 '@next/swc-darwin-x64': 14.1.4 @@ -9939,9 +9981,10 @@ snapshots: prettier-plugin-packagejson@2.4.14(prettier@3.2.5): dependencies: - prettier: 3.2.5 sort-package-json: 2.10.0 synckit: 0.9.0 + optionalDependencies: + prettier: 3.2.5 prettier@2.8.8: {} @@ -10050,7 +10093,7 @@ snapshots: react-is@18.2.0: {} - react-select@5.8.0(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0): + react-select@5.8.0(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.24.4 '@emotion/cache': 11.11.0 @@ -10061,19 +10104,19 @@ snapshots: prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.75)(react@18.2.0) transitivePeerDependencies: - '@types/react' - react-spring@8.0.27(react-dom@18.2.0)(react@18.2.0): + react-spring@8.0.27(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.24.4 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.24.4 dom-helpers: 5.2.1 @@ -10082,7 +10125,7 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-window@1.8.10(react-dom@18.2.0)(react@18.2.0): + react-window@1.8.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.24.4 memoize-one: 5.2.1 @@ -10538,14 +10581,14 @@ snapshots: stubborn-fs@1.2.5: {} - styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0): + styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0): dependencies: '@babel/helper-module-imports': 7.22.15 '@babel/traverse': 7.24.1(supports-color@5.5.0) '@emotion/is-prop-valid': 1.2.1 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.24.4)(styled-components@5.3.11) + babel-plugin-styled-components: 2.1.4(@babel/core@7.24.4)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 @@ -10556,11 +10599,13 @@ snapshots: transitivePeerDependencies: - '@babel/core' - styled-jsx@5.1.1(@babel/core@7.24.4)(react@18.2.0): + styled-jsx@5.1.1(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react@18.2.0): dependencies: - '@babel/core': 7.24.4 client-only: 0.0.1 react: 18.2.0 + optionalDependencies: + '@babel/core': 7.24.4 + babel-plugin-macros: 3.1.0 styled-system@5.1.5: dependencies: @@ -10656,12 +10701,11 @@ snapshots: dependencies: typescript: 5.4.4 - ts-jest@29.1.2(@babel/core@7.24.4)(jest@29.7.0)(typescript@5.4.4): + ts-jest@29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4): dependencies: - '@babel/core': 7.24.4 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.12.7) + jest: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -10669,6 +10713,10 @@ snapshots: semver: 7.6.0 typescript: 5.4.4 yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.24.4 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.24.4) ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4): dependencies: @@ -10866,8 +10914,9 @@ snapshots: use-isomorphic-layout-effect@1.1.2(@types/react@18.2.75)(react@18.2.0): dependencies: - '@types/react': 18.2.75 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.75 util-deprecate@1.0.2: {} From 4a208f1a92f5990adf9d62d6a523b0fda6443553 Mon Sep 17 00:00:00 2001 From: ofreyssinet-ledger Date: Wed, 12 Jun 2024 12:09:24 +0200 Subject: [PATCH 246/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Command?= =?UTF-8?q?=20signature:=20pass=20params=20to=20command=20constructor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/command/Command.ts | 5 +- .../src/api/command/os/CloseAppCommand.ts | 2 + .../os/GetAppAndVersionCommand.test.ts | 2 +- .../api/command/os/GetAppAndVersionCommand.ts | 2 + .../os/GetBatteryStatusCommand.test.ts | 77 +++++++++++-------- .../api/command/os/GetBatteryStatusCommand.ts | 27 +++---- .../src/api/command/os/GetOsVersionCommand.ts | 2 + .../src/api/command/os/OpenAppCommand.test.ts | 18 ++--- .../core/src/api/command/os/OpenAppCommand.ts | 16 +++- .../use-case/SendCommandUseCase.test.ts | 1 + .../command/use-case/SendCommandUseCase.ts | 4 +- .../device-session/model/DeviceSession.ts | 7 +- 12 files changed, 95 insertions(+), 68 deletions(-) diff --git a/packages/core/src/api/command/Command.ts b/packages/core/src/api/command/Command.ts index 84c281607..27403ad0a 100644 --- a/packages/core/src/api/command/Command.ts +++ b/packages/core/src/api/command/Command.ts @@ -9,13 +9,14 @@ import { ApduResponse } from "@api/device-session/ApduResponse"; * @template Args - The type of the arguments passed to the command (optional). */ export interface Command { + args: Args; + /** * Gets the APDU (Application Protocol Data Unit) for the command. * - * @param args - The arguments passed to the command (optional). * @returns The APDU for the command. */ - getApdu(args?: Args): Apdu; + getApdu(): Apdu; /** * Parses the response received from the device. diff --git a/packages/core/src/api/command/os/CloseAppCommand.ts b/packages/core/src/api/command/os/CloseAppCommand.ts index 89ca6573e..4869439cb 100644 --- a/packages/core/src/api/command/os/CloseAppCommand.ts +++ b/packages/core/src/api/command/os/CloseAppCommand.ts @@ -10,6 +10,8 @@ import { ApduResponse } from "@api/device-session/ApduResponse"; * The command to close a runnint application on the device. */ export class CloseAppCommand implements Command { + args = undefined; + getApdu(): Apdu { const closeAppApduArgs: ApduBuilderArgs = { cla: 0xb0, diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts index c6268c2b9..5bf8982fe 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.test.ts @@ -29,7 +29,7 @@ const FAILED_RESPONSE_HEX = Uint8Array.from([0x67, 0x00]); const ERROR_RESPONSE_HEX = Uint8Array.from([0x04, 0x90, 0x00]); describe("GetAppAndVersionCommand", () => { - let command: Command; + let command: Command; beforeEach(() => { command = new GetAppAndVersionCommand(); diff --git a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts index c1d55333d..1ceb80ab0 100644 --- a/packages/core/src/api/command/os/GetAppAndVersionCommand.ts +++ b/packages/core/src/api/command/os/GetAppAndVersionCommand.ts @@ -28,6 +28,8 @@ export type GetAppAndVersionResponse = { export class GetAppAndVersionCommand implements Command { + args = undefined; + getApdu(): Apdu { const getAppAndVersionApduArgs: ApduBuilderArgs = { cla: 0xb0, diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts index f29e7e288..ccd793910 100644 --- a/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.test.ts @@ -1,15 +1,10 @@ -import { Command } from "@api/command/Command"; -import { - InvalidBatteryStatusTypeError, - InvalidStatusWordError, -} from "@api/command/Errors"; +import { InvalidStatusWordError } from "@api/command/Errors"; import { ApduResponse } from "@api/device-session/ApduResponse"; import { BatteryStatusType, ChargingMode, GetBatteryStatusCommand, - GetBatteryStatusResponse, } from "./GetBatteryStatusCommand"; const GET_BATTERY_STATUS_APDU_PERCENTAGE = Uint8Array.from([ @@ -37,28 +32,42 @@ const FLAGS_RESPONSE_HEX = Uint8Array.from([ const FAILED_RESPONSE_HEX = Uint8Array.from([0x67, 0x00]); describe("GetBatteryStatus", () => { - let command: Command; - - beforeEach(() => { - command = new GetBatteryStatusCommand(); - }); - describe("getApdu", () => { it("should return the GetBatteryStatus APDU", () => { expect( - command.getApdu(BatteryStatusType.BATTERY_PERCENTAGE).getRawApdu(), + new GetBatteryStatusCommand({ + statusType: BatteryStatusType.BATTERY_PERCENTAGE, + }) + .getApdu() + .getRawApdu(), ).toStrictEqual(GET_BATTERY_STATUS_APDU_PERCENTAGE); expect( - command.getApdu(BatteryStatusType.BATTERY_VOLTAGE).getRawApdu(), + new GetBatteryStatusCommand({ + statusType: BatteryStatusType.BATTERY_VOLTAGE, + }) + .getApdu() + .getRawApdu(), ).toStrictEqual(GET_BATTERY_STATUS_APDU_VOLTAGE); expect( - command.getApdu(BatteryStatusType.BATTERY_TEMPERATURE).getRawApdu(), + new GetBatteryStatusCommand({ + statusType: BatteryStatusType.BATTERY_TEMPERATURE, + }) + .getApdu() + .getRawApdu(), ).toStrictEqual(GET_BATTERY_STATUS_APDU_TEMPERATURE); expect( - command.getApdu(BatteryStatusType.BATTERY_CURRENT).getRawApdu(), + new GetBatteryStatusCommand({ + statusType: BatteryStatusType.BATTERY_CURRENT, + }) + .getApdu() + .getRawApdu(), ).toStrictEqual(GET_BATTERY_STATUS_APDU_CURRENT); expect( - command.getApdu(BatteryStatusType.BATTERY_FLAGS).getRawApdu(), + new GetBatteryStatusCommand({ + statusType: BatteryStatusType.BATTERY_FLAGS, + }) + .getApdu() + .getRawApdu(), ).toStrictEqual(GET_BATTERY_STATUS_APDU_FLAGS); }); }); @@ -68,7 +77,10 @@ describe("GetBatteryStatus", () => { statusCode: PERCENTAGE_RESPONSE_HEX.slice(-2), data: PERCENTAGE_RESPONSE_HEX.slice(0, -2), }); - command.getApdu(BatteryStatusType.BATTERY_PERCENTAGE); + const command = new GetBatteryStatusCommand({ + statusType: BatteryStatusType.BATTERY_PERCENTAGE, + }); + command.getApdu(); const parsed = command.parseResponse(PERCENTAGE_RESPONSE); expect(parsed).toStrictEqual(55); }); @@ -77,7 +89,10 @@ describe("GetBatteryStatus", () => { statusCode: VOLTAGE_RESPONSE_HEX.slice(-2), data: VOLTAGE_RESPONSE_HEX.slice(0, -2), }); - command.getApdu(BatteryStatusType.BATTERY_VOLTAGE); + const command = new GetBatteryStatusCommand({ + statusType: BatteryStatusType.BATTERY_VOLTAGE, + }); + command.getApdu(); const parsed = command.parseResponse(VOLTAGE_RESPONSE); expect(parsed).toStrictEqual(4095); }); @@ -86,7 +101,10 @@ describe("GetBatteryStatus", () => { statusCode: TEMPERATURE_RESPONSE_HEX.slice(-2), data: TEMPERATURE_RESPONSE_HEX.slice(0, -2), }); - command.getApdu(BatteryStatusType.BATTERY_TEMPERATURE); + const command = new GetBatteryStatusCommand({ + statusType: BatteryStatusType.BATTERY_TEMPERATURE, + }); + command.getApdu(); const parsed = command.parseResponse(TEMPERATURE_RESPONSE); expect(parsed).toStrictEqual(16); }); @@ -95,7 +113,10 @@ describe("GetBatteryStatus", () => { statusCode: FLAGS_RESPONSE_HEX.slice(-2), data: FLAGS_RESPONSE_HEX.slice(0, -2), }); - command.getApdu(BatteryStatusType.BATTERY_FLAGS); + const command = new GetBatteryStatusCommand({ + statusType: BatteryStatusType.BATTERY_FLAGS, + }); + command.getApdu(); const parsed = command.parseResponse(FLAGS_RESPONSE); expect(parsed).toStrictEqual({ charging: ChargingMode.USB, @@ -104,21 +125,15 @@ describe("GetBatteryStatus", () => { issueBattery: false, }); }); - it("should not parse the response when getApdu not called", () => { - const PERCENTAGE_RESPONSE = new ApduResponse({ - statusCode: PERCENTAGE_RESPONSE_HEX.slice(-2), - data: PERCENTAGE_RESPONSE_HEX.slice(0, -2), - }); - expect(() => command.parseResponse(PERCENTAGE_RESPONSE)).toThrow( - InvalidBatteryStatusTypeError, - ); - }); it("should throw an error if the response returned unsupported format", () => { const FAILED_RESPONSE = new ApduResponse({ statusCode: FAILED_RESPONSE_HEX.slice(-2), data: FAILED_RESPONSE_HEX.slice(0, -2), }); - command.getApdu(BatteryStatusType.BATTERY_PERCENTAGE); + const command = new GetBatteryStatusCommand({ + statusType: BatteryStatusType.BATTERY_PERCENTAGE, + }); + command.getApdu(); expect(() => command.parseResponse(FAILED_RESPONSE)).toThrow( InvalidStatusWordError, ); diff --git a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts index c9f0462e3..74ae25cd9 100644 --- a/packages/core/src/api/command/os/GetBatteryStatusCommand.ts +++ b/packages/core/src/api/command/os/GetBatteryStatusCommand.ts @@ -66,6 +66,10 @@ export type BatteryStatusFlags = { */ export type GetBatteryStatusResponse = number | BatteryStatusFlags; +type Arguments = { + statusType: BatteryStatusType; +}; + /** * Command to get the battery status of the device. * The parameter statusType defines the type of information to retrieve, cf. @@ -75,28 +79,25 @@ export type GetBatteryStatusResponse = number | BatteryStatusFlags; * going to decrease the overall performance of the communication with the device. */ export class GetBatteryStatusCommand - implements Command + implements Command { - private _statusType: BatteryStatusType | undefined = undefined; + args: Arguments; + + constructor(args: Arguments) { + this.args = args; + } - getApdu(statusType: BatteryStatusType): Apdu { - this._statusType = statusType; + getApdu(): Apdu { const getBatteryStatusArgs: ApduBuilderArgs = { cla: 0xe0, ins: 0x10, p1: 0x00, - p2: statusType, + p2: this.args.statusType, } as const; return new ApduBuilder(getBatteryStatusArgs).build(); } parseResponse(apduResponse: ApduResponse): GetBatteryStatusResponse { - if (this._statusType === undefined) { - throw new InvalidBatteryStatusTypeError( - "Call getApdu to initialise battery status type.", - ); - } - const parser = new ApduParser(apduResponse); if (!CommandUtils.isSuccessResponse(apduResponse)) { throw new InvalidStatusWordError( @@ -106,7 +107,7 @@ export class GetBatteryStatusCommand ); } - switch (this._statusType) { + switch (this.args.statusType) { case BatteryStatusType.BATTERY_PERCENTAGE: { const percentage = parser.extract8BitUint(); if (!percentage) { @@ -148,7 +149,7 @@ export class GetBatteryStatusCommand }; } default: - this._exhaustiveMatchingGuard(this._statusType); + this._exhaustiveMatchingGuard(this.args.statusType); } } diff --git a/packages/core/src/api/command/os/GetOsVersionCommand.ts b/packages/core/src/api/command/os/GetOsVersionCommand.ts index 0566e2761..c393ff80a 100644 --- a/packages/core/src/api/command/os/GetOsVersionCommand.ts +++ b/packages/core/src/api/command/os/GetOsVersionCommand.ts @@ -64,6 +64,8 @@ export type GetOsVersionResponse = { * Command to get information about the device firmware. */ export class GetOsVersionCommand implements Command { + args = undefined; + getApdu(): Apdu { const getOsVersionApduArgs: ApduBuilderArgs = { cla: 0xe0, diff --git a/packages/core/src/api/command/os/OpenAppCommand.test.ts b/packages/core/src/api/command/os/OpenAppCommand.test.ts index bbf8b718f..c88ecd933 100644 --- a/packages/core/src/api/command/os/OpenAppCommand.test.ts +++ b/packages/core/src/api/command/os/OpenAppCommand.test.ts @@ -3,18 +3,12 @@ import { ApduResponse } from "@api/device-session/ApduResponse"; import { OpenAppCommand } from "./OpenAppCommand"; describe("OpenAppCommand", () => { - let openAppCommand: OpenAppCommand; - - beforeEach(() => { - openAppCommand = new OpenAppCommand(); - }); - + const appName = "MyApp"; it("should return the correct APDU for opening an application", () => { - const appName = "MyApp"; const expectedApdu = Uint8Array.from([ 0xe0, 0xd8, 0x00, 0x00, 0x05, 0x4d, 0x79, 0x41, 0x70, 0x70, ]); - const apdu = openAppCommand.getApdu(appName); + const apdu = new OpenAppCommand({ appName }).getApdu(); expect(apdu.getRawApdu()).toStrictEqual(expectedApdu); }); @@ -23,7 +17,9 @@ describe("OpenAppCommand", () => { statusCode: new Uint8Array([0x90, 0x00]), data: new Uint8Array([]), }); - expect(() => openAppCommand.parseResponse(apduResponse)).not.toThrow(); + expect(() => + new OpenAppCommand({ appName }).parseResponse(apduResponse), + ).not.toThrow(); }); it("should throw error when command is unsuccessful", () => { @@ -31,6 +27,8 @@ describe("OpenAppCommand", () => { statusCode: new Uint8Array([0x6a, 0x81]), data: new Uint8Array([]), }); - expect(() => openAppCommand.parseResponse(apduResponse)).toThrow(); + expect(() => + new OpenAppCommand({ appName }).parseResponse(apduResponse), + ).toThrow(); }); }); diff --git a/packages/core/src/api/command/os/OpenAppCommand.ts b/packages/core/src/api/command/os/OpenAppCommand.ts index 47104caf0..4188c4c46 100644 --- a/packages/core/src/api/command/os/OpenAppCommand.ts +++ b/packages/core/src/api/command/os/OpenAppCommand.ts @@ -6,11 +6,21 @@ import { InvalidStatusWordError } from "@api/command/Errors"; import { CommandUtils } from "@api/command/utils/CommandUtils"; import { ApduResponse } from "@api/device-session/ApduResponse"; +type Arguments = { + appName: string; +}; + /** * The command to open an application on the device. */ -export class OpenAppCommand implements Command { - getApdu(appName: string): Apdu { +export class OpenAppCommand implements Command { + args: Arguments; + + constructor(args: Arguments) { + this.args = args; + } + + getApdu(): Apdu { const openAppApduArgs: ApduBuilderArgs = { cla: 0xe0, ins: 0xd8, @@ -18,7 +28,7 @@ export class OpenAppCommand implements Command { p2: 0x00, } as const; return new ApduBuilder(openAppApduArgs) - .addAsciiStringToData(appName) + .addAsciiStringToData(this.args.appName) .build(); } diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts index 9c0b04f60..64b58466d 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts @@ -19,6 +19,7 @@ describe("SendCommandUseCase", () => { logger = new DefaultLoggerPublisherService([], "send-command-use-case"); sessionService = new DefaultDeviceSessionService(() => logger); command = { + args: undefined, getApdu: jest.fn(), parseResponse: jest.fn(), }; diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.ts index 7a16f32e6..7b64b80af 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.ts @@ -43,13 +43,11 @@ export class SendCommandUseCase { * * @param sessionId - The device session id. * @param command - The command to send. - * @param params - The parameters of the command. * @returns The response from the command. */ async execute({ sessionId, command, - params, }: SendCommandUseCaseArgs): Promise { const deviceSessionOrError = this._sessionService.getDeviceSessionById(sessionId); @@ -59,7 +57,7 @@ export class SendCommandUseCase { Right: async (deviceSession) => { const deviceModelId = deviceSession.connectedDevice.deviceModel.id; const action = deviceSession.sendCommand(command); - return await action(deviceModelId, params); + return await action(deviceModelId); }, // Case device session not found Left: (error) => { diff --git a/packages/core/src/internal/device-session/model/DeviceSession.ts b/packages/core/src/internal/device-session/model/DeviceSession.ts index 1806e8d10..b22000bd6 100644 --- a/packages/core/src/internal/device-session/model/DeviceSession.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.ts @@ -98,11 +98,8 @@ export class DeviceSession { } sendCommand(command: Command) { - return async ( - deviceModelId: DeviceModelId, - getApduArgs: Args, - ): Promise => { - const apdu = command.getApdu(getApduArgs); + return async (deviceModelId: DeviceModelId): Promise => { + const apdu = command.getApdu(); const response = await this.sendApdu(apdu.getRawApdu()); return response.caseOf({ From e3e90655108331bccf5cd228551eb7d81f5d81a1 Mon Sep 17 00:00:00 2001 From: Olivier Freyssinet Date: Wed, 12 Jun 2024 13:53:46 +0200 Subject: [PATCH 247/253] =?UTF-8?q?=F0=9F=94=96=20(core):=20Changeset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/tall-onions-learn.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tall-onions-learn.md diff --git a/.changeset/tall-onions-learn.md b/.changeset/tall-onions-learn.md new file mode 100644 index 000000000..32e0845a1 --- /dev/null +++ b/.changeset/tall-onions-learn.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": patch +--- + +Command signature: pass parameters to command constructor From 0caeb92cd2d079aaa3382071331ccb2b52bdc2ae Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Tue, 11 Jun 2024 16:09:16 +0200 Subject: [PATCH 248/253] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20(repo):=20Bump=20e?= =?UTF-8?q?slint=20to=20v9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sample/.eslintrc.js | 22 - apps/sample/eslint.config.mjs | 38 + apps/sample/package.json | 14 +- apps/sample/src/app/client-layout.tsx | 1 - apps/sample/src/app/layout.tsx | 1 - apps/sample/src/components/ApduView/index.tsx | 1 - .../sample/src/hooks/useDeviceSessionState.ts | 1 - apps/sample/tsconfig.eslint.json | 11 + package.json | 16 +- packages/config/eslint/index.js | 202 +- packages/config/eslint/package.json | 15 +- packages/config/prettier/package.json | 2 +- packages/config/typescript/package.json | 5 +- packages/core/.eslintrc.js | 53 - packages/core/eslint.config.mjs | 12 + packages/core/package.json | 4 +- .../data/StaticDeviceModelDataSource.ts | 1 - .../src/internal/usb/model/HIDDevice.stub.ts | 2 +- .../transport/UsbHidDeviceConnection.test.ts | 4 +- .../usb/transport/WebUsbHidTransport.test.ts | 2 +- packages/core/tests/.gitkeep | 0 packages/core/tsconfig.eslint.json | 4 + packages/signer/.eslintrc.js | 47 - packages/signer/eslint.config.mjs | 12 + packages/signer/jest.config.ts | 1 + packages/signer/package.json | 2 +- packages/signer/tests/.gitkeep | 0 packages/signer/tests/index.spec.ts | 7 - packages/signer/tsconfig.eslint.json | 4 + packages/signer/tsconfig.json | 2 +- packages/trusted-apps/.eslintrc.js | 47 - packages/trusted-apps/eslint.config.mjs | 12 + packages/trusted-apps/jest.config.ts | 1 + packages/trusted-apps/package.json | 2 +- packages/trusted-apps/tsconfig.eslint.json | 4 + packages/ui/eslint.config.mjs | 12 + packages/ui/jest.config.ts | 1 + packages/ui/package.json | 2 +- packages/ui/tsconfig.eslint.json | 4 + pnpm-lock.yaml | 2937 +++++------------ 40 files changed, 1163 insertions(+), 2345 deletions(-) delete mode 100644 apps/sample/.eslintrc.js create mode 100644 apps/sample/eslint.config.mjs create mode 100644 apps/sample/tsconfig.eslint.json delete mode 100644 packages/core/.eslintrc.js create mode 100644 packages/core/eslint.config.mjs delete mode 100644 packages/core/tests/.gitkeep create mode 100644 packages/core/tsconfig.eslint.json delete mode 100644 packages/signer/.eslintrc.js create mode 100644 packages/signer/eslint.config.mjs delete mode 100644 packages/signer/tests/.gitkeep delete mode 100644 packages/signer/tests/index.spec.ts create mode 100644 packages/signer/tsconfig.eslint.json delete mode 100644 packages/trusted-apps/.eslintrc.js create mode 100644 packages/trusted-apps/eslint.config.mjs create mode 100644 packages/trusted-apps/tsconfig.eslint.json create mode 100644 packages/ui/eslint.config.mjs create mode 100644 packages/ui/tsconfig.eslint.json diff --git a/apps/sample/.eslintrc.js b/apps/sample/.eslintrc.js deleted file mode 100644 index ad2bded92..000000000 --- a/apps/sample/.eslintrc.js +++ /dev/null @@ -1,22 +0,0 @@ -const { overrides } = require("../../packages/config/eslint"); - -module.exports = { - extends: ["next", "@ledgerhq/dsdk"], - parserOptions: { - project: true, - tsconfigRootDir: __dirname, - }, - overrides: [ - { - files: [ - "src/app/page.tsx", - "src/app/global-error.tsx", - "src/app/client-layout.tsx", - "src/app/**/page.tsx", - ], - rules: { - "no-restricted-syntax": 0, - }, - }, - ], -}; diff --git a/apps/sample/eslint.config.mjs b/apps/sample/eslint.config.mjs new file mode 100644 index 000000000..b7595b792 --- /dev/null +++ b/apps/sample/eslint.config.mjs @@ -0,0 +1,38 @@ +import baseConfig from "@ledgerhq/eslint-config-dsdk"; +import globals from "globals"; + +export default [ + ...baseConfig, + { + ignores: [".next"], + }, + { + languageOptions: { + parserOptions: { + project: "./tsconfig.eslint.json", + }, + }, + }, + { + files: [ + "src/app/page.tsx", + "src/app/global-error.tsx", + "src/app/client-layout.tsx", + "src/app/**/page.tsx", + ], + rules: { + "no-restricted-syntax": 0, + }, + }, + { + files: ["next.config.js", "postcss.config.js"], + languageOptions: { + globals: { + ...globals.node, + }, + }, + rules: { + "@typescript-eslint/no-var-requires": "off", + }, + }, +]; diff --git a/apps/sample/package.json b/apps/sample/package.json index b91b7a87e..fdb9f8d90 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -6,8 +6,8 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint", - "lint:fix": "next lint --fix", + "lint": "eslint", + "lint:fix": "eslint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", "typecheck": "tsc --noEmit" @@ -16,19 +16,19 @@ "@ledgerhq/device-sdk-core": "workspace:*", "@ledgerhq/react-ui": "^0.14.16", "@sentry/nextjs": "^7.109.0", - "next": "14.1.4", - "react": "^18", - "react-dom": "^18", + "next": "14.2.3", + "react": "^18.3.1", + "react-dom": "^18.3.1", "styled-components": "^5.3.11" }, "devDependencies": { "@ledgerhq/eslint-config-dsdk": "workspace:*", "@ledgerhq/prettier-config-dsdk": "workspace:*", "@ledgerhq/tsconfig-dsdk": "workspace:*", - "@types/react": "^18.2.75", + "@types/react": "^18.3.3", "@types/styled-components": "^5.1.25", "autoprefixer": "^10.4.19", - "eslint-config-next": "14.1.4", + "globals": "15.4.0", "postcss": "^8.4.38" } } diff --git a/apps/sample/src/app/client-layout.tsx b/apps/sample/src/app/client-layout.tsx index cb1117643..520984da4 100644 --- a/apps/sample/src/app/client-layout.tsx +++ b/apps/sample/src/app/client-layout.tsx @@ -60,5 +60,4 @@ const ClientRootLayout: React.FC = ({ children }) => { ); }; -// eslint-disable-next-line no-restricted-syntax export default ClientRootLayout; diff --git a/apps/sample/src/app/layout.tsx b/apps/sample/src/app/layout.tsx index 6b353fa9b..b4366d58b 100644 --- a/apps/sample/src/app/layout.tsx +++ b/apps/sample/src/app/layout.tsx @@ -27,5 +27,4 @@ const RootLayout: React.FC = ({ children }) => { ); }; -// eslint-disable-next-line no-restricted-syntax export default RootLayout; diff --git a/apps/sample/src/components/ApduView/index.tsx b/apps/sample/src/components/ApduView/index.tsx index 7aad24771..99444d201 100644 --- a/apps/sample/src/components/ApduView/index.tsx +++ b/apps/sample/src/components/ApduView/index.tsx @@ -77,7 +77,6 @@ export const ApduView: React.FC = () => { let rawApduResponse; try { rawApduResponse = await sdk.sendApdu({ - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion sessionId: selectedSessionId ?? "", apdu: getRawApdu(values), }); diff --git a/apps/sample/src/hooks/useDeviceSessionState.ts b/apps/sample/src/hooks/useDeviceSessionState.ts index aad5317ae..d14850aad 100644 --- a/apps/sample/src/hooks/useDeviceSessionState.ts +++ b/apps/sample/src/hooks/useDeviceSessionState.ts @@ -15,7 +15,6 @@ export function useDeviceSessionState(sessionId: DeviceSessionId) { sessionId, }) .subscribe((state) => { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion setDeviceSessionState(state); }); diff --git a/apps/sample/tsconfig.eslint.json b/apps/sample/tsconfig.eslint.json new file mode 100644 index 000000000..022d7d734 --- /dev/null +++ b/apps/sample/tsconfig.eslint.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + "eslint.config.mjs", + "next.config.js", + "postcss.config.js" + ] +} diff --git a/package.json b/package.json index 2c64cfcd0..cea4e32a7 100644 --- a/package.json +++ b/package.json @@ -31,22 +31,22 @@ }, "devDependencies": { "@changesets/changelog-github": "^0.5.0", - "@changesets/cli": "^2.27.1", + "@changesets/cli": "^2.27.5", "@types/jest": "^29.5.12", "@types/node": "^20.12.7", "concurrently": "^8.2.2", "danger": "^11.3.1", - "eslint": "^8.57.0", + "eslint": "9.4.0", "gitmoji-cli": "^9.2.0", "hygen": "^6.2.11", "jest": "^29.7.0", - "prettier": "^3.2.5", - "rimraf": "^5.0.5", - "ts-jest": "^29.1.2", - "tsc-alias": "^1.8.8", + "prettier": "^3.3.2", + "rimraf": "^5.0.7", + "ts-jest": "^29.1.4", + "tsc-alias": "^1.8.10", "turbo": "^1.13.2", - "typescript": "^5.4.4", - "zx": "^8.0.1" + "typescript": "^5.4.5", + "zx": "^8.1.2" }, "engines": { "node": ">=18" diff --git a/packages/config/eslint/index.js b/packages/config/eslint/index.js index 7f790ad61..7586f8e1a 100644 --- a/packages/config/eslint/index.js +++ b/packages/config/eslint/index.js @@ -1,95 +1,119 @@ -const { resolve } = require("node:path"); +// @ts-check -const project = resolve(process.cwd(), "tsconfig.json"); +import globals from "globals"; +import js from "@eslint/js"; +import tseslint from "typescript-eslint"; +import simpleImportSort from "eslint-plugin-simple-import-sort"; +import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"; -/** @type {import("eslint").Linter.Config} */ -module.exports = { - extends: ["eslint:recommended", "prettier", "turbo"], - plugins: ["no-type-assertion", "simple-import-sort"], - globals: { - React: true, - JSX: true, - node: true, - console: true, +export default [ + { + ignores: [ + ".*.js", + "coverage/*", + "_templates/*", + "lib/*", + "dist/*", + "node_modules/*", + ], }, - parserOptions: { - ecmaVersion: "latest", - }, - env: { - es6: true, - }, - ignorePatterns: [ - // Ignore dotfiles - ".*.js", - "node_modules/", - "dist/", - "lib/", - ], - overrides: [ - { - files: ["**/*.{ts,tsx}"], - parser: "@typescript-eslint/parser", - extends: [ - "plugin:@typescript-eslint/recommended-type-checked", - "plugin:@typescript-eslint/stylistic-type-checked", - "prettier", - ], - rules: { - "import/prefer-default-export": "off", - "no-restricted-syntax": [ - "error", - { - selector: "ExportDefaultDeclaration", - message: "Prefer named exports", - }, - ], - "no-void": "off", - "no-restricted-imports": [ - "error", - { - patterns: ["../*"], - }, - ], - "simple-import-sort/imports": [ - "error", - { - groups: [ - // Side effect imports. - ["^\\u0000"], - // Node.js builtins prefixed with `node:`. - ["^node:"], - // Packages. `react` related packages come first. - ["^react", "^@?\\w"], - // Internal packages. - ["^(@|@api|@internal|@root)(/.*|$)"], - // Other relative imports. Put same-folder imports and `.` last. - ["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"], - // Style imports. - ["^.+\\.s?css$"], - ], - }, - ], - "simple-import-sort/exports": "error", - "@typescript-eslint/consistent-type-definitions": "off", - "@typescript-eslint/ban-ts-comment": "warn", - "@typescript-eslint/no-unsafe-member-access": "warn", - "@typescript-eslint/no-shadow": "warn", - "@typescript-eslint/require-await": "warn", - "@typescript-eslint/no-unsafe-assignment": "warn", - "@typescript-eslint/no-unsafe-return": "warn", - "@typescript-eslint/no-unsafe-call": "warn", - "@typescript-eslint/no-unused-vars": [ - "error", - { argsIgnorePattern: "^_" }, - ], - "no-type-assertion/no-type-assertion": "error", + + // Base JS config + js.configs.recommended, + + // Base TS config + ...tseslint.configs.recommended, + + // Prettier recommended + eslintPluginPrettierRecommended, + + // MJS files in scripts folder (have access to ZX globals) + { + files: ["**/*.mjs"], + languageOptions: { + globals: { + ...globals.node, + log: true, + $: true, + argv: true, + cd: true, + chalk: true, + echo: true, + expBackoff: true, + fs: true, + glob: true, + globby: true, + nothrow: true, + os: true, + path: true, + question: true, + quiet: true, + quote: true, + quotePowerShell: true, + retry: true, + sleep: true, + spinner: true, + ssh: true, + stdin: true, + which: true, + within: true, }, }, - { - files: ["**/*.test.ts", "**/*.stub.ts"], - rules: { - "no-type-assertion/no-type-assertion": "off", - }, + }, + + { + files: ["**/*.ts"], + plugins: { + "simple-import-sort": simpleImportSort, + }, + rules: { + "import/prefer-default-export": "off", + "no-restricted-syntax": [ + "error", + { + selector: "ExportDefaultDeclaration", + message: "Prefer named exports", + }, + ], + "no-void": "off", + "no-restricted-imports": [ + "error", + { + patterns: ["../*"], + }, + ], + "simple-import-sort/imports": [ + "error", + { + groups: [ + // Side effect imports. + ["^\\u0000"], + // Node.js builtins prefixed with `node:`. + ["^node:"], + // Packages. `react` related packages come first. + ["^react", "^@?\\w"], + // Internal packages. + ["^(@|@api|@internal|@root)(/.*|$)"], + // Other relative imports. Put same-folder imports and `.` last. + ["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"], + // Style imports. + ["^.+\\.s?css$"], + ], + }, + ], + "simple-import-sort/exports": "error", + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/ban-ts-comment": "warn", + "@typescript-eslint/no-unsafe-member-access": "warn", + "@typescript-eslint/no-shadow": "warn", + "@typescript-eslint/require-await": "warn", + "@typescript-eslint/no-unsafe-assignment": "warn", + "@typescript-eslint/no-unsafe-return": "warn", + "@typescript-eslint/no-unsafe-call": "warn", + "@typescript-eslint/no-unused-vars": [ + "error", + { argsIgnorePattern: "^_" }, + ], }, - ], -}; + }, +]; diff --git a/packages/config/eslint/package.json b/packages/config/eslint/package.json index a0cde1d78..155c3f5dc 100644 --- a/packages/config/eslint/package.json +++ b/packages/config/eslint/package.json @@ -3,16 +3,17 @@ "license": "MIT", "version": "0.0.1", "private": true, + "description": "Base ESLint configuration for LedgerHQ DSDK projects", + "main": "index.js", "files": [ "index.js" ], + "type": "module", "devDependencies": { - "@typescript-eslint/eslint-plugin": "^7.6.0", - "@typescript-eslint/parser": "^7.6.0", - "@vercel/style-guide": "^6.0.0", - "eslint-config-prettier": "^9.1.0", - "eslint-config-turbo": "^1.13.2", - "eslint-plugin-no-type-assertion": "^1.3.0", - "eslint-plugin-simple-import-sort": "^12.0.0" + "@eslint/js": "9.4.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-simple-import-sort": "12.1.0", + "globals": "15.4.0", + "typescript-eslint": "7.13.0" } } diff --git a/packages/config/prettier/package.json b/packages/config/prettier/package.json index 72b69e5a6..03f0079ec 100644 --- a/packages/config/prettier/package.json +++ b/packages/config/prettier/package.json @@ -7,6 +7,6 @@ "index.js" ], "devDependencies": { - "prettier": "^3.2.5" + "prettier": "^3.3.2" } } diff --git a/packages/config/typescript/package.json b/packages/config/typescript/package.json index a770a6458..2618a95f9 100644 --- a/packages/config/typescript/package.json +++ b/packages/config/typescript/package.json @@ -8,8 +8,7 @@ ], "devDependencies": { "@tsconfig/recommended": "^1.0.6", - "@types/eslint": "^8.56.7", - "@types/react": "^18.2.75", - "@types/react-dom": "^18.2.24" + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0" } } diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js deleted file mode 100644 index 610011381..000000000 --- a/packages/core/.eslintrc.js +++ /dev/null @@ -1,53 +0,0 @@ -module.exports = { - root: true, - extends: ["@ledgerhq/dsdk"], - parserOptions: { - project: true, - tsconfigRootDir: __dirname, - }, - overrides: [ - { - files: ["**/*.test.ts"], - rules: { - "@typescript-eslint/unbound-method": 0, - }, - }, - { - files: ["**/*.mjs"], - env: { - es6: true, - node: true, - }, - globals: { - log: true, - $: true, - argv: true, - cd: true, - chalk: true, - echo: true, - expBackoff: true, - fs: true, - glob: true, - globby: true, - nothrow: true, - os: true, - path: true, - question: true, - quiet: true, - quote: true, - quotePowerShell: true, - retry: true, - sleep: true, - spinner: true, - ssh: true, - stdin: true, - which: true, - within: true, - }, - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - }, - }, - ], -}; diff --git a/packages/core/eslint.config.mjs b/packages/core/eslint.config.mjs new file mode 100644 index 000000000..1ef3be846 --- /dev/null +++ b/packages/core/eslint.config.mjs @@ -0,0 +1,12 @@ +import config from "@ledgerhq/eslint-config-dsdk"; + +export default [ + ...config, + { + languageOptions: { + parserOptions: { + project: "./tsconfig.eslint.json", + }, + }, + }, +]; diff --git a/packages/core/package.json b/packages/core/package.json index 05b794291..84ff7327d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -28,7 +28,7 @@ "scripts": { "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc && (concurrently \"tsc -w -p tsconfig.json\" \"tsc-alias -w -p tsconfig.json\")", - "lint": "eslint --ext .ts \"src\"", + "lint": "eslint", "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", @@ -45,7 +45,7 @@ "purify-ts": "^2.0.3", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", - "semver": "^7.6.0", + "semver": "^7.6.2", "uuid": "^9.0.1" }, "devDependencies": { diff --git a/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts index 62f07ba4d..b02c8fc70 100644 --- a/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts +++ b/packages/core/src/internal/device-model/data/StaticDeviceModelDataSource.ts @@ -83,7 +83,6 @@ export class StaticDeviceModelDataSource implements DeviceModelDataSource { ): InternalDeviceModel[] { return this.getAllDeviceModels().filter((deviceModel) => { return Object.entries(params).every(([key, value]) => { - // eslint-disable-next-line no-type-assertion/no-type-assertion return deviceModel[key as keyof InternalDeviceModel] === value; }); }); diff --git a/packages/core/src/internal/usb/model/HIDDevice.stub.ts b/packages/core/src/internal/usb/model/HIDDevice.stub.ts index 47dd1b141..846e96bc6 100644 --- a/packages/core/src/internal/usb/model/HIDDevice.stub.ts +++ b/packages/core/src/internal/usb/model/HIDDevice.stub.ts @@ -10,7 +10,7 @@ export const hidDeviceStubBuilder = ( open: jest.fn(), oninputreport, close: jest.fn(), - sendReport: jest.fn().mockImplementation(() => oninputreport()), + sendReport: jest.fn().mockResolvedValue(oninputreport()), sendFeatureReport: jest.fn(), forget: jest.fn(), receiveFeatureReport: jest.fn(), diff --git a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts index 23d11aec5..e02089f10 100644 --- a/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts +++ b/packages/core/src/internal/usb/transport/UsbHidDeviceConnection.test.ts @@ -45,7 +45,7 @@ describe("UsbHidDeviceConnection", () => { logger, ); // when - void connection.sendApdu(new Uint8Array(0)); + connection.sendApdu(new Uint8Array(0)); // then expect(device.sendReport).toHaveBeenCalled(); }); @@ -67,6 +67,6 @@ describe("UsbHidDeviceConnection", () => { // when const response = connection.sendApdu(Uint8Array.from([])); // then - void expect(response).resolves.toBe(RESPONSE_LOCKED_DEVICE); + expect(response).resolves.toBe(RESPONSE_LOCKED_DEVICE); }); }); diff --git a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts index 15e57909c..210084b37 100644 --- a/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts +++ b/packages/core/src/internal/usb/transport/WebUsbHidTransport.test.ts @@ -431,7 +431,7 @@ describe("WebUsbHidTransport", () => { onDisconnect, }) .then(() => { - // @ts-expect-error + // @ts-expect-error trying to access private member transport.handleDeviceDisconnectionEvent({ device: { productId: stubDevice.productId }, } as Event); diff --git a/packages/core/tests/.gitkeep b/packages/core/tests/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/core/tsconfig.eslint.json b/packages/core/tsconfig.eslint.json new file mode 100644 index 000000000..db99aa7a0 --- /dev/null +++ b/packages/core/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["src", "index.ts", "jest.*.ts", "scripts", "eslint.config.mjs"] +} diff --git a/packages/signer/.eslintrc.js b/packages/signer/.eslintrc.js deleted file mode 100644 index 4ba35c806..000000000 --- a/packages/signer/.eslintrc.js +++ /dev/null @@ -1,47 +0,0 @@ -module.exports = { - root: true, - extends: ["@ledgerhq/dsdk"], - parserOptions: { - project: true, - tsconfigRootDir: __dirname, - }, - overrides: [ - { - files: ["**/*.mjs"], - env: { - es6: true, - node: true, - }, - globals: { - log: true, - $: true, - argv: true, - cd: true, - chalk: true, - echo: true, - expBackoff: true, - fs: true, - glob: true, - globby: true, - nothrow: true, - os: true, - path: true, - question: true, - quiet: true, - quote: true, - quotePowerShell: true, - retry: true, - sleep: true, - spinner: true, - ssh: true, - stdin: true, - which: true, - within: true, - }, - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - }, - }, - ], -}; diff --git a/packages/signer/eslint.config.mjs b/packages/signer/eslint.config.mjs new file mode 100644 index 000000000..1ef3be846 --- /dev/null +++ b/packages/signer/eslint.config.mjs @@ -0,0 +1,12 @@ +import config from "@ledgerhq/eslint-config-dsdk"; + +export default [ + ...config, + { + languageOptions: { + parserOptions: { + project: "./tsconfig.eslint.json", + }, + }, + }, +]; diff --git a/packages/signer/jest.config.ts b/packages/signer/jest.config.ts index 3959085f2..f97e99069 100644 --- a/packages/signer/jest.config.ts +++ b/packages/signer/jest.config.ts @@ -1,3 +1,4 @@ +/* eslint no-restricted-syntax: 0 */ import type { JestConfigWithTsJest } from "ts-jest"; const config: JestConfigWithTsJest = { diff --git a/packages/signer/package.json b/packages/signer/package.json index 9df23e8ed..ddaeadbfa 100644 --- a/packages/signer/package.json +++ b/packages/signer/package.json @@ -31,7 +31,7 @@ "scripts": { "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc --watch", - "lint": "eslint --ext .ts \"src\"", + "lint": "eslint", "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/signer/tests/.gitkeep b/packages/signer/tests/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/signer/tests/index.spec.ts b/packages/signer/tests/index.spec.ts deleted file mode 100644 index 2a8c7226e..000000000 --- a/packages/signer/tests/index.spec.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Hello } from "../src"; - -describe("signer", () => { - it("should be Hello World", () => { - expect(Hello).toEqual("World"); - }); -}); diff --git a/packages/signer/tsconfig.eslint.json b/packages/signer/tsconfig.eslint.json new file mode 100644 index 000000000..db99aa7a0 --- /dev/null +++ b/packages/signer/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["src", "index.ts", "jest.*.ts", "scripts", "eslint.config.mjs"] +} diff --git a/packages/signer/tsconfig.json b/packages/signer/tsconfig.json index 9e50330ae..04cbd58eb 100644 --- a/packages/signer/tsconfig.json +++ b/packages/signer/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "baseUrl": "." }, - "include": ["src/**/*", "jest.config.ts"] + "include": ["src", "jest.*.ts"] } diff --git a/packages/trusted-apps/.eslintrc.js b/packages/trusted-apps/.eslintrc.js deleted file mode 100644 index 4ba35c806..000000000 --- a/packages/trusted-apps/.eslintrc.js +++ /dev/null @@ -1,47 +0,0 @@ -module.exports = { - root: true, - extends: ["@ledgerhq/dsdk"], - parserOptions: { - project: true, - tsconfigRootDir: __dirname, - }, - overrides: [ - { - files: ["**/*.mjs"], - env: { - es6: true, - node: true, - }, - globals: { - log: true, - $: true, - argv: true, - cd: true, - chalk: true, - echo: true, - expBackoff: true, - fs: true, - glob: true, - globby: true, - nothrow: true, - os: true, - path: true, - question: true, - quiet: true, - quote: true, - quotePowerShell: true, - retry: true, - sleep: true, - spinner: true, - ssh: true, - stdin: true, - which: true, - within: true, - }, - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - }, - }, - ], -}; diff --git a/packages/trusted-apps/eslint.config.mjs b/packages/trusted-apps/eslint.config.mjs new file mode 100644 index 000000000..1ef3be846 --- /dev/null +++ b/packages/trusted-apps/eslint.config.mjs @@ -0,0 +1,12 @@ +import config from "@ledgerhq/eslint-config-dsdk"; + +export default [ + ...config, + { + languageOptions: { + parserOptions: { + project: "./tsconfig.eslint.json", + }, + }, + }, +]; diff --git a/packages/trusted-apps/jest.config.ts b/packages/trusted-apps/jest.config.ts index 3959085f2..f97e99069 100644 --- a/packages/trusted-apps/jest.config.ts +++ b/packages/trusted-apps/jest.config.ts @@ -1,3 +1,4 @@ +/* eslint no-restricted-syntax: 0 */ import type { JestConfigWithTsJest } from "ts-jest"; const config: JestConfigWithTsJest = { diff --git a/packages/trusted-apps/package.json b/packages/trusted-apps/package.json index 7f40c38df..184d8e72c 100644 --- a/packages/trusted-apps/package.json +++ b/packages/trusted-apps/package.json @@ -30,7 +30,7 @@ ], "scripts": { "build": "rimraf lib && zx scripts/build.mjs", - "lint": "eslint --ext .ts \"src\"", + "lint": "eslint", "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/trusted-apps/tsconfig.eslint.json b/packages/trusted-apps/tsconfig.eslint.json new file mode 100644 index 000000000..db99aa7a0 --- /dev/null +++ b/packages/trusted-apps/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["src", "index.ts", "jest.*.ts", "scripts", "eslint.config.mjs"] +} diff --git a/packages/ui/eslint.config.mjs b/packages/ui/eslint.config.mjs new file mode 100644 index 000000000..1ef3be846 --- /dev/null +++ b/packages/ui/eslint.config.mjs @@ -0,0 +1,12 @@ +import config from "@ledgerhq/eslint-config-dsdk"; + +export default [ + ...config, + { + languageOptions: { + parserOptions: { + project: "./tsconfig.eslint.json", + }, + }, + }, +]; diff --git a/packages/ui/jest.config.ts b/packages/ui/jest.config.ts index 3959085f2..f97e99069 100644 --- a/packages/ui/jest.config.ts +++ b/packages/ui/jest.config.ts @@ -1,3 +1,4 @@ +/* eslint no-restricted-syntax: 0 */ import type { JestConfigWithTsJest } from "ts-jest"; const config: JestConfigWithTsJest = { diff --git a/packages/ui/package.json b/packages/ui/package.json index 27385bf3f..0e4e15376 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -31,7 +31,7 @@ "scripts": { "build": "rimraf lib && zx scripts/build.mjs", "dev": "tsc --watch", - "lint": "eslint --ext .ts \"src\"", + "lint": "eslint", "lint:fix": "pnpm lint --fix", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", diff --git a/packages/ui/tsconfig.eslint.json b/packages/ui/tsconfig.eslint.json new file mode 100644 index 000000000..db99aa7a0 --- /dev/null +++ b/packages/ui/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["src", "index.ts", "jest.*.ts", "scripts", "eslint.config.mjs"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cd3df739b..49e8f7789 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^0.5.0 version: 0.5.0 '@changesets/cli': - specifier: ^2.27.1 - version: 2.27.1 + specifier: ^2.27.5 + version: 2.27.5 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -27,8 +27,8 @@ importers: specifier: ^11.3.1 version: 11.3.1 eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: 9.4.0 + version: 9.4.0 gitmoji-cli: specifier: ^9.2.0 version: 9.2.0 @@ -37,28 +37,28 @@ importers: version: 6.2.11 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) + version: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) prettier: - specifier: ^3.2.5 - version: 3.2.5 + specifier: ^3.3.2 + version: 3.3.2 rimraf: - specifier: ^5.0.5 - version: 5.0.5 + specifier: ^5.0.7 + version: 5.0.7 ts-jest: - specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4) + specifier: ^29.1.4 + version: 29.1.4(@babel/core@7.24.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5) tsc-alias: - specifier: ^1.8.8 - version: 1.8.8 + specifier: ^1.8.10 + version: 1.8.10 turbo: specifier: ^1.13.2 version: 1.13.2 typescript: - specifier: ^5.4.4 - version: 5.4.4 + specifier: ^5.4.5 + version: 5.4.5 zx: - specifier: ^8.0.1 - version: 8.0.1 + specifier: ^8.1.2 + version: 8.1.2 apps/sample: dependencies: @@ -67,22 +67,22 @@ importers: version: link:../../packages/core '@ledgerhq/react-ui': specifier: ^0.14.16 - version: 0.14.16(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)) + version: 0.14.16(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) '@sentry/nextjs': specifier: ^7.109.0 - version: 7.109.0(next@14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) + version: 7.109.0(next@14.2.3(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) next: - specifier: 14.1.4 - version: 14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 14.2.3 + version: 14.2.3(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: - specifier: ^18 - version: 18.2.0 + specifier: ^18.3.1 + version: 18.3.1 react-dom: - specifier: ^18 - version: 18.2.0(react@18.2.0) + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) styled-components: specifier: ^5.3.11 - version: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) + version: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) devDependencies: '@ledgerhq/eslint-config-dsdk': specifier: workspace:* @@ -94,71 +94,62 @@ importers: specifier: workspace:* version: link:../../packages/config/typescript '@types/react': - specifier: ^18.2.75 - version: 18.2.75 + specifier: ^18.3.3 + version: 18.3.3 '@types/styled-components': specifier: ^5.1.25 version: 5.1.34 autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) - eslint-config-next: - specifier: 14.1.4 - version: 14.1.4(eslint@9.0.0)(typescript@5.4.4) + globals: + specifier: 15.4.0 + version: 15.4.0 postcss: specifier: ^8.4.38 version: 8.4.38 packages/config/eslint: devDependencies: - '@typescript-eslint/eslint-plugin': - specifier: ^7.6.0 - version: 7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4) - '@typescript-eslint/parser': - specifier: ^7.6.0 - version: 7.6.0(eslint@9.0.0)(typescript@5.4.4) - '@vercel/style-guide': - specifier: ^6.0.0 - version: 6.0.0(@next/eslint-plugin-next@14.1.4)(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(prettier@3.2.5)(typescript@5.4.4) - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@9.0.0) - eslint-config-turbo: - specifier: ^1.13.2 - version: 1.13.2(eslint@9.0.0) - eslint-plugin-no-type-assertion: - specifier: ^1.3.0 - version: 1.3.0(eslint@9.0.0) + '@eslint/js': + specifier: 9.4.0 + version: 9.4.0 + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@9.4.0))(eslint@9.4.0)(prettier@3.3.2) eslint-plugin-simple-import-sort: - specifier: ^12.0.0 - version: 12.0.0(eslint@9.0.0) + specifier: 12.1.0 + version: 12.1.0(eslint@9.4.0) + globals: + specifier: 15.4.0 + version: 15.4.0 + typescript-eslint: + specifier: 7.13.0 + version: 7.13.0(eslint@9.4.0)(typescript@5.4.5) packages/config/jest: devDependencies: ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.7)(typescript@5.4.4) + version: 10.9.2(@types/node@20.14.2)(typescript@5.4.5) packages/config/prettier: devDependencies: prettier: - specifier: ^3.2.5 - version: 3.2.5 + specifier: ^3.3.2 + version: 3.3.2 packages/config/typescript: devDependencies: '@tsconfig/recommended': specifier: ^1.0.6 version: 1.0.6 - '@types/eslint': - specifier: ^8.56.7 - version: 8.56.7 '@types/react': - specifier: ^18.2.75 - version: 18.2.75 + specifier: ^18.3.3 + version: 18.3.3 '@types/react-dom': - specifier: ^18.2.24 - version: 18.2.24 + specifier: ^18.3.0 + version: 18.3.0 packages/core: dependencies: @@ -181,8 +172,8 @@ importers: specifier: ^7.8.1 version: 7.8.1 semver: - specifier: ^7.6.0 - version: 7.6.0 + specifier: ^7.6.2 + version: 7.6.2 uuid: specifier: ^9.0.1 version: 9.0.1 @@ -210,7 +201,7 @@ importers: version: 1.0.6 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.7)(typescript@5.4.4) + version: 10.9.2(@types/node@20.14.2)(typescript@5.4.5) packages/signer: dependencies: @@ -280,10 +271,6 @@ importers: packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -292,25 +279,34 @@ packages: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.23.5': resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.24.7': + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + engines: {node: '>=6.9.0'} + '@babel/core@7.24.4': resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.24.1': - resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 + '@babel/core@7.24.7': + resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + engines: {node: '>=6.9.0'} '@babel/generator@7.24.4': resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.24.7': + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.22.5': resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -319,28 +315,54 @@ packages: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.24.7': + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + engines: {node: '>=6.9.0'} + '@babel/helper-environment-visitor@7.22.20': resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} + '@babel/helper-environment-visitor@7.24.7': + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.23.0': resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.24.7': + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.24.7': + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.22.15': resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.23.3': resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.24.7': + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-plugin-utils@7.22.5': resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} @@ -349,35 +371,68 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.22.6': resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.24.7': + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.24.1': resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.24.7': + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.23.5': resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.24.7': + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + engines: {node: '>=6.9.0'} + '@babel/helpers@7.24.4': resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.24.7': + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.2': resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.24.4': resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.24.7': + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -455,26 +510,42 @@ packages: resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.24.7': + resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} + engines: {node: '>=6.9.0'} + '@babel/template@7.24.0': resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} + '@babel/template@7.24.7': + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.1': resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.7': + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.24.0': resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} + '@babel/types@7.24.7': + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@changesets/apply-release-plan@7.0.0': - resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} + '@changesets/apply-release-plan@7.0.3': + resolution: {integrity: sha512-klL6LCdmfbEe9oyfLxnidIf/stFXmrbFO/3gT5LU5pcyoZytzJe4gWpTBx3BPmyNPl16dZ1xrkcW7b98e3tYkA==} - '@changesets/assemble-release-plan@6.0.0': - resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} + '@changesets/assemble-release-plan@6.0.2': + resolution: {integrity: sha512-n9/Tdq+ze+iUtjmq0mZO3pEhJTKkku9hUxtUadW30jlN7kONqJG3O6ALeXrmc6gsi/nvoCuKjqEJ68Hk8RbMTQ==} '@changesets/changelog-git@0.2.0': resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} @@ -482,24 +553,24 @@ packages: '@changesets/changelog-github@0.5.0': resolution: {integrity: sha512-zoeq2LJJVcPJcIotHRJEEA2qCqX0AQIeFE+L21L8sRLPVqDhSXY8ZWAt2sohtBpFZkBwu+LUwMSKRr2lMy3LJA==} - '@changesets/cli@2.27.1': - resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} + '@changesets/cli@2.27.5': + resolution: {integrity: sha512-UVppOvzCjjylBenFcwcZNG5IaZ8jsIaEVraV/pbXgukYNb0Oqa0d8UWb0LkYzA1Bf1HmUrOfccFcRLheRuA7pA==} hasBin: true - '@changesets/config@3.0.0': - resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} + '@changesets/config@3.0.1': + resolution: {integrity: sha512-nCr8pOemUjvGJ8aUu8TYVjqnUL+++bFOQHBVmtNbLvKzIDkN/uiP/Z4RKmr7NNaiujIURHySDEGFPftR4GbTUA==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - '@changesets/get-dependents-graph@2.0.0': - resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} + '@changesets/get-dependents-graph@2.1.0': + resolution: {integrity: sha512-QOt6pQq9RVXKGHPVvyKimJDYJumx7p4DO5MO9AhRJYgAPgv0emhNqAqqysSVKHBm4sxKlGN4S1zXOIb5yCFuhQ==} '@changesets/get-github-info@0.6.0': resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} - '@changesets/get-release-plan@4.0.0': - resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} + '@changesets/get-release-plan@4.0.2': + resolution: {integrity: sha512-rOalz7nMuMV2vyeP7KBeAhqEB7FM2GFPO5RQSoOoUKKH9L6wW3QyPA2K+/rG9kBrWl2HckPVES73/AuwPvbH3w==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} @@ -519,14 +590,17 @@ packages: '@changesets/read@0.6.0': resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + '@changesets/should-skip-package@0.1.0': + resolution: {integrity: sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==} + '@changesets/types@4.1.0': resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} '@changesets/types@6.0.0': resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - '@changesets/write@0.3.0': - resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} + '@changesets/write@0.3.1': + resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -588,24 +662,24 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + '@eslint-community/regexpp@4.10.1': + resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.15.1': + resolution: {integrity: sha512-K4gzNq+yymn/EVsXYmf+SBcBro8MTf+aXJZUphM96CdzUEr+ClGDvAbpmaEK+cGVigVXIgs9gNmvHAlrzzY5JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.0.2': - resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/js@9.4.0': + resolution: {integrity: sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.0.0': - resolution: {integrity: sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==} + '@eslint/object-schema@2.1.3': + resolution: {integrity: sha512-HAbhAYKfsAC2EkTqve00ibWIZlaU74Z1EHwAjYr4PXF0YU2VEA1zSIKSSpKszRLRWwHzzRZXvK632u+uXzvsvw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@floating-ui/core@0.3.1': @@ -642,20 +716,13 @@ packages: resolution: {integrity: sha512-MFzdH+Z6eJaCZA5ruWsyvm6SXRyrQHjYVR6aY8POFraIy7ceIHOprWCs1R+0ydDZ8KtBnd8OTHjlJ0sLtSFJCg==} engines: {node: '>=14.2.0'} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - - '@humanwhocodes/config-array@0.12.3': - resolution: {integrity: sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==} - engines: {node: '>=10.10.0'} - '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -802,75 +869,63 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@microsoft/tsdoc-config@0.16.2': - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + '@next/env@14.2.3': + resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==} - '@microsoft/tsdoc@0.14.2': - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} - - '@next/env@14.1.4': - resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} - - '@next/eslint-plugin-next@14.1.4': - resolution: {integrity: sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==} - - '@next/swc-darwin-arm64@14.1.4': - resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} + '@next/swc-darwin-arm64@14.2.3': + resolution: {integrity: sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.1.4': - resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} + '@next/swc-darwin-x64@14.2.3': + resolution: {integrity: sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.1.4': - resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} + '@next/swc-linux-arm64-gnu@14.2.3': + resolution: {integrity: sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.1.4': - resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} + '@next/swc-linux-arm64-musl@14.2.3': + resolution: {integrity: sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.1.4': - resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} + '@next/swc-linux-x64-gnu@14.2.3': + resolution: {integrity: sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.1.4': - resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} + '@next/swc-linux-x64-musl@14.2.3': + resolution: {integrity: sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.1.4': - resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} + '@next/swc-win32-arm64-msvc@14.2.3': + resolution: {integrity: sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.1.4': - resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} + '@next/swc-win32-ia32-msvc@14.2.3': + resolution: {integrity: sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@next/swc-win32-x64-msvc@14.1.4': - resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} + '@next/swc-win32-x64-msvc@14.2.3': + resolution: {integrity: sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -966,9 +1021,6 @@ packages: rollup: optional: true - '@rushstack/eslint-patch@1.10.1': - resolution: {integrity: sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==} - '@sentry-internal/feedback@7.109.0': resolution: {integrity: sha512-EL7N++poxvJP9rYvh6vSu24tsKkOveNCcCj4IM7+irWPjsuD2GLYYlhp/A/Mtt9l7iqO4plvtiQU5HGk7smcTQ==} engines: {node: '>=12'} @@ -1111,8 +1163,11 @@ packages: '@styled-system/variant@5.1.5': resolution: {integrity: sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==} - '@swc/helpers@0.5.2': - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.5': + resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} @@ -1165,9 +1220,6 @@ packages: '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - '@types/eslint@8.56.7': - resolution: {integrity: sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==} - '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -1198,9 +1250,6 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} @@ -1219,6 +1268,9 @@ packages: '@types/node@20.12.7': resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + '@types/node@20.14.2': + resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1228,14 +1280,14 @@ packages: '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - '@types/react-dom@18.2.24': - resolution: {integrity: sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==} + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} '@types/react-transition-group@4.4.10': resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} - '@types/react@18.2.75': - resolution: {integrity: sha512-+DNnF7yc5y0bHkBTiLKqXFe+L4B3nvOphiMY3tuA5X10esmjqk7smyBZzbGTy2vsiy/Bnzj8yFIBL8xhRacoOg==} + '@types/react@18.3.3': + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -1261,8 +1313,8 @@ packages: '@types/yargs@17.0.32': resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - '@typescript-eslint/eslint-plugin@7.6.0': - resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} + '@typescript-eslint/eslint-plugin@7.13.0': + resolution: {integrity: sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -1272,18 +1324,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@7.6.0': - resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} + '@typescript-eslint/parser@7.13.0': + resolution: {integrity: sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -1292,24 +1334,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/scope-manager@7.5.0': - resolution: {integrity: sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/scope-manager@7.6.0': - resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} + '@typescript-eslint/scope-manager@7.13.0': + resolution: {integrity: sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.6.0': - resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} + '@typescript-eslint/type-utils@7.13.0': + resolution: {integrity: sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -1318,51 +1348,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/types@7.5.0': - resolution: {integrity: sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/types@7.6.0': - resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@7.5.0': - resolution: {integrity: sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==} + '@typescript-eslint/types@7.13.0': + resolution: {integrity: sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==} engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/typescript-estree@7.6.0': - resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} + '@typescript-eslint/typescript-estree@7.13.0': + resolution: {integrity: sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -1370,61 +1361,16 @@ packages: typescript: optional: true - '@typescript-eslint/utils@5.62.0': - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - - '@typescript-eslint/utils@7.5.0': - resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - - '@typescript-eslint/utils@7.6.0': - resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} + '@typescript-eslint/utils@7.13.0': + resolution: {integrity: sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/visitor-keys@7.5.0': - resolution: {integrity: sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/visitor-keys@7.6.0': - resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} + '@typescript-eslint/visitor-keys@7.13.0': + resolution: {integrity: sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==} engines: {node: ^18.18.0 || >=20.0.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - '@vercel/style-guide@6.0.0': - resolution: {integrity: sha512-tu0wFINGz91EPwaT5VjSqUwbvCY9pvLach7SPG4XyfJKPU9Vku2TFa6+AyzJ4oroGbo9fK+TQhIFHrnFl0nCdg==} - engines: {node: '>=18.18'} - peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <15.0.0-0' - eslint: '>=8.48.0 <9' - prettier: '>=3.0.0 <4' - typescript: '>=4.8.0 <6' - peerDependenciesMeta: - '@next/eslint-plugin-next': - optional: true - eslint: - optional: true - prettier: - optional: true - typescript: - optional: true - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1518,47 +1464,18 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - array-buffer-byte-length@1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} - array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} - - array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} - arraybuffer.prototype.slice@1.0.3: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} @@ -1567,9 +1484,6 @@ packages: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} @@ -1597,13 +1511,6 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - - axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1655,8 +1562,8 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} bl@4.1.0: @@ -1676,6 +1583,10 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + breakword@1.0.6: resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} @@ -1684,6 +1595,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.23.1: + resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -1700,10 +1616,6 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -1757,8 +1669,8 @@ packages: caniuse-lite@1.0.30001607: resolution: {integrity: sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==} - caniuse-lite@1.0.30001608: - resolution: {integrity: sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==} + caniuse-lite@1.0.30001632: + resolution: {integrity: sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==} chalk@2.3.0: resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} @@ -1799,25 +1711,17 @@ packages: chart.js: '>=3.0.0' moment: ^2.10.2 - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.0.0: - resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} - engines: {node: '>=8'} - cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} @@ -1928,9 +1832,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - core-js-compat@3.36.1: - resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} - core-js@3.36.0: resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==} @@ -1980,9 +1881,6 @@ packages: resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} engines: {node: '>= 0.1.90'} - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - danger@11.3.1: resolution: {integrity: sha512-+slkGnbf0czY7g4LSuYpYkKJgFrb9YIXFJvV5JAuLLF39CXLlUw0iebgeL3ASK1t6RDb8xe+Rk2F5ilh2Hdv2w==} engines: {node: '>=14.13.1'} @@ -2019,16 +1917,17 @@ packages: resolution: {integrity: sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A==} engines: {node: '>=12'} - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -2106,26 +2005,14 @@ packages: deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} - detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} - detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2138,14 +2025,6 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} @@ -2160,10 +2039,6 @@ packages: resolution: {integrity: sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==} engines: {node: '>=16'} - dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} @@ -2182,6 +2057,9 @@ packages: electron-to-chromium@1.4.729: resolution: {integrity: sha512-bx7+5Saea/qu14kmPTDHQxkp2UnziG3iajUQu3BxFvCOnpAJdDbMV4rSl+EqFDkkpNNVUFlR1kDfpL59xfy1HA==} + electron-to-chromium@1.4.798: + resolution: {integrity: sha512-by9J2CiM9KPGj9qfp5U4FcPSbXJG7FNzqnYaY4WLzX+v2PHieVGmnsA4dxfpGE3QEC7JofpPZmn7Vn1B9NR2+Q==} + embla-carousel-react@8.0.0-rc17: resolution: {integrity: sha512-x4aFprwFB+PQO9EsHHZsrDxARb0uYNBYn9mr5oDFdBdPez4M8G1r5yidWbUcT9pNUc8AQXC9sGzlfauBfBxVOw==} peerDependencies: @@ -2211,10 +2089,6 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enhanced-resolve@5.16.0: - resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} - engines: {node: '>=10.13.0'} - enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -2238,10 +2112,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} - engines: {node: '>= 0.4'} - es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -2286,180 +2156,35 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-next@14.1.4: - resolution: {integrity: sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - eslint-config-prettier@9.1.0: resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' - eslint-config-turbo@1.13.2: - resolution: {integrity: sha512-TzvsMwNJx/P4JYw79iFqbyQApnyT050gW7dBxnNeNVl3pVMnT2rwaFo9Q3Hc49Tp5NANxEwYN9RStF50P/IwGA==} - peerDependencies: - eslint: '>6.6.0' - - eslint-import-resolver-alias@1.1.2: - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + eslint-plugin-prettier@5.1.3: + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-eslint-comments@3.2.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jest@27.9.0: - resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: + '@types/eslint': optional: true - - eslint-plugin-jsx-a11y@6.8.0: - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-no-type-assertion@1.3.0: - resolution: {integrity: sha512-04wuuIP5ptNzp969tTt0gf/Jsw4G0T5md2/nbgv3dRL/HySSNU7H4vIKNjkuno9T+6h2daj1T9Aki6bDgmXDEw==} - engines: {node: '>=12.0.0', yarn: ^1.13.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - eslint-plugin-playwright@1.5.4: - resolution: {integrity: sha512-J38Wy3Vc2f9y73J+KRmgXgbYI8TZ3zbz6qBbTj3PhpFndUS572jZ7kqQ3rJ9si5BaMHT7lmZzraO+3UjwIDV4Q==} - engines: {node: '>=16.6.0'} - peerDependencies: - eslint: '>=8.40.0' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: + eslint-config-prettier: optional: true - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react@7.34.1: - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-simple-import-sort@12.0.0: - resolution: {integrity: sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==} + eslint-plugin-simple-import-sort@12.1.0: + resolution: {integrity: sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==} peerDependencies: eslint: '>=5.0.0' - eslint-plugin-testing-library@6.2.0: - resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - - eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - - eslint-plugin-turbo@1.13.2: - resolution: {integrity: sha512-QNaihF0hTRjfOBd1SLHrftm8V3pOU35CNS/C0/Z6qY1xxdL1PSv4IctEIldSMX7/A1jOPYwMPO7wYwPXgjgp/g==} - peerDependencies: - eslint: '>6.6.0' - - eslint-plugin-unicorn@51.0.1: - resolution: {integrity: sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.56.0' - - eslint-plugin-vitest@0.3.26: - resolution: {integrity: sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg==} - engines: {node: ^18.0.0 || >= 20.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': '*' - eslint: '>=8.0.0' - vitest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - vitest: - optional: true - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.0.1: resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2468,13 +2193,8 @@ packages: resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - eslint@9.0.0: - resolution: {integrity: sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==} + eslint@9.4.0: + resolution: {integrity: sha512-sjc7Y8cUD1IlwYcTS9qPSvGjAC8Ne9LctpxKKu3x/1IC9bnOg98Zy6GxEJUfr1NojMgVPlyANXYns8oE2c1TAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -2482,10 +2202,6 @@ packages: resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -2499,10 +2215,6 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2548,6 +2260,9 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -2561,8 +2276,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -2579,10 +2294,6 @@ packages: resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} engines: {node: '>=14'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -2594,6 +2305,10 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} @@ -2612,17 +2327,10 @@ packages: find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -2717,10 +2425,6 @@ packages: resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} engines: {node: '>=4'} - get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -2737,9 +2441,6 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} - get-uri@6.0.3: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} engines: {node: '>= 14'} @@ -2748,9 +2449,6 @@ packages: resolution: {integrity: sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==} engines: {node: '>=0.10.0'} - git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - gitmoji-cli@9.2.0: resolution: {integrity: sha512-U/uKNO+Z4tcFdP5Ip2FBihsGgTvyX8RJVx4twgnv6JB+MKcvqjIE2RiJvxE2uu7dq4wafTzGDpHL3KDiJV1hxQ==} engines: {node: '>=18'} @@ -2764,9 +2462,9 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} + glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + engines: {node: '>=16 || 14 >=14.18'} hasBin: true glob@7.2.3: @@ -2784,26 +2482,22 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + globals@15.4.0: + resolution: {integrity: sha512-unnwvMZpv0eDUyjNyh9DH/yxUaRYrEjW/qK4QcdrHg3oO11igUQrCSgODHEqxlKg8v2CD2Sd7UkqqEBoz5U7TQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -2938,10 +2632,6 @@ packages: resolution: {integrity: sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==} engines: {node: '>=10'} - ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} @@ -3021,10 +2711,6 @@ packages: is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -3036,10 +2722,6 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -3063,9 +2745,6 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -3074,10 +2753,6 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -3102,9 +2777,6 @@ packages: is-lower-case@1.1.3: resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} - is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -3133,10 +2805,6 @@ packages: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} @@ -3148,9 +2816,6 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} - is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - is-shared-array-buffer@1.0.3: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} @@ -3197,15 +2862,9 @@ packages: is-upper-case@1.1.2: resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} - is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -3240,11 +2899,8 @@ packages: resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} - iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + jackspeak@3.4.0: + resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} engines: {node: '>=14'} jake@10.8.7: @@ -3381,9 +3037,6 @@ packages: node-notifier: optional: true - jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3398,20 +3051,11 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -3430,10 +3074,6 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -3453,10 +3093,6 @@ packages: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - jwa@1.4.1: resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} @@ -3478,13 +3114,6 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} @@ -3592,8 +3221,8 @@ packages: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} lru-cache@4.1.5: @@ -3602,10 +3231,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} @@ -3660,6 +3285,10 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -3704,10 +3333,6 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} @@ -3719,8 +3344,8 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} mixme@0.5.10: @@ -3760,18 +3385,21 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - next@14.1.4: - resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} + next@14.2.3: + resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 react: ^18.2.0 react-dom: ^18.2.0 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': optional: true + '@playwright/test': + optional: true sass: optional: true @@ -3846,30 +3474,6 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} - engines: {node: '>= 0.4'} - - object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3881,8 +3485,8 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} ora@5.4.1: @@ -4010,9 +3614,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -4021,6 +3625,9 @@ packages: picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -4044,10 +3651,6 @@ packages: resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==} engines: {node: '>=12'} - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -4063,29 +3666,25 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} - preferred-pm@3.1.2: - resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} + preferred-pm@3.1.3: + resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} engines: {node: '>=10'} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-packagejson@2.4.14: - resolution: {integrity: sha512-sli+gV5tW7uxvzDZQscaBtSfbyAW2ToL6n/HGt51PipwX9vI7M54vefG0mKSfklVkT29TNGO6Mo6g8c6Z79gmw==} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true - prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true @@ -4171,10 +3770,10 @@ packages: chart.js: ^3.5.0 react: ^16.8.0 || ^17.0.0 - react-dom@18.2.0: - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: - react: ^18.2.0 + react: ^18.3.1 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -4185,6 +3784,9 @@ packages: react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-select@5.8.0: resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} peerDependencies: @@ -4210,8 +3812,8 @@ packages: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} read-pkg-up@7.0.1: @@ -4245,20 +3847,12 @@ packages: reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} - engines: {node: '>= 0.4'} - regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} @@ -4271,10 +3865,6 @@ packages: resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} engines: {node: '>=12'} - regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4301,24 +3891,14 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} - resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} @@ -4342,13 +3922,9 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - - rimraf@5.0.5: - resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} - engines: {node: '>=14'} + rimraf@5.0.7: + resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==} + engines: {node: '>=14.18'} hasBin: true rollup@2.78.0: @@ -4384,8 +3960,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} semver-diff@4.0.0: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} @@ -4399,8 +3975,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true @@ -4414,10 +3990,6 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} - set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} - set-function-name@2.0.2: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} @@ -4468,10 +4040,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -4493,13 +4061,6 @@ packages: engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} deprecated: please use 2.7.4 or 2.8.1 to fix package-lock issue - sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - - sort-package-json@2.10.0: - resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} - hasBin: true - source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -4524,14 +4085,14 @@ packages: spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} split-on-first@1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} @@ -4582,10 +4143,6 @@ packages: resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} engines: {node: '>=18'} - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} - string.prototype.trim@1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} @@ -4693,14 +4250,10 @@ packages: swap-case@1.1.2: resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} - synckit@0.9.0: - resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} + synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -4750,12 +4303,13 @@ packages: peerDependencies: typescript: '>=4.2.0' - ts-jest@29.1.2: - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} + ts-jest@29.1.4: + resolution: {integrity: sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 '@jest/types': ^29.0.0 babel-jest: ^29.0.0 esbuild: '*' @@ -4764,6 +4318,8 @@ packages: peerDependenciesMeta: '@babel/core': optional: true + '@jest/transform': + optional: true '@jest/types': optional: true babel-jest: @@ -4785,24 +4341,18 @@ packages: '@swc/wasm': optional: true - tsc-alias@1.8.8: - resolution: {integrity: sha512-OYUOd2wl0H858NvABWr/BoSKNERw3N9GTi3rHPK8Iv4O1UyUXIrTTOAZNHsjlVpXFOhpJBVARI1s+rzwLivN3Q==} + tsc-alias@1.8.10: + resolution: {integrity: sha512-Ibv4KAWfFkFdKJxnWfVtdOmB0Zi1RJVxcbPGiCDsFpCQSsmpWyuzHG3rQyI5YkobWwxFPEyQfu1hdo4qLG2zPw==} hasBin: true - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} tty-table@4.2.3: resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} @@ -4855,10 +4405,6 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -4906,8 +4452,18 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typescript@5.4.4: - resolution: {integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==} + typescript-eslint@7.13.0: + resolution: {integrity: sha512-upO0AXxyBwJ4BbiC6CRgAJKtGYha2zw4m1g7TIVPSonwYEuf7vCicw3syjS1OxdDMTz96sZIXl3Jx3vWJLLKFw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true @@ -4942,6 +4498,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.0.16: + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + update-notifier@7.0.0: resolution: {integrity: sha512-Hv25Bh+eAbOLlsjJreVPOs4vd51rrtCrmhyOJtbpAojro34jS4KQaEp4/EvlHJX7jSO42VvEFpkastVyXyIsdQ==} engines: {node: '>=18'} @@ -5011,13 +4573,6 @@ packages: which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - - which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} @@ -5042,6 +4597,10 @@ packages: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -5088,9 +4647,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -5119,15 +4675,13 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zx@8.0.1: - resolution: {integrity: sha512-Y+ITW1GQjADk7qgrbhnukMgoNsJmlyx53cUQ6/6NXU+BMBdCbTc6flTOHUctmzKvPjTmdwaddzJY/dbLie9sQg==} - engines: {node: '>= 16.0.0'} + zx@8.1.2: + resolution: {integrity: sha512-zkCiXKh8D/eo6r58OmJvO5mc2NthcSRvysb3fuS6VQlHPbEPBcxduRwM3m6ZfHj+7cLHcrahCnuO2TDAbW+6xw==} + engines: {node: '>= 12.17.0'} hasBin: true snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} - '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -5138,8 +4692,15 @@ snapshots: '@babel/highlight': 7.24.2 picocolors: 1.0.0 + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + '@babel/compat-data@7.23.5': {} + '@babel/compat-data@7.24.7': {} + '@babel/core@7.24.4': dependencies: '@ampproject/remapping': 2.3.0 @@ -5153,20 +4714,32 @@ snapshots: '@babel/traverse': 7.24.1(supports-color@5.5.0) '@babel/types': 7.24.0 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.5 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@9.0.0)': + '@babel/core@7.24.7': dependencies: - '@babel/core': 7.24.4 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.0.0 - eslint-visitor-keys: 2.1.0 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helpers': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + convert-source-map: 2.0.0 + debug: 4.3.5 + gensync: 1.0.0-beta.2 + json5: 2.2.3 semver: 6.3.1 + transitivePeerDependencies: + - supports-color '@babel/generator@7.24.4': dependencies: @@ -5175,6 +4748,13 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.24.7': + dependencies: + '@babel/types': 7.24.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + '@babel/helper-annotate-as-pure@7.22.5': dependencies: '@babel/types': 7.24.0 @@ -5187,21 +4767,49 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.24.7': + dependencies: + '@babel/compat-data': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + browserslist: 4.23.1 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-environment-visitor@7.22.20': {} + '@babel/helper-environment-visitor@7.24.7': + dependencies: + '@babel/types': 7.24.7 + '@babel/helper-function-name@7.23.0': dependencies: '@babel/template': 7.24.0 '@babel/types': 7.24.0 + '@babel/helper-function-name@7.24.7': + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + '@babel/helper-hoist-variables@7.22.5': dependencies: '@babel/types': 7.24.0 + '@babel/helper-hoist-variables@7.24.7': + dependencies: + '@babel/types': 7.24.7 + '@babel/helper-module-imports@7.22.15': dependencies: '@babel/types': 7.24.0 + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -5211,22 +4819,50 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-plugin-utils@7.22.5': {} '@babel/helper-simple-access@7.22.5': dependencies: '@babel/types': 7.24.0 + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-split-export-declaration@7.22.6': dependencies: '@babel/types': 7.24.0 + '@babel/helper-split-export-declaration@7.24.7': + dependencies: + '@babel/types': 7.24.7 + '@babel/helper-string-parser@7.24.1': {} + '@babel/helper-string-parser@7.24.7': {} + '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-option@7.23.5': {} + '@babel/helper-validator-option@7.24.7': {} + '@babel/helpers@7.24.4': dependencies: '@babel/template': 7.24.0 @@ -5235,6 +4871,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helpers@7.24.7': + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + '@babel/highlight@7.24.2': dependencies: '@babel/helper-validator-identifier': 7.22.20 @@ -5242,10 +4883,21 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.0 + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + '@babel/parser@7.24.4': dependencies: '@babel/types': 7.24.0 + '@babel/parser@7.24.7': + dependencies: + '@babel/types': 7.24.7 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -5276,6 +4928,11 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -5320,12 +4977,22 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.24.7': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.24.0': dependencies: '@babel/code-frame': 7.24.2 '@babel/parser': 7.24.4 '@babel/types': 7.24.0 + '@babel/template@7.24.7': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + '@babel/traverse@7.24.1(supports-color@5.5.0)': dependencies: '@babel/code-frame': 7.24.2 @@ -5341,20 +5008,42 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.24.7': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.24.0': dependencies: '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + '@babel/types@7.24.7': + dependencies: + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + '@bcoe/v8-coverage@0.2.3': {} - '@changesets/apply-release-plan@7.0.0': + '@changesets/apply-release-plan@7.0.3': dependencies: - '@babel/runtime': 7.24.4 - '@changesets/config': 3.0.0 + '@babel/runtime': 7.24.7 + '@changesets/config': 3.0.1 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.0 + '@changesets/should-skip-package': 0.1.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 @@ -5363,16 +5052,17 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.6.0 + semver: 7.6.2 - '@changesets/assemble-release-plan@6.0.0': + '@changesets/assemble-release-plan@6.0.2': dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.7 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.0.0 + '@changesets/get-dependents-graph': 2.1.0 + '@changesets/should-skip-package': 0.1.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - semver: 7.6.0 + semver: 7.6.2 '@changesets/changelog-git@0.2.0': dependencies: @@ -5386,22 +5076,23 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/cli@2.27.1': + '@changesets/cli@2.27.5': dependencies: - '@babel/runtime': 7.24.4 - '@changesets/apply-release-plan': 7.0.0 - '@changesets/assemble-release-plan': 6.0.0 + '@babel/runtime': 7.24.7 + '@changesets/apply-release-plan': 7.0.3 + '@changesets/assemble-release-plan': 6.0.2 '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.0 + '@changesets/config': 3.0.1 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.0.0 - '@changesets/get-release-plan': 4.0.0 + '@changesets/get-dependents-graph': 2.1.0 + '@changesets/get-release-plan': 4.0.2 '@changesets/git': 3.0.0 '@changesets/logger': 0.1.0 '@changesets/pre': 2.0.0 '@changesets/read': 0.6.0 + '@changesets/should-skip-package': 0.1.0 '@changesets/types': 6.0.0 - '@changesets/write': 0.3.0 + '@changesets/write': 0.3.1 '@manypkg/get-packages': 1.1.3 '@types/semver': 7.5.8 ansi-colors: 4.1.3 @@ -5414,34 +5105,34 @@ snapshots: meow: 6.1.1 outdent: 0.5.0 p-limit: 2.3.0 - preferred-pm: 3.1.2 + preferred-pm: 3.1.3 resolve-from: 5.0.0 - semver: 7.6.0 + semver: 7.6.2 spawndamnit: 2.0.0 term-size: 2.2.1 tty-table: 4.2.3 - '@changesets/config@3.0.0': + '@changesets/config@3.0.1': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.0.0 + '@changesets/get-dependents-graph': 2.1.0 '@changesets/logger': 0.1.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - micromatch: 4.0.5 + micromatch: 4.0.7 '@changesets/errors@0.2.0': dependencies: extendable-error: 0.1.7 - '@changesets/get-dependents-graph@2.0.0': + '@changesets/get-dependents-graph@2.1.0': dependencies: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 chalk: 2.4.2 fs-extra: 7.0.1 - semver: 7.6.0 + semver: 7.6.2 '@changesets/get-github-info@0.6.0': dependencies: @@ -5450,11 +5141,11 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/get-release-plan@4.0.0': + '@changesets/get-release-plan@4.0.2': dependencies: - '@babel/runtime': 7.24.4 - '@changesets/assemble-release-plan': 6.0.0 - '@changesets/config': 3.0.0 + '@babel/runtime': 7.24.7 + '@changesets/assemble-release-plan': 6.0.2 + '@changesets/config': 3.0.1 '@changesets/pre': 2.0.0 '@changesets/read': 0.6.0 '@changesets/types': 6.0.0 @@ -5464,12 +5155,12 @@ snapshots: '@changesets/git@3.0.0': dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.7 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 - micromatch: 4.0.5 + micromatch: 4.0.7 spawndamnit: 2.0.0 '@changesets/logger@0.1.0': @@ -5483,7 +5174,7 @@ snapshots: '@changesets/pre@2.0.0': dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.7 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -5491,7 +5182,7 @@ snapshots: '@changesets/read@0.6.0': dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.7 '@changesets/git': 3.0.0 '@changesets/logger': 0.1.0 '@changesets/parse': 0.4.0 @@ -5500,13 +5191,19 @@ snapshots: fs-extra: 7.0.1 p-filter: 2.1.0 + '@changesets/should-skip-package@0.1.0': + dependencies: + '@babel/runtime': 7.24.7 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + '@changesets/types@4.1.0': {} '@changesets/types@6.0.0': {} - '@changesets/write@0.3.0': + '@changesets/write@0.3.1': dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.7 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 @@ -5546,19 +5243,19 @@ snapshots: '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.3(@types/react@18.2.75)(react@18.2.0)': + '@emotion/react@11.11.3(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.4 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 - react: 18.2.0 + react: 18.3.1 optionalDependencies: - '@types/react': 18.2.75 + '@types/react': 18.3.3 '@emotion/serialize@1.1.3': dependencies: @@ -5576,44 +5273,33 @@ snapshots: '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0)': + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.3.1)': dependencies: - react: 18.2.0 + react: 18.3.1 '@emotion/utils@1.2.1': {} '@emotion/weak-memoize@0.3.1': {} - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.4.0(eslint@9.0.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.4.0)': dependencies: - eslint: 9.0.0 + eslint: 9.4.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} + '@eslint-community/regexpp@4.10.1': {} - '@eslint/eslintrc@2.1.4': + '@eslint/config-array@0.15.1': dependencies: - ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 + '@eslint/object-schema': 2.1.3 + debug: 4.3.5 minimatch: 3.1.2 - strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.0.2': + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.5 espree: 10.0.1 globals: 14.0.0 ignore: 5.3.1 @@ -5624,9 +5310,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@9.4.0': {} - '@eslint/js@9.0.0': {} + '@eslint/object-schema@2.1.3': {} '@floating-ui/core@0.3.1': {} @@ -5643,12 +5329,12 @@ snapshots: '@floating-ui/core': 1.5.3 '@floating-ui/utils': 0.2.1 - '@floating-ui/react-dom@0.4.3(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@floating-ui/react-dom@0.4.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/dom': 0.1.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.75)(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.3)(react@18.3.1) transitivePeerDependencies: - '@types/react' @@ -5677,25 +5363,9 @@ snapshots: qs: 6.11.2 xcase: 2.0.1 - '@humanwhocodes/config-array@0.11.14': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4(supports-color@5.5.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/config-array@0.12.3': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4(supports-color@5.5.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.0': {} '@isaacs/cliui@8.0.2': dependencies: @@ -5725,7 +5395,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -5739,7 +5409,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) + jest-config: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -5900,46 +5570,46 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@ledgerhq/crypto-icons-ui@1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(styled-system@5.1.5)': + '@ledgerhq/crypto-icons-ui@1.1.0(@types/react@18.3.3)(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(styled-system@5.1.5)': dependencies: - react: 18.2.0 - styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) + react: 18.3.1 + styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) styled-system: 5.1.5 optionalDependencies: - '@types/react': 18.2.75 + '@types/react': 18.3.3 - '@ledgerhq/icons-ui@0.6.3(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(styled-system@5.1.5)': + '@ledgerhq/icons-ui@0.6.3(@types/react@18.3.3)(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(styled-system@5.1.5)': dependencies: - react: 18.2.0 - styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) + react: 18.3.1 + styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) styled-system: 5.1.5 optionalDependencies: - '@types/react': 18.2.75 + '@types/react': 18.3.3 - '@ledgerhq/react-ui@0.14.16(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))': + '@ledgerhq/react-ui@0.14.16(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))': dependencies: - '@floating-ui/react-dom': 0.4.3(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@ledgerhq/crypto-icons-ui': 1.1.0(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(styled-system@5.1.5) - '@ledgerhq/icons-ui': 0.6.3(@types/react@18.2.75)(react@18.2.0)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(styled-system@5.1.5) + '@floating-ui/react-dom': 0.4.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ledgerhq/crypto-icons-ui': 1.1.0(@types/react@18.3.3)(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(styled-system@5.1.5) + '@ledgerhq/icons-ui': 0.6.3(@types/react@18.3.3)(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(styled-system@5.1.5) '@ledgerhq/ui-shared': 0.2.1 - '@tippyjs/react': 4.2.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tippyjs/react': 4.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) chart.js: 3.9.1 chartjs-adapter-moment: 1.0.1(chart.js@3.9.1)(moment@2.30.1) color: 4.2.3 - embla-carousel-react: 8.0.0-rc17(react@18.2.0) + embla-carousel-react: 8.0.0-rc17(react@18.3.1) moment: 2.30.1 - react: 18.2.0 - react-chartjs-2: 3.3.0(chart.js@3.9.1)(react@18.2.0) - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-chartjs-2: 3.3.0(chart.js@3.9.1)(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) react-is: 17.0.2 - react-select: 5.8.0(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-spring: 8.0.27(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-window: 1.8.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) + react-select: 5.8.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-spring: 8.0.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-window: 1.8.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) styled-system: 5.1.5 optionalDependencies: - '@types/react': 18.2.75 + '@types/react': 18.3.3 '@ledgerhq/ui-shared@0.2.1': {} @@ -5949,66 +5619,49 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.7 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.7 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - '@microsoft/tsdoc-config@0.16.2': - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 - - '@microsoft/tsdoc@0.14.2': {} - - '@next/env@14.1.4': {} - - '@next/eslint-plugin-next@14.1.4': - dependencies: - glob: 10.3.10 + '@next/env@14.2.3': {} - '@next/swc-darwin-arm64@14.1.4': + '@next/swc-darwin-arm64@14.2.3': optional: true - '@next/swc-darwin-x64@14.1.4': + '@next/swc-darwin-x64@14.2.3': optional: true - '@next/swc-linux-arm64-gnu@14.1.4': + '@next/swc-linux-arm64-gnu@14.2.3': optional: true - '@next/swc-linux-arm64-musl@14.1.4': + '@next/swc-linux-arm64-musl@14.2.3': optional: true - '@next/swc-linux-x64-gnu@14.1.4': + '@next/swc-linux-x64-gnu@14.2.3': optional: true - '@next/swc-linux-x64-musl@14.1.4': + '@next/swc-linux-x64-musl@14.2.3': optional: true - '@next/swc-win32-arm64-msvc@14.1.4': + '@next/swc-win32-arm64-msvc@14.2.3': optional: true - '@next/swc-win32-ia32-msvc@14.1.4': + '@next/swc-win32-ia32-msvc@14.2.3': optional: true - '@next/swc-win32-x64-msvc@14.1.4': + '@next/swc-win32-x64-msvc@14.2.3': optional: true - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -6019,7 +5672,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 '@octokit/auth-token@2.5.0': dependencies: @@ -6136,8 +5789,6 @@ snapshots: optionalDependencies: rollup: 2.78.0 - '@rushstack/eslint-patch@1.10.1': {} - '@sentry-internal/feedback@7.109.0': dependencies: '@sentry/core': 7.109.0 @@ -6203,20 +5854,20 @@ snapshots: '@sentry/types': 6.19.7 tslib: 1.14.1 - '@sentry/nextjs@7.109.0(next@14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0)': + '@sentry/nextjs@7.109.0(next@14.2.3(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0) '@sentry/core': 7.109.0 '@sentry/integrations': 7.109.0 '@sentry/node': 7.109.0 - '@sentry/react': 7.109.0(react@18.2.0) + '@sentry/react': 7.109.0(react@18.3.1) '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 '@sentry/vercel-edge': 7.109.0 '@sentry/webpack-plugin': 1.21.0 chalk: 3.0.0 - next: 14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react: 18.2.0 + next: 14.2.3(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 resolve: 1.22.8 rollup: 2.78.0 stacktrace-parser: 0.1.10 @@ -6231,14 +5882,14 @@ snapshots: '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 - '@sentry/react@7.109.0(react@18.2.0)': + '@sentry/react@7.109.0(react@18.3.1)': dependencies: '@sentry/browser': 7.109.0 '@sentry/core': 7.109.0 '@sentry/types': 7.109.0 '@sentry/utils': 7.109.0 hoist-non-react-statics: 3.3.2 - react: 18.2.0 + react: 18.3.1 '@sentry/replay@7.109.0': dependencies: @@ -6340,9 +5991,12 @@ snapshots: '@styled-system/core': 5.1.2 '@styled-system/css': 5.1.5 - '@swc/helpers@0.5.2': + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.5': dependencies: - tslib: 2.6.2 + '@swc/counter': 0.1.3 + tslib: 2.6.3 '@szmarczak/http-timer@4.0.6': dependencies: @@ -6352,10 +6006,10 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tippyjs/react@4.2.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@tippyjs/react@4.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) tippy.js: 6.3.7 '@tootallnate/once@2.0.0': {} @@ -6400,11 +6054,6 @@ snapshots: '@types/node': 20.12.7 '@types/responselike': 1.0.3 - '@types/eslint@8.56.7': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - '@types/estree@1.0.5': {} '@types/fs-extra@11.0.4': @@ -6419,7 +6068,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.5': dependencies: - '@types/react': 18.2.75 + '@types/react': 18.3.3 hoist-non-react-statics: 3.3.2 '@types/http-cache-semantics@4.0.4': {} @@ -6441,8 +6090,6 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/json5@0.0.29': {} - '@types/jsonfile@6.1.4': dependencies: '@types/node': 20.12.7 @@ -6462,21 +6109,25 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@20.14.2': + dependencies: + undici-types: 5.26.5 + '@types/normalize-package-data@2.4.4': {} '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.12': {} - '@types/react-dom@18.2.24': + '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.2.75 + '@types/react': 18.3.3 '@types/react-transition-group@4.4.10': dependencies: - '@types/react': 18.2.75 + '@types/react': 18.3.3 - '@types/react@18.2.75': + '@types/react@18.3.3': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -6492,7 +6143,7 @@ snapshots: '@types/styled-components@5.1.34': dependencies: '@types/hoist-non-react-statics': 3.3.5 - '@types/react': 18.2.75 + '@types/react': 18.3.3 csstype: 3.1.3 '@types/uuid@9.0.8': {} @@ -6505,254 +6156,87 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4)': + '@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) - '@typescript-eslint/scope-manager': 7.6.0 - '@typescript-eslint/type-utils': 7.6.0(eslint@9.0.0)(typescript@5.4.4) - '@typescript-eslint/utils': 7.6.0(eslint@9.0.0)(typescript@5.4.4) - '@typescript-eslint/visitor-keys': 7.6.0 - debug: 4.3.4(supports-color@5.5.0) - eslint: 9.0.0 + '@eslint-community/regexpp': 4.10.1 + '@typescript-eslint/parser': 7.13.0(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.13.0 + '@typescript-eslint/type-utils': 7.13.0(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.13.0(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.13.0 + eslint: 9.4.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.4) + ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: - typescript: 5.4.4 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4)': + '@typescript-eslint/parser@7.13.0(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4(supports-color@5.5.0) - eslint: 9.0.0 + '@typescript-eslint/scope-manager': 7.13.0 + '@typescript-eslint/types': 7.13.0 + '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.13.0 + debug: 4.3.5 + eslint: 9.4.0 optionalDependencies: - typescript: 5.4.4 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4)': + '@typescript-eslint/scope-manager@7.13.0': dependencies: - '@typescript-eslint/scope-manager': 7.6.0 - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) - '@typescript-eslint/visitor-keys': 7.6.0 - debug: 4.3.4(supports-color@5.5.0) - eslint: 9.0.0 + '@typescript-eslint/types': 7.13.0 + '@typescript-eslint/visitor-keys': 7.13.0 + + '@typescript-eslint/type-utils@7.13.0(eslint@9.4.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.13.0(eslint@9.4.0)(typescript@5.4.5) + debug: 4.3.5 + eslint: 9.4.0 + ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: - typescript: 5.4.4 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types@7.13.0': {} - '@typescript-eslint/scope-manager@6.21.0': + '@typescript-eslint/typescript-estree@7.13.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - - '@typescript-eslint/scope-manager@7.5.0': - dependencies: - '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/visitor-keys': 7.5.0 - - '@typescript-eslint/scope-manager@7.6.0': - dependencies: - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/visitor-keys': 7.6.0 - - '@typescript-eslint/type-utils@7.6.0(eslint@9.0.0)(typescript@5.4.4)': - dependencies: - '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) - '@typescript-eslint/utils': 7.6.0(eslint@9.0.0)(typescript@5.4.4) - debug: 4.3.4(supports-color@5.5.0) - eslint: 9.0.0 - ts-api-utils: 1.3.0(typescript@5.4.4) - optionalDependencies: - typescript: 5.4.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@5.62.0': {} - - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/types@7.5.0': {} - - '@typescript-eslint/types@7.6.0': {} - - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.4)': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.4) - optionalDependencies: - typescript: 5.4.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.4)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.4) - optionalDependencies: - typescript: 5.4.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.4)': - dependencies: - '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/visitor-keys': 7.5.0 - debug: 4.3.4(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.4) - optionalDependencies: - typescript: 5.4.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.4)': - dependencies: - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/visitor-keys': 7.6.0 - debug: 4.3.4(supports-color@5.5.0) + '@typescript-eslint/types': 7.13.0 + '@typescript-eslint/visitor-keys': 7.13.0 + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.4) + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: - typescript: 5.4.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@5.62.0(eslint@9.0.0)(typescript@5.4.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.4) - eslint: 9.0.0 - eslint-scope: 5.1.1 - semver: 7.6.0 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/utils@7.5.0(eslint@9.0.0)(typescript@5.4.4)': + '@typescript-eslint/utils@7.13.0(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.5.0 - '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4) - eslint: 9.0.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@7.6.0(eslint@9.0.0)(typescript@5.4.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.6.0 - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) - eslint: 9.0.0 - semver: 7.6.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) + '@typescript-eslint/scope-manager': 7.13.0 + '@typescript-eslint/types': 7.13.0 + '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) + eslint: 9.4.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@5.62.0': + '@typescript-eslint/visitor-keys@7.13.0': dependencies: - '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/types': 7.13.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@7.5.0': - dependencies: - '@typescript-eslint/types': 7.5.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@7.6.0': - dependencies: - '@typescript-eslint/types': 7.6.0 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - - '@vercel/style-guide@6.0.0(@next/eslint-plugin-next@14.1.4)(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(prettier@3.2.5)(typescript@5.4.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@9.0.0) - '@rushstack/eslint-patch': 1.10.1 - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4) - '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) - eslint-config-prettier: 9.1.0(eslint@9.0.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.0.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4) - eslint-plugin-jsx-a11y: 6.8.0(eslint@9.0.0) - eslint-plugin-playwright: 1.5.4(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4))(eslint@9.0.0) - eslint-plugin-react: 7.34.1(eslint@9.0.0) - eslint-plugin-react-hooks: 4.6.0(eslint@9.0.0) - eslint-plugin-testing-library: 6.2.0(eslint@9.0.0)(typescript@5.4.4) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 51.0.1(eslint@9.0.0) - eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4) - prettier-plugin-packagejson: 2.4.14(prettier@3.2.5) - optionalDependencies: - '@next/eslint-plugin-next': 14.1.4 - eslint: 9.0.0 - prettier: 3.2.5 - typescript: 5.4.4 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - jest - - supports-color - - vitest - - acorn-jsx@5.3.2(acorn@8.11.2): - dependencies: - acorn: 8.11.2 - acorn-jsx@5.3.2(acorn@8.11.3): dependencies: acorn: 8.11.3 @@ -6836,52 +6320,13 @@ snapshots: argparse@2.0.1: {} - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 - array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - array-includes@3.1.7: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - array-union@2.1.0: {} - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - array.prototype.findlastindex@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.7 @@ -6889,28 +6334,6 @@ snapshots: es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - array.prototype.toreversed@1.1.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - array.prototype.tosorted@1.1.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 @@ -6924,8 +6347,6 @@ snapshots: arrify@1.0.1: {} - ast-types-flow@0.0.8: {} - ast-types@0.13.4: dependencies: tslib: 2.6.2 @@ -6957,12 +6378,6 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axe-core@4.7.0: {} - - axobject-query@3.2.1: - dependencies: - dequal: 2.0.3 - babel-jest@29.7.0(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 @@ -6999,14 +6414,14 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.8 - babel-plugin-styled-components@2.1.4(@babel/core@7.24.4)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)): + babel-plugin-styled-components@2.1.4(@babel/core@7.24.7)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)): dependencies: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.15 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.7) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) transitivePeerDependencies: - '@babel/core' @@ -7044,7 +6459,7 @@ snapshots: dependencies: is-windows: 1.0.2 - binary-extensions@2.2.0: {} + binary-extensions@2.3.0: {} bl@4.1.0: dependencies: @@ -7076,6 +6491,10 @@ snapshots: dependencies: fill-range: 7.0.1 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + breakword@1.0.6: dependencies: wcwidth: 1.0.1 @@ -7087,6 +6506,13 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) + browserslist@4.23.1: + dependencies: + caniuse-lite: 1.0.30001632 + electron-to-chromium: 1.4.798 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.1) + bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 @@ -7104,8 +6530,6 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - builtin-modules@3.3.0: {} - busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -7165,7 +6589,7 @@ snapshots: caniuse-lite@1.0.30001607: {} - caniuse-lite@1.0.30001608: {} + caniuse-lite@1.0.30001632: {} chalk@2.3.0: dependencies: @@ -7223,10 +6647,10 @@ snapshots: chart.js: 3.9.1 moment: 2.30.1 - chokidar@3.5.3: + chokidar@3.6.0: dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -7237,14 +6661,8 @@ snapshots: ci-info@3.9.0: {} - ci-info@4.0.0: {} - cjs-module-lexer@1.2.3: {} - clean-regexp@1.0.0: - dependencies: - escape-string-regexp: 1.0.5 - cli-boxes@3.0.0: {} cli-cursor@3.1.0: @@ -7340,7 +6758,7 @@ snapshots: dot-prop: 8.0.2 env-paths: 3.0.0 json-schema-typed: 8.0.1 - semver: 7.6.0 + semver: 7.6.2 uint8array-extras: 0.3.0 config-chain@1.1.13: @@ -7365,10 +6783,6 @@ snapshots: convert-source-map@2.0.0: {} - core-js-compat@3.36.1: - dependencies: - browserslist: 4.23.0 - core-js@3.36.0: {} cosmiconfig@7.1.0: @@ -7379,13 +6793,13 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - create-jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)): + create-jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) + jest-config: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -7435,8 +6849,6 @@ snapshots: csv-stringify: 5.6.5 stream-transform: 2.1.3 - damerau-levenshtein@1.0.8: {} - danger@11.3.1: dependencies: '@gitbeaker/core': 35.8.1 @@ -7513,16 +6925,16 @@ snapshots: dependencies: mimic-fn: 4.0.0 - debug@3.2.7: - dependencies: - ms: 2.1.3 - debug@4.3.4(supports-color@5.5.0): dependencies: ms: 2.1.2 optionalDependencies: supports-color: 5.5.0 + debug@4.3.5: + dependencies: + ms: 2.1.2 + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 @@ -7578,16 +6990,10 @@ snapshots: deprecation@2.3.1: {} - dequal@2.0.3: {} - detect-indent@6.1.0: {} - detect-indent@7.0.1: {} - detect-newline@3.1.0: {} - detect-newline@4.0.1: {} - diff-sequences@29.6.3: {} diff@4.0.2: {} @@ -7596,14 +7002,6 @@ snapshots: dependencies: path-type: 4.0.0 - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.24.4 @@ -7621,8 +7019,6 @@ snapshots: dependencies: type-fest: 3.13.1 - dotenv@16.0.3: {} - dotenv@8.6.0: {} eastasianwidth@0.2.0: {} @@ -7637,11 +7033,13 @@ snapshots: electron-to-chromium@1.4.729: {} - embla-carousel-react@8.0.0-rc17(react@18.2.0): + electron-to-chromium@1.4.798: {} + + embla-carousel-react@8.0.0-rc17(react@18.3.1): dependencies: embla-carousel: 8.0.0-rc17 embla-carousel-reactive-utils: 8.0.0-rc17(embla-carousel@8.0.0-rc17) - react: 18.2.0 + react: 18.3.1 embla-carousel-reactive-utils@8.0.0-rc17(embla-carousel@8.0.0-rc17): dependencies: @@ -7661,11 +7059,6 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.16.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -7694,7 +7087,7 @@ snapshots: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -7732,23 +7125,6 @@ snapshots: es-errors@1.3.0: {} - es-iterator-helpers@1.0.18: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.2 - safe-array-concat: 1.1.2 - es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -7789,360 +7165,47 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-next@14.1.4(eslint@9.0.0)(typescript@5.4.4): - dependencies: - '@next/eslint-plugin-next': 14.1.4 - '@rushstack/eslint-patch': 1.10.1 - '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) - eslint: 9.0.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@9.0.0) - eslint-plugin-react: 7.34.1(eslint@9.0.0) - eslint-plugin-react-hooks: 4.6.0(eslint@9.0.0) - optionalDependencies: - typescript: 5.4.4 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color - - eslint-config-prettier@9.1.0(eslint@9.0.0): - dependencies: - eslint: 9.0.0 - - eslint-config-turbo@1.13.2(eslint@9.0.0): - dependencies: - eslint: 9.0.0 - eslint-plugin-turbo: 1.13.2(eslint@9.0.0) - - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)): - dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0): - dependencies: - debug: 4.3.4(supports-color@5.5.0) - enhanced-resolve: 5.16.0 - eslint: 9.0.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.3 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0): - dependencies: - debug: 4.3.4(supports-color@5.5.0) - enhanced-resolve: 5.16.0 - eslint: 9.0.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.3 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) - eslint: 9.0.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) - eslint: 9.0.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0) - transitivePeerDependencies: - - supports-color - - eslint-plugin-eslint-comments@3.2.0(eslint@9.0.0): - dependencies: - escape-string-regexp: 1.0.5 - eslint: 9.0.0 - ignore: 5.3.0 - - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.0.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0) - hasown: 2.0.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.4.4) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.0.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint-plugin-import@2.29.1)(eslint@9.0.0))(eslint@9.0.0) - hasown: 2.0.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.4.4) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4): - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@9.0.0)(typescript@5.4.4) - eslint: 9.0.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4) - jest: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-jsx-a11y@6.8.0(eslint@9.0.0): - dependencies: - '@babel/runtime': 7.24.4 - aria-query: 5.3.0 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.18 - eslint: 9.0.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - - eslint-plugin-no-type-assertion@1.3.0(eslint@9.0.0): - dependencies: - eslint: 9.0.0 - - eslint-plugin-playwright@1.5.4(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4))(eslint@9.0.0): - dependencies: - eslint: 9.0.0 - globals: 13.24.0 - optionalDependencies: - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4) - - eslint-plugin-react-hooks@4.6.0(eslint@9.0.0): - dependencies: - eslint: 9.0.0 - - eslint-plugin-react@7.34.1(eslint@9.0.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 - array.prototype.toreversed: 1.1.2 - array.prototype.tosorted: 1.1.3 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 - eslint: 9.0.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - object.hasown: 1.1.4 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.11 - - eslint-plugin-simple-import-sort@12.0.0(eslint@9.0.0): - dependencies: - eslint: 9.0.0 - - eslint-plugin-testing-library@6.2.0(eslint@9.0.0)(typescript@5.4.4): - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@9.0.0)(typescript@5.4.4) - eslint: 9.0.0 - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-tsdoc@0.2.17: - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - - eslint-plugin-turbo@1.13.2(eslint@9.0.0): - dependencies: - dotenv: 16.0.3 - eslint: 9.0.0 - - eslint-plugin-unicorn@51.0.1(eslint@9.0.0): - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - '@eslint/eslintrc': 2.1.4 - ci-info: 4.0.0 - clean-regexp: 1.0.0 - core-js-compat: 3.36.1 - eslint: 9.0.0 - esquery: 1.5.0 - indent-string: 4.0.0 - is-builtin-module: 3.2.1 - jsesc: 3.0.2 - pluralize: 8.0.0 - read-pkg-up: 7.0.1 - regexp-tree: 0.1.27 - regjsparser: 0.10.0 - semver: 7.6.0 - strip-indent: 3.0.0 - transitivePeerDependencies: - - supports-color - - eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4): + eslint-config-prettier@9.1.0(eslint@9.4.0): dependencies: - '@typescript-eslint/utils': 7.5.0(eslint@9.0.0)(typescript@5.4.4) - eslint: 9.0.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.4.4))(eslint@9.0.0)(typescript@5.4.4) - transitivePeerDependencies: - - supports-color - - typescript + eslint: 9.4.0 + optional: true - eslint-scope@5.1.1: + eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@9.4.0))(eslint@9.4.0)(prettier@3.3.2): dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 + eslint: 9.4.0 + prettier: 3.3.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.8 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@9.4.0) - eslint-scope@7.2.2: + eslint-plugin-simple-import-sort@12.1.0(eslint@9.4.0): dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 + eslint: 9.4.0 eslint-scope@8.0.1: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-visitor-keys@2.1.0: {} - eslint-visitor-keys@3.4.3: {} eslint-visitor-keys@4.0.0: {} - eslint@8.57.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - eslint@9.0.0: + eslint@9.4.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 3.0.2 - '@eslint/js': 9.0.0 - '@humanwhocodes/config-array': 0.12.3 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) + '@eslint-community/regexpp': 4.10.1 + '@eslint/config-array': 0.15.1 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.4.0 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.5 escape-string-regexp: 4.0.0 eslint-scope: 8.0.1 eslint-visitor-keys: 4.0.0 @@ -8153,7 +7216,6 @@ snapshots: file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - graphemer: 1.4.0 ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 @@ -8163,7 +7225,7 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: @@ -8175,12 +7237,6 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 4.0.0 - espree@9.6.1: - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} esquery@1.5.0: @@ -8191,8 +7247,6 @@ snapshots: dependencies: estraverse: 5.3.0 - estraverse@4.3.0: {} - estraverse@5.3.0: {} estree-walker@2.0.2: {} @@ -8251,6 +7305,8 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-diff@1.3.0: {} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8265,7 +7321,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.15.0: + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -8287,10 +7343,6 @@ snapshots: escape-string-regexp: 5.0.0 is-unicode-supported: 1.3.0 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -8303,6 +7355,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + filter-obj@1.1.0: {} find-root@1.1.0: {} @@ -8319,22 +7375,14 @@ snapshots: find-yarn-workspace-root2@1.2.16: dependencies: - micromatch: 4.0.5 + micromatch: 4.0.7 pkg-dir: 4.2.0 - flat-cache@3.2.0: - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - flat-cache@4.0.1: dependencies: flatted: 3.3.1 keyv: 4.5.4 - flatted@3.2.9: {} - flatted@3.3.1: {} for-each@0.3.3: @@ -8426,8 +7474,6 @@ snapshots: get-stdin@6.0.0: {} - get-stdin@9.0.0: {} - get-stream@5.2.0: dependencies: pump: 3.0.0 @@ -8442,10 +7488,6 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.3: - dependencies: - resolve-pkg-maps: 1.0.0 - get-uri@6.0.3: dependencies: basic-ftp: 5.0.4 @@ -8461,8 +7503,6 @@ snapshots: fs-exists-sync: 0.1.0 homedir-polyfill: 1.0.3 - git-hooks-list@3.1.0: {} - gitmoji-cli@9.2.0: dependencies: chalk: 5.3.0 @@ -8489,13 +7529,13 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.10: + glob@10.4.1: dependencies: foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.1 + jackspeak: 3.4.0 + minimatch: 9.0.4 + minipass: 7.1.2 + path-scurry: 1.11.1 glob@7.2.3: dependencies: @@ -8520,32 +7560,23 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - globals@14.0.0: {} - globalthis@1.0.3: + globals@15.4.0: {} + + globalthis@1.0.4: dependencies: define-properties: 1.2.1 + gopd: 1.0.1 globby@11.1.0: dependencies: array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 - - globby@13.2.2: - dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 ignore: 5.3.1 merge2: 1.4.1 - slash: 4.0.0 + slash: 3.0.0 gopd@1.0.1: dependencies: @@ -8708,8 +7739,6 @@ snapshots: dependencies: minimatch: 3.1.2 - ignore@5.3.0: {} - ignore@5.3.1: {} immediate@3.0.6: {} @@ -8774,7 +7803,7 @@ snapshots: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.4 + side-channel: 1.0.6 inversify-logger-middleware@3.1.0: dependencies: @@ -8796,27 +7825,19 @@ snapshots: is-arrayish@0.3.2: {} - is-async-function@2.0.0: - dependencies: - has-tostringtag: 1.0.2 - is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 is-binary-path@2.1.0: dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 - is-callable@1.2.7: {} is-core-module@2.13.1: @@ -8835,18 +7856,10 @@ snapshots: is-extglob@2.1.1: {} - is-finalizationregistry@1.0.2: - dependencies: - call-bind: 1.0.7 - is-fullwidth-code-point@3.0.0: {} is-generator-fn@2.1.0: {} - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -8866,8 +7879,6 @@ snapshots: dependencies: lower-case: 1.1.4 - is-map@2.0.2: {} - is-negative-zero@2.0.3: {} is-npm@6.0.0: {} @@ -8884,8 +7895,6 @@ snapshots: is-plain-obj@1.1.0: {} - is-plain-obj@4.1.0: {} - is-plain-object@5.0.0: {} is-reference@1.2.1: @@ -8897,8 +7906,6 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 - is-set@2.0.2: {} - is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 @@ -8935,17 +7942,10 @@ snapshots: dependencies: upper-case: 1.1.3 - is-weakmap@2.0.1: {} - is-weakref@1.0.2: dependencies: call-bind: 1.0.7 - is-weakset@2.0.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-windows@1.0.2: {} isarray@2.0.5: {} @@ -8970,7 +7970,7 @@ snapshots: '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.0 + semver: 7.6.2 transitivePeerDependencies: - supports-color @@ -8982,7 +7982,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.5 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -8993,15 +7993,7 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - iterator.prototype@1.1.2: - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 - - jackspeak@2.3.6: + jackspeak@3.4.0: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -9046,16 +8038,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)): + jest-cli@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) + create-jest: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) + jest-config: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -9065,7 +8057,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)): + jest-config@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): dependencies: '@babel/core': 7.24.4 '@jest/test-sequencer': 29.7.0 @@ -9091,7 +8083,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.12.7 - ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.4) + ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -9271,7 +8263,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.0 + semver: 7.6.2 transitivePeerDependencies: - supports-color @@ -9311,20 +8303,18 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)): + jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) + jest-cli: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jju@1.4.0: {} - js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -9338,12 +8328,8 @@ snapshots: jsbn@1.1.0: {} - jsesc@0.5.0: {} - jsesc@2.5.2: {} - jsesc@3.0.2: {} - json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -9356,10 +8342,6 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json5@1.0.2: - dependencies: - minimist: 1.2.8 - json5@2.2.3: {} jsonfile@4.0.0: @@ -9385,14 +8367,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.6.0 - - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.1.7 + semver: 7.6.2 jwa@1.4.1: dependencies: @@ -9415,12 +8390,6 @@ snapshots: kleur@4.1.5: {} - language-subtag-registry@0.3.22: {} - - language-tags@1.0.9: - dependencies: - language-subtag-registry: 0.3.22 - latest-version@7.0.0: dependencies: package-json: 8.1.1 @@ -9513,7 +8482,7 @@ snapshots: lowercase-keys@3.0.0: {} - lru-cache@10.2.0: {} + lru-cache@10.2.2: {} lru-cache@4.1.5: dependencies: @@ -9524,10 +8493,6 @@ snapshots: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - lru-cache@7.18.3: {} magic-string@0.27.0: @@ -9536,7 +8501,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.2 make-error@1.3.6: {} @@ -9583,6 +8548,11 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime-db@1.52.0: {} mime-types@2.1.35: @@ -9611,10 +8581,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 @@ -9627,7 +8593,7 @@ snapshots: minimist@1.2.8: {} - minipass@7.0.4: {} + minipass@7.1.2: {} mixme@0.5.10: {} @@ -9651,27 +8617,27 @@ snapshots: netmask@2.0.2: {} - next@14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + next@14.2.3(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 14.1.4 - '@swc/helpers': 0.5.2 + '@next/env': 14.2.3 + '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001608 + caniuse-lite: 1.0.30001632 graceful-fs: 4.2.11 postcss: 8.4.31 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 14.1.4 - '@next/swc-darwin-x64': 14.1.4 - '@next/swc-linux-arm64-gnu': 14.1.4 - '@next/swc-linux-arm64-musl': 14.1.4 - '@next/swc-linux-x64-gnu': 14.1.4 - '@next/swc-linux-x64-musl': 14.1.4 - '@next/swc-win32-arm64-msvc': 14.1.4 - '@next/swc-win32-ia32-msvc': 14.1.4 - '@next/swc-win32-x64-msvc': 14.1.4 + '@next/swc-darwin-arm64': 14.2.3 + '@next/swc-darwin-x64': 14.2.3 + '@next/swc-linux-arm64-gnu': 14.2.3 + '@next/swc-linux-arm64-musl': 14.2.3 + '@next/swc-linux-x64-gnu': 14.2.3 + '@next/swc-linux-x64-musl': 14.2.3 + '@next/swc-win32-arm64-msvc': 14.2.3 + '@next/swc-win32-ia32-msvc': 14.2.3 + '@next/swc-win32-x64-msvc': 14.2.3 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -9734,43 +8700,6 @@ snapshots: has-symbols: 1.0.3 object-keys: 1.1.1 - object.entries@1.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.hasown@1.1.4: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - object.values@1.1.7: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -9783,14 +8712,14 @@ snapshots: dependencies: mimic-fn: 4.0.0 - optionator@0.9.3: + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 ora@5.4.1: dependencies: @@ -9873,7 +8802,7 @@ snapshots: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.6.0 + semver: 7.6.2 param-case@2.1.1: dependencies: @@ -9927,15 +8856,17 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.10.1: + path-scurry@1.11.1: dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 + lru-cache: 10.2.2 + minipass: 7.1.2 path-type@4.0.0: {} picocolors@1.0.0: {} + picocolors@1.0.1: {} + picomatch@2.3.1: {} pify@4.0.1: {} @@ -9952,8 +8883,6 @@ snapshots: dependencies: queue-lit: 1.5.2 - pluralize@8.0.0: {} - possible-typed-array-names@1.0.0: {} postcss-value-parser@4.2.0: {} @@ -9961,7 +8890,7 @@ snapshots: postcss@8.4.31: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 + picocolors: 1.0.1 source-map-js: 1.2.0 postcss@8.4.38: @@ -9970,7 +8899,7 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.2.0 - preferred-pm@3.1.2: + preferred-pm@3.1.3: dependencies: find-up: 5.0.0 find-yarn-workspace-root2: 1.2.16 @@ -9979,16 +8908,13 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-packagejson@2.4.14(prettier@3.2.5): + prettier-linter-helpers@1.0.0: dependencies: - sort-package-json: 2.10.0 - synckit: 0.9.0 - optionalDependencies: - prettier: 3.2.5 + fast-diff: 1.3.0 prettier@2.8.8: {} - prettier@3.2.5: {} + prettier@3.3.2: {} pretty-format@29.7.0: dependencies: @@ -10076,16 +9002,16 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-chartjs-2@3.3.0(chart.js@3.9.1)(react@18.2.0): + react-chartjs-2@3.3.0(chart.js@3.9.1)(react@18.3.1): dependencies: chart.js: 3.9.1 - react: 18.2.0 + react: 18.3.1 - react-dom@18.2.0(react@18.2.0): + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 + react: 18.3.1 + scheduler: 0.23.2 react-is@16.13.1: {} @@ -10093,46 +9019,48 @@ snapshots: react-is@18.2.0: {} - react-select@5.8.0(@types/react@18.2.75)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + react-is@18.3.1: {} + + react-select@5.8.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.24.4 '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.3(@types/react@18.2.75)(react@18.2.0) + '@emotion/react': 11.11.3(@types/react@18.3.3)(react@18.3.1) '@floating-ui/dom': 1.5.4 '@types/react-transition-group': 4.4.10 memoize-one: 6.0.0 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.75)(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.3)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react-spring@8.0.27(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + react-spring@8.0.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.24.4 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.24.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - react-window@1.8.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + react-window@1.8.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.24.4 memoize-one: 5.2.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - react@18.2.0: + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -10175,27 +9103,16 @@ snapshots: reflect-metadata@0.2.2: {} - reflect.getprototypeof@1.0.4: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 - regenerator-runtime@0.13.11: {} regenerator-runtime@0.14.1: {} - regexp-tree@0.1.27: {} - regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 - set-function-name: 2.0.1 + set-function-name: 2.0.2 registry-auth-token@5.0.2: dependencies: @@ -10205,10 +9122,6 @@ snapshots: dependencies: rc: 1.2.8 - regjsparser@0.10.0: - dependencies: - jsesc: 0.5.0 - require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -10225,27 +9138,14 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve.exports@2.0.2: {} - resolve@1.19.0: - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - resolve@1.22.8: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - responselike@2.0.1: dependencies: lowercase-keys: 2.0.0 @@ -10268,13 +9168,9 @@ snapshots: reusify@1.0.4: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - rimraf@5.0.5: + rimraf@5.0.7: dependencies: - glob: 10.3.10 + glob: 10.4.1 rollup@2.78.0: optionalDependencies: @@ -10309,21 +9205,19 @@ snapshots: safer-buffer@2.1.2: {} - scheduler@0.23.0: + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 semver-diff@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.2 semver@5.7.2: {} semver@6.3.1: {} - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 + semver@7.6.2: {} sentence-case@2.1.1: dependencies: @@ -10341,12 +9235,6 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 - set-function-name@2.0.1: - dependencies: - define-data-property: 1.1.4 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - set-function-name@2.0.2: dependencies: define-data-property: 1.1.4 @@ -10395,8 +9283,6 @@ snapshots: slash@3.0.0: {} - slash@4.0.0: {} - smart-buffer@4.2.0: {} smartwrap@2.0.2: @@ -10425,19 +9311,6 @@ snapshots: ip-address: 9.0.5 smart-buffer: 4.2.0 - sort-object-keys@1.1.3: {} - - sort-package-json@2.10.0: - dependencies: - detect-indent: 7.0.1 - detect-newline: 4.0.1 - get-stdin: 9.0.0 - git-hooks-list: 3.1.0 - globby: 13.2.2 - is-plain-obj: 4.1.0 - semver: 7.6.0 - sort-object-keys: 1.1.3 - source-map-js@1.2.0: {} source-map-support@0.5.13: @@ -10459,16 +9332,16 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.18 - spdx-exceptions@2.3.0: {} + spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.18 - spdx-license-ids@3.0.16: {} + spdx-license-ids@3.0.18: {} split-on-first@1.1.0: {} @@ -10517,21 +9390,6 @@ snapshots: get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 - string.prototype.matchall@4.0.11: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.2 - side-channel: 1.0.6 - string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 @@ -10581,30 +9439,30 @@ snapshots: stubborn-fs@1.2.5: {} - styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0): + styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1): dependencies: '@babel/helper-module-imports': 7.22.15 '@babel/traverse': 7.24.1(supports-color@5.5.0) '@emotion/is-prop-valid': 1.2.1 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.24.4)(styled-components@5.3.11(@babel/core@7.24.4)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)) + babel-plugin-styled-components: 2.1.4(@babel/core@7.24.7)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-is: 18.2.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-is: 18.3.1 shallowequal: 1.1.0 supports-color: 5.5.0 transitivePeerDependencies: - '@babel/core' - styled-jsx@5.1.1(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react@18.2.0): + styled-jsx@5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1): dependencies: client-only: 0.0.1 - react: 18.2.0 + react: 18.3.1 optionalDependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.7 babel-plugin-macros: 3.1.0 styled-system@5.1.5: @@ -10653,12 +9511,10 @@ snapshots: lower-case: 1.1.4 upper-case: 1.1.3 - synckit@0.9.0: + synckit@0.8.8: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.6.2 - - tapable@2.2.1: {} + tslib: 2.6.3 term-size@2.2.1: {} @@ -10697,28 +9553,29 @@ snapshots: trim-newlines@3.0.1: {} - ts-api-utils@1.3.0(typescript@5.4.4): + ts-api-utils@1.3.0(typescript@5.4.5): dependencies: - typescript: 5.4.4 + typescript: 5.4.5 - ts-jest@29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)))(typescript@5.4.4): + ts-jest@29.1.4(@babel/core@7.24.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4)) + jest: 29.7.0(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.6.0 - typescript: 5.4.4 + semver: 7.6.2 + typescript: 5.4.5 yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.24.4 + '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.4) - ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.4): + ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 @@ -10732,34 +9589,43 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.4 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + + ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.14.2 + acorn: 8.11.2 + acorn-walk: 8.3.1 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - tsc-alias@1.8.8: + tsc-alias@1.8.10: dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 commander: 9.5.0 globby: 11.1.0 mylas: 2.1.13 normalize-path: 3.0.0 plimit-lit: 1.6.1 - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - tslib@1.14.1: {} tslib@2.6.2: {} - tsutils@3.21.0(typescript@5.4.4): - dependencies: - tslib: 1.14.1 - typescript: 5.4.4 + tslib@2.6.3: {} tty-table@4.2.3: dependencies: @@ -10806,8 +9672,6 @@ snapshots: type-fest@0.13.1: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.6.0: {} @@ -10858,7 +9722,18 @@ snapshots: dependencies: is-typedarray: 1.0.0 - typescript@5.4.4: {} + typescript-eslint@7.13.0(eslint@9.4.0)(typescript@5.4.5): + dependencies: + '@typescript-eslint/eslint-plugin': 7.13.0(@typescript-eslint/parser@7.13.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.13.0(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.13.0(eslint@9.4.0)(typescript@5.4.5) + eslint: 9.4.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + typescript@5.4.5: {} uint8array-extras@0.3.0: {} @@ -10887,6 +9762,12 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.0 + update-browserslist-db@1.0.16(browserslist@4.23.1): + dependencies: + browserslist: 4.23.1 + escalade: 3.1.2 + picocolors: 1.0.1 + update-notifier@7.0.0: dependencies: boxen: 7.1.1 @@ -10898,7 +9779,7 @@ snapshots: is-npm: 6.0.0 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.6.0 + semver: 7.6.2 semver-diff: 4.0.0 xdg-basedir: 5.1.0 @@ -10912,11 +9793,11 @@ snapshots: dependencies: punycode: 2.3.1 - use-isomorphic-layout-effect@1.1.2(@types/react@18.2.75)(react@18.2.0): + use-isomorphic-layout-effect@1.1.2(@types/react@18.3.3)(react@18.3.1): dependencies: - react: 18.2.0 + react: 18.3.1 optionalDependencies: - '@types/react': 18.2.75 + '@types/react': 18.3.3 util-deprecate@1.0.2: {} @@ -10966,28 +9847,6 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 - which-builtin-type@1.1.3: - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.15 - - which-collection@1.0.1: - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - which-module@2.0.1: {} which-pm@2.0.0: @@ -11015,6 +9874,8 @@ snapshots: dependencies: string-width: 5.1.2 + word-wrap@1.2.5: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -11061,8 +9922,6 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: {} - yaml@1.10.2: {} yargs-parser@18.1.3: @@ -11100,7 +9959,7 @@ snapshots: yocto-queue@0.1.0: {} - zx@8.0.1: + zx@8.1.2: optionalDependencies: '@types/fs-extra': 11.0.4 - '@types/node': 20.12.7 + '@types/node': 20.14.2 From 6b17607f9f6d51eb59d23bf1d6ba42d54e89bd05 Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 12 Jun 2024 17:21:59 +0200 Subject: [PATCH 249/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Method?= =?UTF-8?q?=20sendCommand=20now=20returns=20a=20promise?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of returning a new function, let's run it directly and return a promise --- .changeset/spotty-glasses-smell.md | 5 ++++ .../use-case/SendCommandUseCase.test.ts | 2 +- .../command/use-case/SendCommandUseCase.ts | 7 ++--- .../device-session/model/DeviceSession.ts | 26 +++++++++---------- 4 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 .changeset/spotty-glasses-smell.md diff --git a/.changeset/spotty-glasses-smell.md b/.changeset/spotty-glasses-smell.md new file mode 100644 index 000000000..c632242f0 --- /dev/null +++ b/.changeset/spotty-glasses-smell.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/device-sdk-core": patch +--- + +Change sendCommand signature to directly return a Promise instead of a new function diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts index 64b58466d..c9ea6fb16 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.test.ts @@ -36,7 +36,7 @@ describe("SendCommandUseCase", () => { jest .spyOn(deviceSession, "sendCommand") - .mockReturnValue(async () => Promise.resolve({ status: "success" })); + .mockResolvedValue({ status: "success" }); const response = await useCase.execute<{ status: string }>({ sessionId: fakeSessionId, diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.ts index 7b64b80af..81e0012e6 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.ts @@ -54,11 +54,8 @@ export class SendCommandUseCase { return deviceSessionOrError.caseOf({ // Case device session found - Right: async (deviceSession) => { - const deviceModelId = deviceSession.connectedDevice.deviceModel.id; - const action = deviceSession.sendCommand(command); - return await action(deviceModelId); - }, + Right: async (deviceSession) => + await deviceSession.sendCommand(command), // Case device session not found Left: (error) => { this._logger.error("Error getting session", { diff --git a/packages/core/src/internal/device-session/model/DeviceSession.ts b/packages/core/src/internal/device-session/model/DeviceSession.ts index b22000bd6..5bb693241 100644 --- a/packages/core/src/internal/device-session/model/DeviceSession.ts +++ b/packages/core/src/internal/device-session/model/DeviceSession.ts @@ -4,7 +4,6 @@ import { v4 as uuidv4 } from "uuid"; import { Command } from "@api/command/Command"; import { CommandUtils } from "@api/command/utils/CommandUtils"; -import { DeviceModelId } from "@api/device/DeviceModel"; import { DeviceStatus } from "@api/device/DeviceStatus"; import { DeviceSessionState, @@ -97,18 +96,19 @@ export class DeviceSession { }); } - sendCommand(command: Command) { - return async (deviceModelId: DeviceModelId): Promise => { - const apdu = command.getApdu(); - const response = await this.sendApdu(apdu.getRawApdu()); - - return response.caseOf({ - Left: (err) => { - throw err; - }, - Right: (r) => command.parseResponse(r, deviceModelId), - }); - }; + async sendCommand( + command: Command, + ): Promise { + const apdu = command.getApdu(); + const response = await this.sendApdu(apdu.getRawApdu()); + + return response.caseOf({ + Left: (err) => { + throw err; + }, + Right: (r) => + command.parseResponse(r, this._connectedDevice.deviceModel.id), + }); } close() { From a5564a11e2deee51a4259c77f457dbb60e501afe Mon Sep 17 00:00:00 2001 From: "Valentin D. Pinkman" Date: Wed, 12 Jun 2024 18:00:04 +0200 Subject: [PATCH 250/253] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(core):=20Remove?= =?UTF-8?q?=20unused=20params=20types=20in=20sendCommand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/api/command/use-case/SendCommandUseCase.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/core/src/api/command/use-case/SendCommandUseCase.ts b/packages/core/src/api/command/use-case/SendCommandUseCase.ts index 81e0012e6..3f706e87b 100644 --- a/packages/core/src/api/command/use-case/SendCommandUseCase.ts +++ b/packages/core/src/api/command/use-case/SendCommandUseCase.ts @@ -15,10 +15,6 @@ export type SendCommandUseCaseArgs = { * The command to send. */ command: Command; - /** - * The parameters of the command. - */ - params: Args; }; /** From 8248381f6f4afc621a977cd9939d000b12147a57 Mon Sep 17 00:00:00 2001 From: Mathieu Bertin Date: Fri, 14 Jun 2024 11:10:55 +0200 Subject: [PATCH 251/253] =?UTF-8?q?=F0=9F=91=B7=20(core):=20Update=20relea?= =?UTF-8?q?se=20github=20actions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 2 +- .github/workflows/version.yml | 2 +- packages/core/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d036c7532..3b8820842 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,7 @@ name: publish npm packages on: push: branches: - - develop + - main env: FORCE_COLOR: "1" diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index 15bd09136..85de62882 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -2,7 +2,7 @@ name: create release pull request on: push: branches: - - develop + - release env: FORCE_COLOR: "1" diff --git a/packages/core/package.json b/packages/core/package.json index 84ff7327d..6ed6c6a87 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@ledgerhq/device-sdk-core", - "version": "0.0.1", + "version": "0.2.0", "license": "MIT", "exports": { ".": { From 822bdd4ecb7bc95f0bccf4935aae30272f3ae478 Mon Sep 17 00:00:00 2001 From: Mathieu Bertin Date: Fri, 14 Jun 2024 11:21:09 +0200 Subject: [PATCH 252/253] =?UTF-8?q?=F0=9F=93=9D=20(core):=20Update=20READM?= =?UTF-8?q?E.md=20for=20release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/core/README.md b/packages/core/README.md index b35649978..32f74178d 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -1,5 +1,9 @@ # Device SDK Core Library Documentation +> [!CAUTION] +> This is still under development and we are free to make new interfaces which may lead to Device SDK breaking changes. + + - [Device SDK Core Library Documentation](#device-sdk-core-library-documentation) - [Description](#description) - [Installation](#installation) @@ -52,6 +56,9 @@ Some of the APIs exposed return objects of type `Observable` from RxJS. Ensure y - Close app - Get battery status +> [!NOTE] +> At the moment we do not provide the possibility to distinguish two devices of the same model, via USB and to avoid connection to the same device twice. + ### Setting up the SDK The core package exposes an SDK builder `DeviceSdkBuilder` which will be used to initialise the SDK with your configuration. From 0c3e3dbe94e051d4c3a0b0219041de5883e94764 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 14 Jun 2024 09:25:46 +0000 Subject: [PATCH 253/253] =?UTF-8?q?=F0=9F=94=96=20(release):=20versioning?= =?UTF-8?q?=20packages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/blue-insects-punch.md | 5 ---- .changeset/curly-knives-design.md | 5 ---- .changeset/four-knives-judge.md | 5 ---- .changeset/fresh-eels-sip.md | 5 ---- .changeset/gold-chairs-divide.md | 5 ---- .changeset/olive-radios-impress.md | 5 ---- .changeset/pink-maps-call.md | 5 ---- .changeset/serious-clouds-provide.md | 5 ---- .changeset/shaggy-experts-flash.md | 5 ---- .changeset/spicy-dogs-sneeze.md | 5 ---- .changeset/spotty-glasses-smell.md | 5 ---- .changeset/spotty-worms-move.md | 5 ---- .changeset/stupid-boats-tan.md | 5 ---- .changeset/tall-onions-learn.md | 5 ---- apps/sample/CHANGELOG.md | 8 +++++++ apps/sample/package.json | 2 +- packages/core/CHANGELOG.md | 35 ++++++++++++++++++++++++++++ packages/core/package.json | 2 +- 18 files changed, 45 insertions(+), 72 deletions(-) delete mode 100644 .changeset/blue-insects-punch.md delete mode 100644 .changeset/curly-knives-design.md delete mode 100644 .changeset/four-knives-judge.md delete mode 100644 .changeset/fresh-eels-sip.md delete mode 100644 .changeset/gold-chairs-divide.md delete mode 100644 .changeset/olive-radios-impress.md delete mode 100644 .changeset/pink-maps-call.md delete mode 100644 .changeset/serious-clouds-provide.md delete mode 100644 .changeset/shaggy-experts-flash.md delete mode 100644 .changeset/spicy-dogs-sneeze.md delete mode 100644 .changeset/spotty-glasses-smell.md delete mode 100644 .changeset/spotty-worms-move.md delete mode 100644 .changeset/stupid-boats-tan.md delete mode 100644 .changeset/tall-onions-learn.md create mode 100644 apps/sample/CHANGELOG.md create mode 100644 packages/core/CHANGELOG.md diff --git a/.changeset/blue-insects-punch.md b/.changeset/blue-insects-punch.md deleted file mode 100644 index 6dc178deb..000000000 --- a/.changeset/blue-insects-punch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": minor ---- - -Add SendCommand use case + GetOsVersion command diff --git a/.changeset/curly-knives-design.md b/.changeset/curly-knives-design.md deleted file mode 100644 index 3d83f6b11..000000000 --- a/.changeset/curly-knives-design.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": patch ---- - -Naming DeviceSession diff --git a/.changeset/four-knives-judge.md b/.changeset/four-knives-judge.md deleted file mode 100644 index cded226e4..000000000 --- a/.changeset/four-knives-judge.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": minor ---- - -Handle device session state diff --git a/.changeset/fresh-eels-sip.md b/.changeset/fresh-eels-sip.md deleted file mode 100644 index 98d83ee0b..000000000 --- a/.changeset/fresh-eels-sip.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": minor ---- - -Polling on connected device to get device status. diff --git a/.changeset/gold-chairs-divide.md b/.changeset/gold-chairs-divide.md deleted file mode 100644 index 47384c41a..000000000 --- a/.changeset/gold-chairs-divide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": minor ---- - -Add `GetBatteryStatus` command. diff --git a/.changeset/olive-radios-impress.md b/.changeset/olive-radios-impress.md deleted file mode 100644 index 3ed0121ba..000000000 --- a/.changeset/olive-radios-impress.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": minor ---- - -Implement Close App command. diff --git a/.changeset/pink-maps-call.md b/.changeset/pink-maps-call.md deleted file mode 100644 index d659621ae..000000000 --- a/.changeset/pink-maps-call.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": minor ---- - -Implement Open Application command. diff --git a/.changeset/serious-clouds-provide.md b/.changeset/serious-clouds-provide.md deleted file mode 100644 index 95e6c5767..000000000 --- a/.changeset/serious-clouds-provide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": minor ---- - -Handle unwanted transport disconnection diff --git a/.changeset/shaggy-experts-flash.md b/.changeset/shaggy-experts-flash.md deleted file mode 100644 index 27127b07a..000000000 --- a/.changeset/shaggy-experts-flash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": minor ---- - -Implement GetAppAndVersion command. diff --git a/.changeset/spicy-dogs-sneeze.md b/.changeset/spicy-dogs-sneeze.md deleted file mode 100644 index b85bf8049..000000000 --- a/.changeset/spicy-dogs-sneeze.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": patch ---- - -Add TSDoc comments for things exposed through API diff --git a/.changeset/spotty-glasses-smell.md b/.changeset/spotty-glasses-smell.md deleted file mode 100644 index c632242f0..000000000 --- a/.changeset/spotty-glasses-smell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": patch ---- - -Change sendCommand signature to directly return a Promise instead of a new function diff --git a/.changeset/spotty-worms-move.md b/.changeset/spotty-worms-move.md deleted file mode 100644 index bead99267..000000000 --- a/.changeset/spotty-worms-move.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": minor ---- - -Handle device disconnection intent (disconnect on click, method call), clear session diff --git a/.changeset/stupid-boats-tan.md b/.changeset/stupid-boats-tan.md deleted file mode 100644 index db82836c5..000000000 --- a/.changeset/stupid-boats-tan.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": patch ---- - -Clean exports diff --git a/.changeset/tall-onions-learn.md b/.changeset/tall-onions-learn.md deleted file mode 100644 index 32e0845a1..000000000 --- a/.changeset/tall-onions-learn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@ledgerhq/device-sdk-core": patch ---- - -Command signature: pass parameters to command constructor diff --git a/apps/sample/CHANGELOG.md b/apps/sample/CHANGELOG.md new file mode 100644 index 000000000..0bd9ad07f --- /dev/null +++ b/apps/sample/CHANGELOG.md @@ -0,0 +1,8 @@ +# @ledgerhq/device-sdk-sample + +## 0.1.1 + +### Patch Changes + +- Updated dependencies [[`c1cdfcd`](https://github.com/LedgerHQ/device-sdk-ts/commit/c1cdfcd182350ce1b0c6cb1a3a7368756e07619e), [`56cb882`](https://github.com/LedgerHQ/device-sdk-ts/commit/56cb8821f0fd38270348a732134b7755f6dfbfb3), [`8563963`](https://github.com/LedgerHQ/device-sdk-ts/commit/8563963b04a477a7728ecfca4c86274d9247b8ba), [`8bef03f`](https://github.com/LedgerHQ/device-sdk-ts/commit/8bef03ffe3348b5f660ea3f180bf6ece93dd3f92), [`5deb5a8`](https://github.com/LedgerHQ/device-sdk-ts/commit/5deb5a82779057162c37c1692319c887da72bb55), [`f5f2ebe`](https://github.com/LedgerHQ/device-sdk-ts/commit/f5f2ebe59baf7847221bd2be32d41a10fb98c30e), [`06f2f60`](https://github.com/LedgerHQ/device-sdk-ts/commit/06f2f60bf95f68c8dfb3ca047c076900f2a4c1ec), [`43e3372`](https://github.com/LedgerHQ/device-sdk-ts/commit/43e3372efa2f264677837c6bf1d045ea808b3bcf), [`0fc032a`](https://github.com/LedgerHQ/device-sdk-ts/commit/0fc032a9332a81ca25e34404be979dbcfc4086b3), [`44a4a68`](https://github.com/LedgerHQ/device-sdk-ts/commit/44a4a686ec640b72b5750c0ef70098ac8eaf8a98), [`6b17607`](https://github.com/LedgerHQ/device-sdk-ts/commit/6b17607f9f6d51eb59d23bf1d6ba42d54e89bd05), [`3bbe755`](https://github.com/LedgerHQ/device-sdk-ts/commit/3bbe755db6606c42a8fc6d845195acc0df6933be), [`192c63c`](https://github.com/LedgerHQ/device-sdk-ts/commit/192c63c12bb19f8d5e2314cab00ea7fbf6c93b47), [`e3e9065`](https://github.com/LedgerHQ/device-sdk-ts/commit/e3e90655108331bccf5cd228551eb7d81f5d81a1)]: + - @ledgerhq/device-sdk-core@0.3.0 diff --git a/apps/sample/package.json b/apps/sample/package.json index fdb9f8d90..853ee4780 100644 --- a/apps/sample/package.json +++ b/apps/sample/package.json @@ -1,6 +1,6 @@ { "name": "@ledgerhq/device-sdk-sample", - "version": "0.1.0", + "version": "0.1.1", "private": true, "scripts": { "dev": "next dev", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md new file mode 100644 index 000000000..98e3f1215 --- /dev/null +++ b/packages/core/CHANGELOG.md @@ -0,0 +1,35 @@ +# @ledgerhq/device-sdk-core + +## 0.3.0 + +### Minor Changes + +- [#62](https://github.com/LedgerHQ/device-sdk-ts/pull/62) [`c1cdfcd`](https://github.com/LedgerHQ/device-sdk-ts/commit/c1cdfcd182350ce1b0c6cb1a3a7368756e07619e) Thanks [@valpinkman](https://github.com/valpinkman)! - Add SendCommand use case + GetOsVersion command + +- [#74](https://github.com/LedgerHQ/device-sdk-ts/pull/74) [`8563963`](https://github.com/LedgerHQ/device-sdk-ts/commit/8563963b04a477a7728ecfca4c86274d9247b8ba) Thanks [@jdabbech-ledger](https://github.com/jdabbech-ledger)! - Handle device session state + +- [#78](https://github.com/LedgerHQ/device-sdk-ts/pull/78) [`8bef03f`](https://github.com/LedgerHQ/device-sdk-ts/commit/8bef03ffe3348b5f660ea3f180bf6ece93dd3f92) Thanks [@jiyuzhuang](https://github.com/jiyuzhuang)! - Polling on connected device to get device status. + +- [#72](https://github.com/LedgerHQ/device-sdk-ts/pull/72) [`5deb5a8`](https://github.com/LedgerHQ/device-sdk-ts/commit/5deb5a82779057162c37c1692319c887da72bb55) Thanks [@jiyuzhuang](https://github.com/jiyuzhuang)! - Add `GetBatteryStatus` command. + +- [#82](https://github.com/LedgerHQ/device-sdk-ts/pull/82) [`f5f2ebe`](https://github.com/LedgerHQ/device-sdk-ts/commit/f5f2ebe59baf7847221bd2be32d41a10fb98c30e) Thanks [@jiyuzhuang](https://github.com/jiyuzhuang)! - Implement Close App command. + +- [#81](https://github.com/LedgerHQ/device-sdk-ts/pull/81) [`06f2f60`](https://github.com/LedgerHQ/device-sdk-ts/commit/06f2f60bf95f68c8dfb3ca047c076900f2a4c1ec) Thanks [@jiyuzhuang](https://github.com/jiyuzhuang)! - Implement Open Application command. + +- [#80](https://github.com/LedgerHQ/device-sdk-ts/pull/80) [`43e3372`](https://github.com/LedgerHQ/device-sdk-ts/commit/43e3372efa2f264677837c6bf1d045ea808b3bcf) Thanks [@jdabbech-ledger](https://github.com/jdabbech-ledger)! - Handle unwanted transport disconnection + +- [#73](https://github.com/LedgerHQ/device-sdk-ts/pull/73) [`0fc032a`](https://github.com/LedgerHQ/device-sdk-ts/commit/0fc032a9332a81ca25e34404be979dbcfc4086b3) Thanks [@jiyuzhuang](https://github.com/jiyuzhuang)! - Implement GetAppAndVersion command. + +- [#68](https://github.com/LedgerHQ/device-sdk-ts/pull/68) [`3bbe755`](https://github.com/LedgerHQ/device-sdk-ts/commit/3bbe755db6606c42a8fc6d845195acc0df6933be) Thanks [@jdabbech-ledger](https://github.com/jdabbech-ledger)! - Handle device disconnection intent (disconnect on click, method call), clear session + +### Patch Changes + +- [#75](https://github.com/LedgerHQ/device-sdk-ts/pull/75) [`56cb882`](https://github.com/LedgerHQ/device-sdk-ts/commit/56cb8821f0fd38270348a732134b7755f6dfbfb3) Thanks [@jdabbech-ledger](https://github.com/jdabbech-ledger)! - Naming DeviceSession + +- [#79](https://github.com/LedgerHQ/device-sdk-ts/pull/79) [`44a4a68`](https://github.com/LedgerHQ/device-sdk-ts/commit/44a4a686ec640b72b5750c0ef70098ac8eaf8a98) Thanks [@ofreyssinet-ledger](https://github.com/ofreyssinet-ledger)! - Add TSDoc comments for things exposed through API + +- [#100](https://github.com/LedgerHQ/device-sdk-ts/pull/100) [`6b17607`](https://github.com/LedgerHQ/device-sdk-ts/commit/6b17607f9f6d51eb59d23bf1d6ba42d54e89bd05) Thanks [@valpinkman](https://github.com/valpinkman)! - Change sendCommand signature to directly return a Promise instead of a new function + +- [#76](https://github.com/LedgerHQ/device-sdk-ts/pull/76) [`192c63c`](https://github.com/LedgerHQ/device-sdk-ts/commit/192c63c12bb19f8d5e2314cab00ea7fbf6c93b47) Thanks [@jdabbech-ledger](https://github.com/jdabbech-ledger)! - Clean exports + +- [#99](https://github.com/LedgerHQ/device-sdk-ts/pull/99) [`e3e9065`](https://github.com/LedgerHQ/device-sdk-ts/commit/e3e90655108331bccf5cd228551eb7d81f5d81a1) Thanks [@ofreyssinet-ledger](https://github.com/ofreyssinet-ledger)! - Command signature: pass parameters to command constructor diff --git a/packages/core/package.json b/packages/core/package.json index 6ed6c6a87..425b00870 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@ledgerhq/device-sdk-core", - "version": "0.2.0", + "version": "0.3.0", "license": "MIT", "exports": { ".": {
    -
    - - Discover BLE devices - - { - getDeviceError && ( - {getDeviceError} - ) - } - { - requestDeviceError && ( - {requestDeviceError} - ) - } - { - devices.length > 0 && ( -
      - Bluetooth devices discover result: - {devices.map(device => ( -
    • {`${device.name} [${device.id}] ${device.gatt?.connected}`}
    • - ) - )} -
    - ) - } -
    -
    - -
    -

    - Get started by editing  - app/page.tsx -

    - -
    - -
    - Next.js Logo -
    - - -

    q;bAvSclGx^n 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 T-Yjfc(cSaeXz%yiCxHI|G4Prv9jX*Ire%_S#>4 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 TPW3}plx0-_fq#V%1IYgY{!Cn? literal 0 HcmV?d00001 From 8bb5ef3ffaedb8e4bcefec314d11e36d620be852 Mon Sep 17 00:00:00 2001 From: Louis Aussedat Date: Tue, 30 Jan 2024 18:08:24 +0100 Subject: [PATCH 053/253] feature(sample): replace custom provider with style provider --- apps/sample/src/pages/_app.tsx | 6 +++--- apps/sample/src/providers/theme.tsx | 27 --------------------------- 2 files changed, 3 insertions(+), 30 deletions(-) delete mode 100644 apps/sample/src/providers/theme.tsx diff --git a/apps/sample/src/pages/_app.tsx b/apps/sample/src/pages/_app.tsx index 6fa2c0544..b5cacbd44 100644 --- a/apps/sample/src/pages/_app.tsx +++ b/apps/sample/src/pages/_app.tsx @@ -11,8 +11,8 @@ * https://nextjs.org/docs/advanced-features/custom-app */ -import { CustomThemeProvider } from "@/providers/theme"; import { GlobalStyle } from "@/styles/globalstyles"; +import { StyleProvider } from "@ledgerhq/react-ui"; import type { AppProps } from "next/app"; import { Inter } from "next/font/google"; @@ -21,10 +21,10 @@ const inter = Inter({ subsets: ["latin"] }); export default function App({ Component, pageProps }: AppProps) { return (

    uH195IX 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

FV+C+4-T^Qf}1Ye^tAx(u< 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

-
- - Discover BLE devices - - { - getDeviceError && ( - {getDeviceError} - ) - } - { - requestDeviceError && ( - {requestDeviceError} - ) - } - { - devices.length > 0 && ( -
    - Bluetooth devices discover result: - {devices.map(device => ( -
  • {`${device.name} : ${device.id} : ${device.gatt?.connected}`}
  • - ) - )} -
- ) - } -
-
+
+ + Discover BLE devices + + { + getDeviceError && ( + {getDeviceError} + ) + } + { + requestDeviceError && ( + {requestDeviceError} + ) + } + { + devices.length > 0 && ( +
    + Bluetooth devices discover result: + {devices.map(device => ( +
  • {`${device.name} : ${device.id} : ${device.gatt?.connected}`}
  • + ) + )} +
+ ) + } +
+